Il codice è in realtà molto banale
IdPOP3.Connect;
if IdPOP3.Connected then
begin
if IdPOP3.CheckMessages > 0 then
begin
for cnt1 := 1 to IdPOP3.CheckMessages do
begin
IdMessage.Clear;
IdPOP3.Retrieve(cnt1,IdMessage);
IdPOP3.Delete(cnt1);
end;
IdMessage.SaveToFile('received/'+DateTimeToStr(Now)+IdMessage.Subject+'.eml');
end;
IdPOP3.Disconnect;
end;
L'operazione che manda in errore il programma è proprio il SaveToFile.
Forse c'è un altro modo per fare questa cosa?
L'operazione che manda in errore il programma è proprio il SaveToFile.
Sì, ma può essere debuggata pure lei, per vedere se qualcosa non va !!!
Secondo me, il problema è nel nome del file che stai creando:
IdMessage.SaveToFile('received/'+DateTimeToStr(Now)+IdMessage.Subject+'.eml');
- il percorso di destinazione inizia con "received", senza la "/" iniziale. Questo, più che un errore, è un possibile problema ...
- nel nome del file, metti la data, che quindi può contenere i ":", che non sono accettati da tutti i filesystem nel nome di un file
- nel nome del file, metti "IdMessage.Subject". Anche qui, non puoi sapere a priori cosa conterrà, nel tempo, prima o poi, ti capiterà una email che contiene un carattere che il filesystem non digerisce ...
Per toglierti tutti i dubbi, fai così:
Dichiari una variabile Idx di tipo integer, e la inizializzi a 0
Il salvataggio della email lo fai così:
Idx:=Idx + 1;
IdMessage.SaveToFile('received/'+IntToStr(Idx)+'.eml');
Vedrai che funziona !!!
Occhio però al fatto che il percorso non inizia con "/" quindi, se non ricordo male, si aspetta di trovare una directory che si chiama "received" in quello che in quel momento è il "percorso corrente".
Ciao, Mario