2010-11-24 3 views
5

Ich verwende derzeit einen IMAP-Stream, um E-Mails aus einem Posteingang zu erhalten.Körpertext aus E-Mail extrahieren PHP

Alles funktioniert gut außer ich bin mir nicht sicher, wie man den Text und den Titel der E-Mail erhalten. Wenn ich imap_body ($ connection, $ message) mache, ist der Basis-64-Äquivalent des E-Mail-Anhangs im Text enthalten.

Ich verwende derzeit diese Funktion, um die Anhänge zu erhalten.

http://www.electrictoolbox.com/function-extract-email-attachments-php-imap/

Dank

Antwort

19

Well-Funktion des PHP-imap ist nicht Spaß mit zu arbeiten. Ein Benutzer auf dieser Seite erklärt die Inkonsistenzen beim Erhalten von E-Mails: http://php.net/manual/en/function.imap-fetchbody.php#89002

Mithilfe seiner hilfreichen Informationen habe ich eine zuverlässige Möglichkeit geschaffen, den Nachrichtentext einer E-Mail zu erhalten.

$bodyText = imap_fetchbody($connection,$emailnumber,1.2); 
if(!strlen($bodyText)>0){ 
    $bodyText = imap_fetchbody($connection,$emailnumber,1); 
} 
$subject = imap_headerinfo($connection,$i); 
$subject = $subject->subject; 

echo $subject."\n".$bodyText; 
+0

Vielen Dank. Nach 4 Stunden Googeln fand ich das Arbeitsbeispiel. –

+1

Worum geht es bei "1.2"? – pguardiario

+0

@pguardiario Ich habe keine Ahnung, obwohl, wenn Sie auf den obigen Link klicken, es einigen helfen könnte. Ich glaube, ich habe die Lösung mit Versuch und Irrtum gefunden. – William

0

können Sie diese auch versuchen

content-type:text/html 

$message = imap_fetchbody($inbox,$email_number, 2); 

content-type:plaintext/text 

$message = imap_fetchbody($inbox,$email_number, 1); 
1

Meine Lösung (arbeitet mit allen Arten und charset):

function format_html($str) { 
    // Convertit tous les caractères éligibles en entités HTML en convertissant les codes ASCII 10 en $lf 
    $str = htmlentities($str, ENT_COMPAT, "UTF-8"); 
    $str = str_replace(chr(10), "<br>", $str); 
    return $str; 
} 


// Start 

$obj_structure = imap_fetchstructure($imapLink, $obj_mail->msgno); 

// Recherche de la section contenant le corps du message et extraction du contenu 
$obj_section = $obj_structure; 
$section = "1"; 
for ($i = 0 ; $i < 10 ; $i++) { 
    if ($obj_section->type == 0) { 
     break; 
    } else { 
     $obj_section = $obj_section->parts[0]; 
     $section.= ($i > 0 ? ".1" : ""); 
    } 
} 
$text = imap_fetchbody($imapLink, $obj_mail->msgno, $section); 
// Décodage éventuel 
if ($obj_section->encoding == 3) { 
    $text = imap_base64($text); 
} else if ($obj_section->encoding == 4) { 
    $text = imap_qprint($text); 
} 
// Encodage éventuel 
foreach ($obj_section->parameters as $obj_param) { 
    if (($obj_param->attribute == "charset") && (mb_strtoupper($obj_param->value) != "UTF-8")) { 
     $text = utf8_encode($text); 
     break; 
    } 
} 

// End 
print format_html($text);