2011-03-14 55 views
0

我试图通过PHP邮件()带有附件发送电子邮件。为什么电子邮件显示MIME边界体

的附件来通过确定和正文的内容是有,但我也看到了MIME边界和内容类型,而不是电子邮件是HTML

--==Multipart_Boundary_x9e92752e972e274a182cc4cafd83c674xContent-Type: text/html; charset="iso-8859-1"Content-Transfer-Encoding: 7bit 

<p> 
    Body content</p> 
<p> <snip> 

的代码看起来是这样的:

$mime_boundary="==Multipart_Boundary_x".md5(mt_rand())."x"; 

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

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

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

then the attachment routine 

我试过在没有成功的代码中的许多变化。毫无疑问,这将是一些微不足道的东西,我无法看到。

在此先感谢

回答

3

你忘了正确的行结束符两次。

$message = "--{$mime_boundary}Content-Type" 

有第一个\r\n失踪。

$message .= "--{$mime_boundary}\n" . 

在这里,你只写了\n而不是\r\n

也不要忘记,你需要在一个很终止MIME边界与结束的双减为终止结束:

$message .= "--{$mime_boundary}--\n" . 
+0

AHA!我其实并没有意识到他们是必要的,认为这更像是一种布局。这是我第一次与模拟界限混淆,并且我很高兴我能达到这一点。谢谢 – Steve 2011-03-14 04:52:09

+0

嗨,我是unix中sendmail的新手。你能否解释一下在电子邮件结构中边界的作用? – Mistu4u 2015-06-08 02:34:18

+0

@ Mistu4u请参阅https://tools.ietf.org/html/rfc2046#page-17 – mario 2015-06-08 03:33:44

2

它看起来像你缺少边界分隔符之后所需的CRLF,也可能是分隔符可以缩进(它一定不能),尽管这可能只是代码格式化在这里。它也看起来像你只使用新行,而不是强制性的CRLF。

你应该认真考虑使用a mature mailing library, like SwiftMailer组装MIME消息您轻松。

+0

+1 SwiftMailer ...或PHPMailer的都行......只是什么除了原始的“邮件”功能。 – prodigitalson 2011-03-14 04:44:06

+0

我曾经使用过phpmailer,但有时感觉像是过度杀伤。但请记住这一点。 – Steve 2011-03-14 04:53:14

+0

是的。 +1。我发现文章[这里](http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php),这将是有益的。 – isurusndr 2011-03-14 04:53:20

相关问题