2010-02-06 81 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