Дополнительные пробелы добавляются в почтовые заголовки PHP

Я отправляю многостраничное электронное письмо в формате 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 (не состоящее из нескольких частей), оно работает нормально.

Спасибо.


person Mike    schedule 09.11.2013    source источник
comment
Это составные заголовки, а не заголовки исходного сообщения. Я предлагаю вам показать нам ваш PHP-код. Кроме того, что происходит, когда вы пытаетесь использовать другой SMTP-сервер?   -  person Dai    schedule 09.11.2013


Ответы (1)


У меня была такая же проблема, и я решил ее, изменив символ конца строки на «\n» вместо «\r\n».

person toaster    schedule 28.01.2014