2012-09-29 70 views
2

我正在編寫腳本來閱讀電子郵件並根據TO地址將其分發到不同的電子郵件地址。所有的電子郵件都來自一個地址,但我似乎無法弄清楚如何轉發電子郵件,或創建一個新的電子郵件,幷包括所有相關的消息主體。如何轉發PHP和IMAP下載的電子郵件?

現在我正在使用IMAP下載電子郵件並使用imap_fetchbody獲取電子郵件內容;

$email_body = imap_fetchbody($imapconnex, $msgnumber, 1); 

一些電子郵件正文顯示不正確,以及其他含有短行,並在最後一個=符號,導致內容無法正確顯示。另外,我隨機看到隨機打印在我的電子郵件正文中的隨機A0

我的計劃是使用PHP的mail()函數將電子郵件發送到我想要的地方,並將發件人地址更改爲真實發件人地址。這將符合我的需求,但我似乎無法弄清楚如何檢索正確的身體,格式化併發送它。

這裏是我的代碼,我使用發送電子郵件:

$header = imap_fetch_overview($imapconnex, $search[$i]); 
$email_subject = $header[0]->subject; 
$email_head = imap_fetchbody($imapconnex, $search[$i], 0); 
$email_body = imap_fetchbody($imapconnex, $search[$i], 1); 
mail("[email protected]", $email_subject, $email_body, $email_head); 

的頭似乎被轉發罰款,但該消息的主體仍然=A0符號顯示。

+1

這聽起來像你複製的原始郵件的身體進入一個新的郵件,但你缺少的頭,'內容傳輸Encoding'這將導致'='和' A0'你看到的症狀。如果您重新發送郵件,則應該複製大部分(如果不是全部)原始郵件的標題。如果您正在轉發,則應將原始郵件原封不動地包含在新郵件中作爲MIME正文部分。 – Celada

+0

感謝您的幫助。這對於內容傳輸編碼很有意思。 –

+0

我已經修復了我的代碼的頭文件(謝謝Celada),但我仍然遇到顯示'='和'A0'的問題。我注意到,使用我的代碼,我沒有在原始頭文件中獲得「Content-Transfer-Encoding」。 –

回答

0

今天主要是消息多部分。我使用這個和它的作品。

$mailstructure = imap_fetchstructure($inbox, $uid, FT_UID); // 
$type = $mailstructure->type; 
if ($type == 1 && $mailstructure->ifparameters == 1) { 
    $subtype = strtolower($mailstructure->subtype); 
    echo "SubType is" . $subtype . "<br />"; 
    $parameters = $mailstructure->parameters; 
    $attribute = $parameters[0]->attribute; 
    $value = $parameters[0]->value; 
    echo $attribute . "//" . $value . "<br />"; 
    # prepare the mail 
$to=""; 
$subject=""; 
    $body="\r\nThis is a multipart message in MIME format.\r\n"; 
    $body.=imap_body($inbox, $uid, FT_UID); 
    $headers ="From:" . $from . "\r\n"; 
    $headers .="Date: " . date("r") . "\r\n"; 
    $headers .="MIME-Version: 1.0\r\n"; 
    $headers .="Content-Type: multipart/" . $subtype . "; 
     \t boundary=\"" . $value . "\""."\r\n"; 
    $sendmail = imap_mail($to, $subject, $body, $headers); 

}