2010-02-06 46 views
4

我用下面的代碼來發送帶有附件的電子郵件:PHP郵件帶附件 - 額外的文件:部分1.4

$mime_boundary = "<<<--==+X[".md5(time())."]"; 

    $headers .= "MIME-Version: 1.0\r\n"; 
    $headers .= "Content-Type: multipart/mixed;\r\n"; 
    $headers .= " boundary=\"".$mime_boundary."\""; 

    $message .= "This is a multi-part message in MIME format.\r\n\r\n"; 
    $message .= "--".$mime_boundary."\r\n"; 

    $message .= "Content-Type: text/plain; charset=\"iso-8859-1\"\r\n"; 
    $message .= "Content-Transfer-Encoding: 7bit\r\n"; 
    $message .= "\r\n"; 
    $message .= "$message_body\r\n"; 
    $message .= "--".$mime_boundary."\r\n"; 

    foreach($attachments as $filename => $data) 
    { 
     $message .= "Content-Type: application/octet-stream;\r\n"; 
     $message .= " name=\"$filename\"\r\n"; 
     $message .= "Content-Transfer-Encoding: quoted-printable\r\n"; 
     $message .= "Content-Disposition: attachment;\r\n"; 
     $message .= " filename=\"$filename\"\r\n"; 
     $message .= "\r\n"; 
     $message .= chunk_split(base64_encode($data)); 
     $message .= "\r\n"; 
     $message .= "--".$mime_boundary."\r\n"; 
    } 

    mail($email_address, $email_subject, $message, $headers); 

只是一個額外的文件也連接工作正常,(稱爲「部分1.4" )。

有沒有辦法不加這個?

乾杯, 丹。

+0

這是否發生在所有郵件客戶端上?如果你還添加郵件正文,它會發生嗎? – 2010-02-06 14:56:36

回答

5

IIRC最後一部分隔板必須--something unique--,即你的情況

$message .= "--".$mime_boundary."--\r\n"; 

但MIME郵件是一個應用程序開發人員或多或少解決的問題(即當完成時正確reeeeally討厭做了很無聊錯了;-))。幫你一個忙,並使用類似Swiftmailer或任何其他下降郵件庫/類。

+0

太棒了!現在完美運作。 Thankyou :-) – Dan 2010-02-07 09:19:15

+0

也只是給了Swiftmailer一個去。非常好,使用簡單。再次感謝。 – Dan 2010-02-07 09:46:25

+0

輝煌:)儘管mime郵件並不完全是火箭科學,但它有許多棘手的方面可能甚至乏味。我總是建議使用郵件庫(除非你發現電子郵件如此有趣,以至於編寫最好的庫成爲你的新項目/愛好 - 有人必須編寫那些整潔的包裝)。測試電子郵件是否真正到達併爲大多數所有用戶正確顯示對於應用程序開發人員來說是一個足夠大的任務 - 無需使用字符串連接也可以擺弄內部消息=] – VolkerK 2010-02-07 10:08:37