Я отправляю многостраничное электронное письмо в формате HTML, используя функцию PHP mail()
. В моей конфигурации Postfix мой SMTP-сервер настроен на SES Amazon. Вот PHP для отправки электронной почты:
$boundary = uniqid("HTMLDEMO");
$headers = "From: [email protected]\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: [email protected]
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary = HTMLDEMO527d8d851e72f
Message-ID: <[email protected]>
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 (не состоящее из нескольких частей), оно работает нормально.
Спасибо.