Einzelnen Beitrag anzeigen

PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

Plaintext aus .EML-Datei extrahieren?

  Alt 7. Apr 2016, 18:06
Hallo und schönen Tag!

Ich möchte in Delphi 10 Seattle den Plaintext des body und die anderen Mailfelder aus einer .EML-Datei (von Thunderbird gespeichert, kann eine HTML-Mail oder eine Plaintext-Mail enthalten) auslesen. Das funktioniert mit dem folgenden Code nur zum Teil:

Delphi-Quellcode:
//uses IdText...

procedure TForm1.ExtractPlainTextFromEMLFileContainingHTMLMail;
// Drop a TIdMessage component on the form and name it "IdMessage"
var
  IndyStringList: TStringList;
  IndyStream: TMemoryStream;
  I: Integer;
const
  CRLF = #13#10;
begin
  IndyStringList := TStringList.Create;
  IndyStream := TMemoryStream.Create;
  try
    IndyStringList.LoadFromFile('C:\Ihre Bestellung.eml');
    IndyStringList.Add(CRLF + '.' + CRLF);
    IndyStringList.SaveToStream(IndyStream);
    IndyStream.Position := 0;
    IdMessage.Clear;
    IdMessage.LoadFromStream(IndyStream);
    Memo1.Clear;
    Memo1.Lines.Assign(IdMessage.Headers);
    Memo2.Clear;
    Memo2.Lines.Add(IdMessage.From.Text);
    Memo2.Lines.Add(IdMessage.Recipients.EMailAddresses);
    Memo2.Lines.Add(IdMessage.Subject);
    Memo2.Lines.Add(DateTimeToStr(IdMessage.Date));
    Memo2.Lines.Add('');
    for I := 0 to IdMessage.MessageParts.Count - 1 do
      if IdMessage.MessageParts.Items[I] is IdText.TidText then
      begin
        Memo2.Lines.Add(IdText.TidText(IdMessage.MessageParts.Items[I]).Body.Text);
        // This is called TWICE. The first time it gets this text:
        // 'This is a multi-part message in MIME format.'
        // The second time it gets the HTML code of the message body
        // So how can I get the plain-text of the message body?
      end;
  finally
    IndyStringList.Free;
    IndyStream.Free;
  end;
end;
In der for-Schleife erhalte ich zwei Ergebnisse:

1. Wie kann das Programm zur Laufzeit wissen, welches der beiden der Plaintext-body ist?

2. Wenn das Ergebnis ein HTML-Code ist: Wie kann aus diesem der Plaintext decodiert werden?
  Mit Zitat antworten Zitat