2010-11-24 55 views
5

Tôi hiện đang sử dụng luồng imap để nhận email từ hộp thư đến.Trích xuất văn bản nội dung từ Email PHP

Mọi thứ đều hoạt động tốt ngoại trừ tôi không chắc chắn cách lấy văn bản nội dung và tiêu đề của email. Nếu tôi thực hiện imap_body ($ connection, $ message) thì số 64 cơ sở tương đương của tập tin đính kèm email được bao gồm trong văn bản.

Tôi hiện đang sử dụng chức năng này để nhận các tệp đính kèm.

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

Cảm ơn

Trả lời

19

chức năng Vâng php imap của không thú vị để làm việc với. Người dùng trên trang này giải thích sự không thống nhất với việc nhận email: http://php.net/manual/en/function.imap-fetchbody.php#89002

Sử dụng thông tin hữu ích của tôi Tôi đã tạo một cách đáng tin cậy để nhận văn bản nội dung của email.

$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

Thanks a lot. Sau khi googling trong 4 giờ tôi tìm thấy ví dụ làm việc. –

+1

Đó là gì '1.2' tất cả về? – pguardiario

+0

@pguardiario Tôi không có ý tưởng mặc dù nếu bạn nhấp vào liên kết ở trên, nó có thể giúp một số. Tôi tin rằng tôi đã nhận được giải pháp với thử và sai. – William

0

Bạn cũng có thể thử các

content-type:text/html 

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

content-type:plaintext/text 

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

Giải pháp của tôi (chỉ hoạt động với tất cả các loại và 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); 
Các vấn đề liên quan