我正在使用PHP的mail()
函数发送多部分HTML电子邮件。在我的Postfix配置中,我的SMTP服务器设置为亚马逊的SES。这是用于发送电子邮件的PHP:
$boundary = uniqid("HTMLDEMO");
$headers = "From: me@mydomain.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/alternative; boundary = ".$boundary."\r\n\r\n";
// plain text
$content = "--".$boundary."\r\n" .
"Content-Type: text/plain; charset=ISO-8859-1\r\n" .
"Content-Transfer-Encoding: base64\r\n\r\n" .
chunk_split(base64_encode($plaintext_message));
// HTML
$content .= "--".$boundary."\r\n" .
"Content-Type: text/html; charset=ISO-8859-1\r\n" .
"Content-Transfer-Encoding: text/html \r\n\r\n" .
"<html><body>".$html_message."</body></html>";
//send message
mail($to, $subject, $content, $headers);
当我回复消息内容时,这就是我在浏览器中看到的内容:
--HTMLDEMO527d8d851e72f
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: base64
VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCB2ZXJzaW9uIQ==
--HTMLDEMO527d8d851e72f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: text/html
<html><body><p>My message here.</p></body></html>
但是当我在Gmail中查看邮件来源时,我现在看到了这一点(包括邮件标题):
From: me@mydomain.com
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary = HTMLDEMO527d8d851e72f
Message-ID: <blah-blah-blah@email.amazonses.com>
Date: Sat, 9 Nov 2013 01:19:02 +0000
X-SES-Outgoing: 2013.11.09-12.34.5.67
--HTMLDEMO527d8d851e72f
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: base64
VGhpcyBpcyB0aGUgcGxhaW4gdGV4dCB2ZXJzaW9uIQ==
--HTMLDEMO527d8d851e72f
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: text/html
多部分标题现在是双倍行距,导致HTML显示为纯文本。 SES显然正在修改消息标题(它添加了Message-ID
,Date
和X-SES-Outgoing
),那么这也可能是多部分标题中额外空格的罪魁祸首吗?当我从非亚马逊服务器发送相同的电子邮件时,它会正常显示并按照它应该呈现HTML。
此外,当我将其作为简单的HTML电子邮件(而非多部分)发送时,它的工作正常。
感谢。
答案 0 :(得分:0)
我遇到了同样的问题,我通过将行尾字符更改为'\ n'而不是'\ r \ n'来解决此问题。