Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi TidPop3 und fehlender Body Content-Transfer-Encoding: Base64 (https://www.delphipraxis.net/110636-tidpop3-und-fehlender-body-content-transfer-encoding-base64.html)

Drop Table 21. Mär 2008 09:14


TidPop3 und fehlender Body Content-Transfer-Encoding: Base64
 
Liste der Anhänge anzeigen (Anzahl: 1)
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

marabu 21. Mär 2008 09:53

Re: TidPop3 und fehlender Body Content-Transfer-Encoding: Ba
 
Hallo Andreas,

deine Schleife über die MessageParts wird sicher nie ausgeführt.

Indy-Help: TIdMessage -> NoDecode
... When NoDecode is True, the message will be retrieved and added to MessageParts as MIME-encoded attachments. ... When NoDecode is False, the message will be retreived and the message body is stored in Body in its MIME-encoded form. ...

Dir auch Frohe Ostern.

Drop Table 21. Mär 2008 10:31

Re: TidPop3 und fehlender Body Content-Transfer-Encoding: Ba
 
Hallo marabu!

Zitat:

Zitat von marabu
Hallo Andreas,
deine Schleife über die MessageParts wird sicher nie ausgeführt.

KREISCH! So war es dann auch, und in meiner Form1 war auch noch ein kleiner Fehler, der zuverlässig dafür sorgte, dass alle Testergebnise, die in Memo1 sichtbar werden sollten wieder überschrieben wurden. Die Mimik mit Messageparts und Body hatte ich zudem nicht wirklich verstanden :roll:

Herzlichsten Dank für Deine Hilfe!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz