我一直在敲打这个问题一段时间,并且无法在我的问题上找到任何有用的文章。我正在编写一个使用内置邮件功能的PHP站点来快速确认电子邮件。我意识到对内置邮件功能存在相当大的偏见,但到目前为止我一直很好地工作,我希望能够继续使用它。当我发送纯文本邮件时,一切都很好,就像我只发送一封HTML电子邮件一样。但是,如果我尝试执行多部分文本/ HTML电子邮件,则两个版本都会显示在我的电子邮件客户端中(同时尝试使用thunderbird和gmail)。我希望有人可以帮我弄清楚我做错了什么(除了使用mail()而不是PHPMail)。这是我的代码片段
$uid = md5(uniqid(time()));
$strSubject = "Confirmation for $strEventName on $strEventDate";
$strHTMLMsg = "<h1><center>You are confirmed for the following event:</center></h1><br>\n$strEvenDetails";
$strMsg = strip_tags($strHTMLMsg);
$toEmail = "\"$strName\" <$strEmail>";
$header = "$FromEmail\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\n\n";
$header .= "Content-Transfer-Encoding: 7bit\n";
$header .= "This is a MIME encoded message.\n\n";
$header .= "--".$uid."\n";
$header .= "Content-type:text/plain; charset=UTF-8\n";
$header .= "Content-Transfer-Encoding: 7bit\n\n";
$header .= $strMsg."\n\n";
$header .= "--".$uid."\n";
$header .= "Content-type:text/HTML; charset=UTF-8\n";
$header .= "Content-Transfer-Encoding: 7bit\n\n";
$header .= $strHTMLMsg."\n\n";
$header .= "--".$uid."\n";
$header .= "Content-Type: application/ics; name=\"".$strFileName."\"; method=PUBLISH; charset=UTF-8\n";
$header .= "Content-Transfer-Encoding: 7bit\n";
$header .= "Content-Disposition: attachment; filename=\"".$strFileName."\"\n\n";
$header .= $strICSEvent."\n\n";
$header .= "--".$uid."\n";
$bSuccess = mail($toEmail,$strSubject,"",$header);
答案 0 :(得分:0)
Necrobump,但我是在谷歌搜索后到达这里的,所以对于其他搜索词相同的人:multipart/mixed 意味着您将查看所有部分。对于只有一个可见的 HTML 和文本部分,请改用 multipart/alternative。最后一部分的优先级最高。
另请参阅 Mail multipart/alternative vs multipart/mixed 了解更多信息,以及有关“堆叠”mime 内容的信息。