Email aus Thunderbird zerlegen

david07

Mitglied
Hi,

ich versuche derzeit die Emaildatei aus Thunderbird mittels PHP so zu zerlegen,
dass mein Script mir nacheinander alle Emails auflistet.

Dabei möchte ich gerne lediglich die wesentlichen Informationen aus dem Header und natürllich den Body anzeigen, sowie Siganturen und Atachments zunächst verbergen.

Prinzipiell dachte ich daran die Mail nach dem Modell

1-> [Header]
2-> [Body]
3-> [Sugantur/Attachement]

anhand der lerzeilen (\n und \r) zu zerlegen alle wichtigen Infos in ein Array zu speichern und dann wieder auszulesen.


Hatte bisher zwei ansätze:

1.) Die Datei zeile für zeile auslesen und mit nem toggle abfragen ob die Zeile gelesen werden soll oder nicht

2.) Die Datei komplett einlesen jeder Zeile in ein Array speichern und dann zusammenbauen.

Allerdings zerhackt es mir immer alles beim Auftrennen in die Bereiche Header, Body, Signatur/Attachment.

Teilweise klappt das mit den Leerzeichen, teilweise nicht.

Hat da zufällig jemand erfahrung mit oder eine Idee wo ich weitere Infos darüber bekomme?

Wiegesagt die Mails hängen alle aneinander in der Datei die von Mozilla Thunderbird angelegt wird.


Danke schonmal!

David
 
Bei einfachen Textemails ist es ja relativ einfach....im Header kommen keine Leerzeilen vor, und nach der ersten beginnt einfach der Mail Body.

In Multipart Mails suchst du als erstes den Header eintrag in dem der Content-Type: steht. Dahinter findest du die Informationen: multipart/alternative; boundary="8490f0908d95fdd0abea362824dc7a9a"

Die Boundary kann anführungszeichen haben... muss aber nicht. Es kann entweder multipart/alternative oder Multipart/Mixed sein. Das eine ist Typisch für Entweder als HTML oder als text anzeigen (wie newsletter) das andere für anlagen.

Hier mal ein wenig Code dazu:

PHP:
<?
$var = file_get_contents('Inbox');

$mails = explode("X-UIDL:", $var);
unset($mails[0]);
foreach ($mails as $var){
    $var = str_replace("\r\n","\n",$var);
    // Header Abtrennen
    $header = explode("\n\n",$var, 2);
    $body   = $header[1];
    $header = $header[0];
    
    // Boundary finden
    preg_match('%boundary=(.*)%', $header, $boundary);
    $boundary = $boundary[1];
    
    // Wenn Leerzeichen vorhanden diese entfernen
    if($boundary{0} == '"') $boundary = substr($boundary,1,-1);
    
    // Mail anhand der Boundary Zerteilen
    $mailparts = explode("--$boundary", $body);
    
    // Jetzt die einzelnen Teile verwenden
    // Die Sub-Header werden wieder durch \n\n abgetrennt.
    // Was darin enthalten ist steht im Content Type.
    echo $mailparts[1];
}
?>

Edit huch hab eben erst gesehend das du die Thunderbird Speicherdateien durchsuchen willst....
Ich denke am Einfachsten ist es hier die Zerteilung durch X-UIDL:
*quellcode updated*
 
Zuletzt bearbeitet:
Hi,

danke dir! Das hat mir schonmal sehr geholfen. Nabe zwar noch das Problem das ich bei manchen Providern die Bounderys nicht korrekt heruasgeschnitten bekomme (Signaturen) aber dein Ansatz hat mir schonmal sehr geholfen!!

Sorry für die späte Antwort war im die letzten Wochen im Urlaub und hab es vorher nicht mehr geschafft zu antworten!
 
Zurück