mail()
PHPの関数を使ってマルチパート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
)。これも、マルチパート ヘッダーの余分なスペースの原因でしょうか? Amazon 以外のサーバーから同じメールを送信すると、正常に送信され、HTML が適切にレンダリングされます。
また、単純な HTML メール (マルチパートではない) として送信すると、問題なく動作します。
ありがとう。