Hallo,
bevor ich endgültig aufgebe meine Mails mit Indy9 oder 10 zu verarbeiten, wollte ich euch nochmal fragen, ob ihr in dem Code einen Fehler seht, oder ob noch etwas fehlt.
Die Routine verarbeitet Textmails, sowie Mails mit Attachments einwandfrei, nur bei folgender Mail komme ich nicht an den Body ran.
Zitat:
MIME-Version: 1.0
From: <noreply@example.com>
To:
pq@example.com
Date: 20 Mar 2008 15:25:55 -0700
Subject: [GEO] Notify
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: base64
Message-Id: <20080320222555.5DCD69F946@signal.example.com>
VGhpcyBpcyBhbiBhdXRvbWF0ZWQgbWVzc2FnZSBmcm9tIEdlb2 NhY2hpbmcNCg0KRm9yIEdD
WkNZQTogWndpc2NoZW4gZGVuIFRyZXBwZW4gKEFyY2hpdmVkKS AoVHJhZGl0aW9uYWwgQ2Fj
...snip...
Hier der Delphi-Code, das vollständige Project lade ich im Anhang mit hoch.
Delphi-Quellcode:
function TdmPOP3.GetMail(ndx:Integer) : boolean;
var j : integer;
FileName : String;
begin
Result := false;
if POP3Mail.Connected then
try
IdMsg.Clear;
IdMsg.NoDecode := False;
// IdMsg.NoDecode := True;
POP3Mail.Retrieve(ndx, IdMsg);
form1.AddToLog('<subject>'
+IdMsg.From.Address+' '
+IdMsg.Subject+' '
+DateToStr(IdMsg.Date)+'</subject>');
for j := 0 to Pred(IdMsg.MessageParts.Count) do
begin
if IdMsg.MessageParts.Items[j] is TIdText then
begin
Form1.AddToLog('<TIdText>'#13
+ TIdText(IdMsg.MessageParts.Items[j]).Body.Text+#13
+ '</TidText>');
Form1.Memo1.Lines.AddStrings(TIdText(IdMsg.MessageParts.Items[j]).Body);
end;
// else
if IdMsg.MessageParts.Items[j] is TIdAttachment then
begin
FileName := TIdAttachment(IdMsg.MessageParts.Items[j]).FileName;
FileName := CheckFileName(FileName); // Delete Dublicates!
Form1.AddToLog('Save Attachment to ' + FileName);
TIdAttachment(IdMsg.MessageParts.Items[j]).SaveToFile(FileName);
end; // if ... is TIdAttachment
end; // for j ...
// Wenn erwünscht Mail nach download vom Server löschen
if Form1.cbDelOnRead.Checked then Pop3Mail.Delete(ndx);
except
Form1.AddToLog('Fehler bei Pop3Mail.Retrieve');
beep();
Result := false;
exit;
end;
end;
Von der o.g. Mail wird hier z.B. nur das Subject geloggt, bzw auf Form1.Memo1.Lines wird nur eine Leerzeile ausgegeben. Also ich bin jetzt nach 2 langen Tagen Recherche mit meinem Latein am Ende, und fange nun an die Mails per TClientSocket runterzuladen, und weiter zu verarbeiten. Es würde mich aber interessieren, ob ihr noch einen Fehler oder fehlendes Statement entdeckt.
Eine komplette Beispielmail zum Testen, schicke ich gerne bei Bedarf zu.
Ein frohes Osterfest
wünscht
Andreas