mettendo assieme un po' di esempi ho realizzato quello che mi serve, ovvero scaricare un allegato TXT che devo elaborare.
lo posto nel caso servisse a qualcuno
procedure TfrmMain.Button2Click(Sender: TObject);
var
iCnt, iMsg: Integer;
IMAPClient: TIdIMAP4;
OpenSSLHandler: TIdSSLIOHandlerSocketOpenSSL;
MsgObject: TIdMessage;
SearchInfo: array of TIdIMAP4SearchRec;
Attachment: TIdAttachment;
begin
IMAPClient := TIdIMAP4.Create(nil);
IMAPClient.IOHandler := nil ;
try
try
// parametri utente
IMAPClient.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(IMAPClient);
IMAPClient.Host := 'imap.gmail.com';
IMAPClient.Port := 993;
IMAPClient.UseTLS := utUseImplicitTLS;
IMAPClient.Username := utente;
IMAPClient.Password := password ;
try
IMAPClient.Connect;
finally
SetLength(SearchInfo, 1);
SearchInfo[0].SearchKey := skSubject; // skSubject, skFrom, skBody, ecc....
SearchInfo[0].Text := 'stringa da cercare';
// cerca nella casella e-mail
if IMAPClient.SelectMailBox('INBOX') and IMAPClient.SearchMailBox(SearchInfo) then begin
if Length(IMAPClient.MailBox.SearchResult) >= 0 then begin
for iCnt := 0 to High(IMAPClient.MailBox.SearchResult) do
begin
MsgObject := TIdMessage.Create(nil);
try
if IMAPClient.Retrieve(IMAPClient.MailBox.SearchResult[iCnt],MsgObject) then
begin
for iMsg := 0 to MsgObject.MessageParts.Count - 1 do
begin
if (MsgObject.MessageParts.Items[iMsg] is TIdAttachment) then begin
// gestisci allegato
Attachment := TIdAttachment(MsgObject.MessageParts.Items[iMsg]);
Attachment.SaveToFile(Attachment.Name);
end;
end;
end;
finally
MsgObject.Free;
end;
end;
end;
end;
end;
finally
IMAPClient.Disconnect;
end;
finally
IMAPClient.Free;
end;
end;