Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Leer correo con TIdPOP3

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Leer correo con TIdPOP3 Responder citando

Partiendo del ejemplo en Pascal que viene con Indy 9.0.17 he tratado de ver el correo que hay en un buzón POP3. He llegado hasta aquí:
Código:
nMensajes = Recibir->CheckMessages();

if (nMensajes < 1)
     return;

for (nItem = 1; nItem <= nMensajes; nItem ++)
{
     Correo->Clear();
     if (!Recibir->RetrieveHeader(nItem, Correo))
          continue;

     slLog->Clear();
     for (int nParte = 0; nParte < Correo->MessageParts->Count; nParte ++)
     if (Correo->MessageParts->Items[nParte]->ClassNameIs("TIdText"))
     {
          slLog->Text = Correo->MessageParts->Body->Text;
          break;
     }
}

Pero el codigo que hay en este último if no soy capaz de adaptarlo; estoy partiendo de este código:
Código:
for intIndex := 0 to Pred(Msg.MessageParts.Count) do
      begin
            if (Msg.MessageParts.Items[intIndex] is TIdAttachment) then
                  begin //general attachment
                        pnlAttachments.visible := true;
                        li := lvMessageParts.Items.Add;
                        li.ImageIndex := 8;
                        li.Caption := TIdAttachment(Msg.MessageParts.Items[intIndex]).Filename;
               li.SubItems.Add(TIdAttachment(Msg.MessageParts.Items[intIndex]).ContentType);
                  end
            else
                  begin //body text
                        if Msg.MessageParts.Items[intIndex] is TIdText then
                              begin
                                    Memo1.Lines.Clear;
                                    Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[intIndex]).Body);
                              end
                        end;
                  end;

pero, por más pruebas que he hecho no logro adaptar la línea Memo1.Lines.AddStrings a Builder.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Código:
...
Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[intIndex]).Body);
...

Por esta forma

Código:
Memo1->Lines->AddStrings(dynamic_cast<TIdText*>(Msg->MessageParts->Items[intIndex])->Body);

_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

[quote="César C. Salazar González"][code] Memo1-> Lines-> AddStrings (dynamic_cast <TIdText> (MSG-> MessageParts-> items [intIndex]) -> Body);[/ code][/ quote]
¡Perfecto! ¡Eres un monstruo César!
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Me está ocurriendo algo que no acabo de entender. Mirando la ayuda de este objeto TIdPOP3 veo que hay tres métodos:
    - RetrieveHeader, que recupera las cabeceras del mensaje en un TIdMessage.
    - Retrieve, que debería recuperar el cuerpo del mensaje en ese mismo TIdMessage.
    - RetrieveRaw, que recupera todo el mensaje en un TStringList.

Mientras el primero y el último funcionan sin problemas, al ejecutar el segundo siempre me lo devuelve vacío. Por más vueltas que le he dado a la ayuda y al ejemplo que viene (aunque esté en Pascal) no soy capaz de recuperar el mensaje. El código Pascal es este:
Código:
for intIndex := 0 to Pred(Msg.MessageParts.Count) do
   begin
      if (Msg.MessageParts.Items[intIndex] is TIdAttachment) then
         begin //general attachment
            pnlAttachments.visible := true;
            li := lvMessageParts.Items.Add;
            li.ImageIndex := 8;
            li.Caption := TIdAttachment(Msg.MessageParts.Items[intIndex]).Filename;
            li.SubItems.Add(TIdAttachment(Msg.MessageParts.Items[intIndex]).ContentType);
         end
      else
         begin //body text
            if Msg.MessageParts.Items[intIndex] is TIdText then
               begin
                  Memo1.Lines.Clear;
                  Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[intIndex]).Body);
               end
         end;
   end;

_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.