PEAR-Forum.de Übersicht Thema anzeigen - [HowTo] Lesebaren Text einer Multipart-Mail auslesen.

[HowTo] Lesebaren Text einer Multipart-Mail auslesen.


 

PEAR-Forum.de Übersicht » HowTo´s, Tutorials, Codebeispiele und Wissenswertes
Neues Thema eröffnen Neue Antwort erstellen Diesen Beitrag ausdrucken
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
florianp
Neuer User


Anmeldungsdatum: 15.08.2005
Beiträge: 2

Beitrag15.08.2005 17:01    [HowTo] Lesebaren Text einer Multipart-Mail auslesen. Antworten mit Zitat

Vielleicht hat noch jemand das gleiche Vorhaben wie ich: aus einer eMail den puren Nachrichten-Text extrahieren, wobei Attachments und alternative HTML-Parts ignoriert werden.

Folgende Funktion parst alles Teile der Mail rekursiv und liefert bei "multipart/alternative" nur jeweils die erste Alternative zurück. Der Inhalt von "mulipart/digest"-Mails wird direkt untereinander aufgelistet.

Freue mich über Kommentare, Kritik und Verbesserungsvorschläge...

PHP:
<?php
function get_body_plain($obj,$params='') {
static 
$return;

    if (
is_object($obj)) {
        
        if (
strtolower($obj->ctype_primary)=='multipart' && strtolower($obj->ctype_secondary)=='digest') {
            
// if object is a mail digest, parse each part of the digest recursivly
            
while(list($key,$value) = each($obj->parts)) {
                
$decoder = new Mail_mimeDecode($value->body);
                
get_body_plain($decoder->decode($params),$params);
            }
        }
        
// if object has 'readable' body text, attach to output
        
if (strtolower($obj->ctype_primary=='text')) {
            
$return .= strip_tags(preg_replace('=<br */?>=i'"\n"$obj->body));
        }
        else {
            
// if object has no 'readable' body text, parse object recursivly
            
get_body_plain(get_object_vars($obj),$params);
        }
    }
    else {
        if (
is_array($obj)) {
            
// if this is part of 'multipart/alternative', only parse the first one
            
if (strtolower($obj['ctype_secondary'])=="alternative") {
                
get_body_plain($obj['parts'][0],$params);
            }
            else {
                
// otherwise parse array values recursivly
                
while(list($key,$value) = each($obj)) {
                    
get_body_plain($value,$params);
                }
            }
        }
    }
    return 
$return;
}


PHP:
<?php
$params
['include_bodies'] = true;
$params['decode_bodies']  = true;
$params['decode_headers'] = true;

// assuming $email contains MIME-Mail
$decoder = new Mail_mimeDecode($email);
$structure $decoder->decode($params);

echo 
get_body_plain($structure,$params);


PS: Manchmal findet man im Netz Code-Schnippsel, die angeblich alle Parts einer MIME-Mail extrahieren. Oft wird dort jedoch nur die "erste Ebene" berücksichtigt, was natürlich nicht funktioniert, da Mulitpart-Messages im Prinzip ja beliebig tief geschachtelt sein können...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ragtek
Neuer User


Anmeldungsdatum: 30.12.2006
Beiträge: 8

Beitrag30.12.2006 21:09     Antworten mit Zitat

und wie kommst du an die mail rann?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Diese Seite übersetzen
PEAR-Forum.de Übersicht » HowTo´s, Tutorials, Codebeispiele und Wissenswertes
Neues Thema eröffnen Neue Antwort erstellen Diesen Beitrag ausdrucken
   Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

Zu Deinen Favoriten hinzufügen

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen