2010-11-24 2 views
5

В настоящее время я использую поток imap для получения писем из папки «Входящие».Извлечь текст тега из электронной почты PHP

Все работает нормально, за исключением того, что я не уверен, как получить текст тела и название электронного письма. Если я делаю imap_body ($ connection, $ message), в текст включается базовый 64 эквивалент вложения электронной почты.

В настоящее время я использую эту функцию для получения вложений.

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

Благодаря

ответ

19

функция Well PHP IMAP являются не весело работать. Пользователь на этой странице объясняет несоответствия в получении электронных писем: http://php.net/manual/en/function.imap-fetchbody.php#89002

Используя свою полезную информацию, я создал надежный способ получить текст тела электронной почты.

$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

Спасибо большое. После поискового запроса в течение 4 часов я нашел рабочий пример. –

+1

Что это за '1.2'? – pguardiario

+0

@pguardiario Я понятия не имею, хотя если вы нажмете ссылку выше, это может помочь некоторым. Я считаю, что добрался до решения с проб и ошибок. – William

0

Вы также можете попробовать эти

content-type:text/html 

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

content-type:plaintext/text 

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

Мое решение (работает со всеми типами и кодировкой):

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); 
Смежные вопросы