Einzelnen Beitrag anzeigen

Drop Table

Registriert seit: 16. Aug 2006
Ort: Wedel
26 Beiträge
 
Turbo Delphi für Win32
 
#1

TidPop3 und fehlender Body Content-Transfer-Encoding: Base64

  Alt 21. Mär 2008, 10:14
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
Angehängte Dateien
Dateityp: zip d-praxis_idpop3_147.zip (3,7 KB, 12x aufgerufen)
Gruß
Andreas
  Mit Zitat antworten Zitat