1

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-IDDate、およびX-SES-Outgoing)。これも、マルチパート ヘッダーの余分なスペースの原因でしょうか? Amazon 以外のサーバーから同じメールを送信すると、正常に送信され、HTML が適切にレンダリングされます。

また、単純な HTML メール (マルチパートではない) として送信すると、問題なく動作します。

ありがとう。

4

1 に答える 1