多部分MIME电子邮件文本和HTML显示两个部分

时间:2015-04-05 05:49:25

标签: php email mime-mail

我一直在敲打这个问题一段时间,并且无法在我的问题上找到任何有用的文章。我正在编写一个使用内置邮件功能的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);

1 个答案:

答案 0 :(得分:0)

Necrobump,但我是在谷歌搜索后到达这里的,所以对于其他搜索词相同的人:multipart/mixed 意味着您将查看所有部分。对于只有一个可见的 HTML 和文本部分,请改用 multipart/alternative。最后一部分的优先级最高。

另请参阅 Mail multipart/alternative vs multipart/mixed 了解更多信息,以及有关“堆叠”mime 内容的信息。