2010-11-24 5 views
5

J'utilise actuellement un flux imap pour recevoir des emails d'une boîte de réception.Extrait du texte du corps de l'email PHP

Tout fonctionne bien, sauf que je ne sais pas comment obtenir le corps du texte et le titre de l'e-mail. Si je fais imap_body ($ connection, $ message) l'équivalent en base 64 de la pièce jointe est inclus dans le texte. Je suis actuellement en utilisant cette fonction pour obtenir les pièces jointes.

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

Merci

Répondre

19

fonction de php Eh bien imap ne sont pas amusant de travailler avec. Un utilisateur sur cette page explique les incohérences avec l'obtention de courriels: http://php.net/manual/en/function.imap-fetchbody.php#89002

En utilisant ses informations utiles, j'ai créé un moyen fiable d'obtenir le texte du corps d'un e-mail.

$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

Merci beaucoup. Après avoir googlé pendant 4 heures, j'ai trouvé l'exemple de travail. –

+1

Qu'est-ce que «1.2»? – pguardiario

+0

@pguardiario Je ne sais pas, mais si vous cliquez sur le lien ci-dessus, cela pourrait aider. Je crois que je suis arrivé à la solution avec des essais et des erreurs. – William

0

Vous pouvez également

content-type:text/html 

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

content-type:plaintext/text 

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

Ma solution (fonctionne avec tous les types et 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);