2013-05-29 48 views
0

我正在寫一個PHP應用程序,它從一個郵件帳戶讀取電子郵件並將某些郵件轉發到另一個郵件帳戶。我使用imap_mail_compose()來創建將被轉發的消息。當我處理純文本消息或HTML消息時,它工作得很好。問題出在我有一條消息同時包含文本和HTML組件時。該消息在我的電腦上的郵件閱讀器中顯示得很好,在通過Web應用程序閱讀時也很好。 Android電子郵件程序改爲顯示帶有兩個名爲'noname'的附件的空白郵件。原始郵件在android電子郵件程序中讀取得很好,所以我不確定原始郵件和我創建的郵件之間有什麼不同。我查看了兩個消息中的結構,如imap_fetchstructure()所檢索到的,它們是相同的,所以看起來我正在創建消息,但顯然我做錯了什麼。我還用一個不同的android電子郵件程序K-9 Mail來檢查它,它在那裏工作得很好。imap_mail_compose在android電子郵件中創建noname附件

下面是我用來設置imap_mail_compose()使用的正文部分的一些代碼。 變量$ emailMessage來自一個抽出電子郵件所有部分的類。我發現它在http://www.electrictoolbox.com/php-email-extract-inline-image-attachments/並添加了一些額外的項目。

$bptr = 1; 

// if both text and HTML parts exist 
if ((strlen($emailMessage->bodyHTML) > 0) && (strlen($emailMessage->bodyPlain) > 0)) 
{ 
$hdr["type"] = TYPEMULTIPART; 
$hdr["subtype"] = "alternative"; 
$body[$bptr++] = $hdr; 
} 

// check for plain text message 
if (strlen($emailMessage->bodyPlain) > 0) { 
    $tpart["type"] = TYPETEXT; 
    $tpart["subtype"] = "plain"; 
    $tpart["encoding"] = $emailMessage->plain_encoding; 
$tpart["disposition.type"] = "INLINE"; 
if (strlen($emailMessage->plain_charset) > 0) 
     $tpart["charset"] = $emailMessage->plain_charset; 
    $tpart["contents.data"] = $emailMessage->encodePlain; 
    $body[$bptr++] = $tpart; 
} 

// check for HTML message 
if (strlen($emailMessage->bodyHTML) > 0) { 
    $hpart["type"] = TYPETEXT; 
    $hpart["subtype"] = "html"; 
    $hpart["encoding"] = $emailMessage->html_encoding; 
    $hpart["disposition.type"] = "INLINE"; 
    if (strlen($emailMessage->html_charset) > 0) 
     $hpart["charset"] = $emailMessage->html_charset; 
    $hpart["contents.data"] = $emailMessage->encodeHTML; 
$body[$bptr++] = $hpart; 
} 

那麼,有人有任何想法嗎?感謝您的幫助,因爲這是一個真正的潛力。

回答

1

我找到了一個可以在這裏使用的解決方案。這是在PHP的網站: http://php.net/manual/en/function.imap-append.php

正如我們一直在這個掙扎了一段時間,我想分享 我們是如何走到imap_append所有的MIME部件,包括 附件正常工作。如果您發送電子郵件,並希望將 發送的消息追加到發送郵件文件夾,我想不出一個更簡單的方法 要做到這一點,如下所示:

1)使用SwiftMailer通過PHP發送消息。 $ message = Swift_Message :: newInstance(「Subject goes here」); (然後加到, 正文,附件等)$ result = $ mailer-> send($ message);

2)當構造在步驟1中的消息)以上將其保存到一個 變量如下:

$味精= $ MESSAGE->的toString(); (這爲imap_append(所需的全部MIME消息 )!在這之後,你可以調用imap_append像 這樣:

imap_append($ imap_conn,$ mail_box,$味精 「\ r \ n」,「\看「);

所以去http://swiftmailer.org/和使用他們的庫,而不是重新發明輪子