电子邮件正文为空,MIME多部分(text& html)

时间:2011-04-14 20:47:59

标签: php email smtp

我可以发送文本很好,只是html很好,但是当我将两者结合起来时,电子邮件发送但身体是空的。

$to = "some@email.com";
$subject = "Welcome";
$boundary = md5(date('U'));

$headers = "From: Company <noreply@email.com>" . "\n".
                   "X-Mailer: PHP/".phpversion() ."\n".
                   "MIME-Version: 1.0" . "\n".
                   "Content-Type: multipart/alternative; boundary=".$boundary. "\n";
                   "Content-Transfer-Encoding: 7bit". "\n";

// TEXT EMAIL PART
$text = "Congratulations";

// HTML EMAIL PART
$html = "<html><body>\n";
$html .= "<div>Congratulations</div>";
$html .= "</body></html>\n";

$message = "Multipart Message coming up" . "\n\n".
           "--".$boundary.
           "Content-Type: text/plain; charset=\"iso-8859-1\"" .
           "Content-Transfer-Encoding: 7bit".
           $text. 
           "--".$boundary. 
           "Content-Type: text/html; charset=\"iso-8859-1\"". 
           "Content-Transfer-Encoding: 7bit". 
           $html.
           "--".$boundary."--";

mail($to, $subject, $message, $headers);    

2 个答案:

答案 0 :(得分:1)

您忘记了Content-Type和Content-Transfer-Encoding行之后的换行符,因此您的正文内容的开头与标题混合在一起:

       "--".$boundary.
                    ^^^--- missing \n
       "Content-Transfer-Encoding: 7bit".
                                        ^^^--- missing \n\n
       $text. 

如上述评论中所述,使用SwiftmailerPHPMailer执行此操作。他们会处理所有细节,并让您以更少的代码行发送整个邮件。

答案 1 :(得分:0)

$boundary 未定义,在任何边界之前或之后没有换行符,并且标题和正文之间没有空行每个部分(或任何这些标题之后的换行符)。

不要手动MIME。我确信有一个不错的PHP库,可以帮到你。