Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Indy TIdMessage multipart, wie den Msg-Body erkennen (https://www.delphipraxis.net/181313-indy-tidmessage-multipart-wie-den-msg-body-erkennen.html)

hoika 5. Aug 2014 15:40

Indy TIdMessage multipart, wie den Msg-Body erkennen
 
Hallo #,

Ich lade eine Mail vom Mailserver herunter.

Delphi-Quellcode:
IdPOP3.Retrieve(iMail, IdMessage); //iMail ein Zähler
Es ist nur ein einfacher Text, keine Anhänge.

Trotzdem ist es eine multipart-Message (IdMessage.IsMsgSinglePartMime=False),
aber OK, das entscheidet der Sender, dass kann ich nicht beeinflussen.

Wie bekomme ich aber jetzt den Body raus.
Das Retreive legt zwei Dateien (den Msg-Header und den Body) ins Temp.
Im Moment gehe ich durch die beiden Anhänge (ist ja Multipart)
und suche gezielt nach etwas, was nur im Header stehen kann,
also Original-Message-ID (sind reply-Messages).
Die andere Datei ist ja dann der Body.

Das finde ich aber gar nicht schön.
es muss doch eine einfachere Möglichkeit geben.

Hier steht
http://stackoverflow.com/questions/1...e-email-to-vcl
Der Text ist TIdText, ist es aber nicht ...
Zumindestens bei meiner Mail.

Delphi-Quellcode:
     
      for iMessagePart := 0 to theIdMessage.MessageParts.Count-1 do
      begin
        if theIdMessage.MessageParts.Items[iMessagePart] is TIdAttachmentFile then
        begin
          IdAttachmentFile := TIdAttachmentFile(theIdMessage.MessageParts.Items[iMessagePart]);

          { Dateianhänge müssen gesondert betrachtet werden }
          if IdAttachmentFile.FileName<>'' then
          begin
            s
          end
Für Indy sind bei einer multipart-Message auch Header und Body MessageParts,
die entsprechenden anderen Felder (IdMessage.Headers.Text, IdMessage.Body.Text) sind leer.


Kennt jemand eine Lösung für mich ?


Danke

Heiko

hoika 6. Aug 2014 07:07

AW: Indy TIdMessage multipart, wie den Msg-Body erkennen
 
Hallo,

könnte ich das über den ContentType ermitteln ?

http://stackoverflow.com/questions/1...-10-and-delphi

Gerade die Antwort sieht doch eigentlich OK aus ?

Delphi-Quellcode:
if IsHeaderMediaType(Part.ContentType, 'text/html') then
begin
  DisplayHTML(TIdText(Part).Body);
  Exit;
end;
if IsHeaderMediaType(Part.ContentType, 'text/plain') then
begin
  DisplayPlain(TIdText(Part).Body);
  Exit;
end;
Heiko

hoika 7. Aug 2014 14:12

AW: Indy TIdMessage multipart, wie den Msg-Body erkennen
 
*push*

gmc616 8. Aug 2014 12:38

AW: Indy TIdMessage multipart, wie den Msg-Body erkennen
 
Habe in meinem POP3-Client das noch drin stehen:
Delphi-Quellcode:
if Pos( 'quoted-printable', MyMsg.ContentTransferEncoding ) > 0 then
begin
  with TIdDecoderQuotedPrintable.Create(nil) do
    try
      RetBodyText := DecodeString(RetBodyText);
    finally
      Free;
    end;
end;
Wozu weiß ich momentan zwar auch nicht mehr (Kommentare wären schön gewessen :stupid:), aber um sonst habe ich bestimmt nicht rein geschrieben.

Evtl. hilfts dir weiter

hoika 12. Aug 2014 13:29

AW: Indy TIdMessage multipart, wie den Msg-Body erkennen
 
Hallo,

danke ;)

Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:54 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