我可以发送文本很好,只是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);
答案 0 :(得分:1)
您忘记了Content-Type和Content-Transfer-Encoding行之后的换行符,因此您的正文内容的开头与标题混合在一起:
"--".$boundary.
^^^--- missing \n
"Content-Transfer-Encoding: 7bit".
^^^--- missing \n\n
$text.
如上述评论中所述,使用Swiftmailer或PHPMailer执行此操作。他们会处理所有细节,并让您以更少的代码行发送整个邮件。
答案 1 :(得分:0)
$boundary
未定义,在任何边界之前或之后没有换行符,并且标题和正文之间没有空行每个部分(或任何这些标题之后的换行符)。
不要手动MIME。我确信有一个不错的PHP库,可以帮到你。