我正在使用 PHP 的mail()
函数发送多部分 HTML 电子邮件。在我的 Postfix 配置中,我将 SMTP 服务器设置为 Amazon 的 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 电子邮件(不是多部分)发送时,它工作得很好。
谢谢。