Habe nen
POP3 Client geschrieben.
Immer wenn ich versuche ne E-Mail zu speichern über die SaveToFile methode von TIdMessage
dann wird folgende
Exception beim durchtracen aufgerufen: Externel
Exception C000001E.
beim komplett durchlaufen gibt's ne andere Fehlermeldung: Format '%p' ungültig oder nicht kompatiebel mit argument.
Das witzige ist, das die Mail gespeichert ist! jedoch fehlerhaft! wenn ich die mail wider lade,
ist dort zb. garkeine Massagepart einteilung mehr vorhannden. d.h. ich bekomme alle Parts im ersten Part siehe unten:
--_NextPart_2altrfkindysadvnqw3nerasdf
Content-Type: text/plain; charset"iso-8859-1"
Content-Transfer-Encoding: quoted-printable
...
--_NextPart_2altrfkindysadvnqw3nerasdf
Content-Type: text/
html; charset"iso-8859-1"
Content-Transfer-Encoding: quoted-printable
...
ich habe mal die SaveToFile Methode getraced, dabei ist mir aufgefallen, das die Mail in einem
filestream geschrieben wird. Beim Free des Filestreams gibts dann ne
Exception.
Ich denke aber das es vorher auch schon ne
exception gab, die abgefangen wurde. kein plan?
gibt es ne möglichkein abgefangene Exceptions anzuzeigen?
Hier mal mein Soure vieleicht fällt jemanden was auf:
Delphi-Quellcode:
procedure TfrmEmailempfang.BtnOKClick(Sender: TObject);
var
i : Integer;
Filename :
String;
EMail: TEmail;
function lfd(path :
String) : Integer;
begin
Result := 0;
while FileExists(path + '
\' +FormatFloat('
00000000', Result) + '
.eml')
do inc(Result);
end;
begin
Filename := MailPath + User;
ForceDirectories(Filename);
for i := 1
to StrGridEMails.RowCount-1
do
if (Integer(StrGridEMails.Objects[0, i]) = 3)
or
(Integer(StrGridEMails.Objects[0, i]) = 2)
then Inc(MailSum);
for i := 1
to StrGridEMails.RowCount-1
do
begin
if (Integer(StrGridEMails.Objects[0, i]) = 3)
or
(Integer(StrGridEMails.Objects[0, i]) = 2)
then begin
IdMessage.Clear;
POP3.Retrieve(StrGridEMails.RowCount-i-1, IdMessage);
Filename := MailPath + User + '
\' + FormatFloat('
00000000', lfd(FileName)) + '
.eml';
IdMessage.SaveToFile(Filename);
end;
if (Integer(StrGridEMails.Objects[0, i]) = 4)
or
(Integer(StrGridEMails.Objects[0, i]) = 2)
then
POP3.Delete(StrGridEMails.RowCount - i);
end;
Close;
end;
Ich benutze übrigens die neuste
Indy version 9.0.14
Vielen dank für Hilfen! Greatzzz...