【问题标题】:Mulitpart MIME email text and HTML shows both parts多部分 MIME 电子邮件文本和 HTML 显示这两个部分
【发布时间】:2015-06-09 20:42:47
【问题描述】:

我一直在努力研究这个问题,但找不到任何关于我的问题的有用文章。我正在使用内置邮件功能编写一个 PHP 站点,用于快速确认电子邮件。我意识到对内置邮件功能存在相当大的偏见,但到目前为止它对我来说一直运行良好,我希望能够继续使用它。当我只发送一封纯文本电子邮件时,一切都很好,就好像我只发送一封 HTML 电子邮件一样。但是,如果我尝试发送多部分文本/HTML 电子邮件,则两个版本都会显示在我的电子邮件客户端中(尝试了 Thunderbird 和 gmail)。我希望这里有人可以帮助我找出我做错了什么(除了使用mail()而不是PHPMail)。这是我的代码 sn-p

    $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:正确的行尾应为CRLF(即\r\n)。 2:标题和正文(包括多部分的)由空行分隔。 3:最后的闭合分隔符是CRLF "--" boundary "--"
  • 非常感谢您的回复。然而,这似乎没有帮助。我将结尾的行从 \n 更改为 \r\n。我不确定你所说的#2 是什么意思,所以我试着去掉双线结尾以及其他一些东西。他们中的一些人没有任何区别,有些人让情况变得更糟。你能澄清一下你的意思吗
  • 更具体地说:参考$header行:3.行:\n太多; 4.线路:\n缺失; 19. 行:-- 边界后缺失。也许您应该使用一些抽象并以更结构化的方式而不是手动构建多部分消息。
  • 我发现的关于构建多部件的唯一示例就是这种方式。任何指向更好示例的指针将不胜感激。我正在尝试学习如何正确构建多部分消息。

标签: php email mime-mail


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2014-10-22
    • 2021-01-11
    • 2011-03-05
    • 2013-07-13
    • 2012-04-24
    • 1970-01-01
    • 2020-06-30
    • 2015-12-11
    • 2011-09-24
    相关资源
    最近更新 更多