У нас есть несколько скриптов PHP, которые отправляют письма с использованием PHP почта () функция.
$message = "Some lengthy text";
$header = "MIME-Version: 1.0\r\n";
$header .= "Content-Type: text/plain; charset=iso-8859-1; format=flowed\r\n";
$header .= "From: Name <[email protected]>\r\n";
$header .= "Return-Path: <[email protected]>\r\n";
mail('[email protected]', 'Subject', wordwrap($message, 70), $header);
В руководстве по PHP упоминается, что некоторые UNIX-MTA не следуют RFC 2822 и заменить LF на LFCR. Похоже, это то, что происходит с нами, так как немного из отправленных писем есть дополнительные разрывы строк в их заголовок часть. Это портит письма, так как заголовки считаются телом сообщения.
MIME-Version: 1.0
From: Name <[email protected]>
Message-Id: <[email protected]>
Date: Tue, 14 Oct 2014 19:19:59 +0200 (CEST)
Some lengthy text
Однако эта проблема возникает только с некоторыми из наших сценариев, другие работают как положено. Похоже, что это не связано с нашим MTA. Мы используем постфикс на Debian система. PHP настроен на использование /usr/sbin/sendmail -t -i
отправлять письма. Это интерфейс совместимости Postfix to Sendmail.
Я пока не вижу никакой разницы со сценариями, в которых письма отправляются корректно, и сценариями, в которых заголовки почты повреждаются. Копирование рабочего кода в новый файл в том же каталоге приводит к отправке поврежденных писем, поэтому я не думаю, что код PHP также является источником проблемы.
Кодировка файлов и окончание строк рабочих скриптов и битых скриптов тоже идентичны.
Есть мысли о том, что еще может вызвать такое поведение?
Задача ещё не решена.
Других решений пока нет …