PDA

Ver la Versión Completa : recibir correo con adjuntos


smessina
02-06-2006, 02:51:22
estuve buscando info al respecto pero los hilos que encontre no los entendi muy bien, estuve copiando y pegando codigo sin entender demasiado pero no pude resolver lo siguiente:

necesito descargar un mail y los adjuntos de estos, usando indy tengo delphi 7

copiando y pegando codigo hice lo siguiente (repito: sin entender como es el proceso para descargar y guardar en una carpeta un adjunto)


procedure Tfppal.suiButton7Click(Sender: TObject);
var
n, nummsgs : integer;
x:integer;
begin
Memo1.Lines.Clear;
//Conectamos!
idpop31.Connect(0);
//Obtenemos el numero de emails que tenemos
NumMsgs:=idpop31.CheckMessages;
Memo1.lines.add( 'Emails:' +IntToStr(NumMsgs) );
for n:=1 to NumMsgs do begin
for x:=0 to Pred( mail.MessageParts.Count) do
begin
if (mail.MessageParts.Items[x] is TIdAttachment) then
begin // si es attchamente lo guardo
Memo1.Lines.Add( TIdAttachment( mail.MessageParts.Items[x]).Filename);
TIdAttachment(mail.MessageParts.Items[x]).SaveToFile(ExtractFilePath(GetModuleName(hInstance)) +
TIdAttachment(mail.MessageParts.Items[x]).Filename);
end;
next;
end;

idpop31.RetrieveHeader(n,mail);
Memo1.Lines.Add( 'Email Nº:'+IntToStr(n)+' De:'+mail.From.Text+' Tema:'+mail.Subject );
mail.Clear;
end;
idpop31.Disconnect;
end;



esto me descarga los encabezados de los mail y me los agregar a memo1 pero no me descarga los adjuntos.

alguna idea de como se hace o de que me està faltando?


gracias por su tiempo.

un abrazo

epuigdef
02-06-2006, 08:10:53
Buenas!

Tengo un programa que me descarga correos, y no veo mucha diferencia con el tuyo. De todas formas, donde tu guardas el adjunto:


TIdAttachment(mail.MessageParts.Items[x]).SaveToFile(ExtractFilePath(GetModuleName(hInstance)) +
TIdAttachment(mail.MessageParts.Items[x]).Filename);



yo tengo el siguiente código:


if (Msg.MessageParts.Items[intIndex] is TIdAttachmentFile) then
begin
ata := TIdAttachmentFile(Msg.MessageParts.Items[intIndex]);
ata.SaveToFile('.\'+ata.FileName);
end;


Básicamente, lo guardo en el directorio del programa

Espero que te sirva

Edu

smessina
02-06-2006, 18:59:49
gracias por contestar epuigdef


todavia no pude probarlo porque no llegue a casa.
... pero como que tienes declarado a ata en el ejemplo de codigo?


ata := TIdAttachmentFile(Msg.MessageParts.Items[intIndex]);
ata.SaveToFile('.\'+ata.FileName);

gracias por tu tiempo.

un abrazo

smessina
04-06-2006, 17:37:40
gracias por su ayuda.


ya pude solucionarlo

me faltaba poner


idpop31.Retrieve(n,mail);



el codigo quedaria asi

procedure Tfppal.suiButton7Click(Sender: TObject);
var
n, nummsgs : integer;
x:integer;
begin
Memo1.Lines.Clear;
//Conectamos!
idpop31.Connect(0);
//Obtenemos el numero de emails que tenemos
NumMsgs:=idpop31.CheckMessages;
Memo1.lines.add( 'Emails:' +IntToStr(NumMsgs) );
for n:=1 to NumMsgs do begin
idpop31.Retrieve(n,mail);
for x:=0 to Pred( mail.MessageParts.Count) do
begin
if (mail.MessageParts.Items[x] is TIdAttachment) then
begin // si es attchamente lo guardo
Memo1.Lines.Add( TIdAttachment( mail.MessageParts.Items[x]).Filename);
TIdAttachment(mail.MessageParts.Items[x]).SaveToFile(ExtractFilePath(GetModuleName(hInstance)) +
TIdAttachment(mail.MessageParts.Items[x]).Filename);
end;
next;
end;

idpop31.RetrieveHeader(n,mail);
Memo1.Lines.Add( 'Email Nº:'+IntToStr(n)+' De:'+mail.From.Text+' Tema:'+mail.Subject );
mail.Clear;
end;
idpop31.Disconnect;

end;

epuigdef
05-06-2006, 07:39:21
Ok! Felicidades por solucionarlo!

De todas formas, por si alguien más visita este hilo, te contesto la pregunta:

ata está definido como TIdAttachmentFile

Un saludo

Edu