Что такое правильный перевод строки в письмах? LF или CRLF? - PullRequest
8 голосов
/ 22 июля 2011

Недавно некоторые клиенты жаловались, что они получают искаженные электронные письма. Отображались заголовки MIME, данные в кодировке base64 и т. Д. Материал, который должен был быть декодирован их почтовыми клиентами.

После расследования я обнаружил, что некоторые почтовые клиенты (например, gmx.de webmail вставляют одну пустую строку после каждой другой строки), таким образом, действительно все портят.

Следуя догадке, я изменил свой код отправки почты, чтобы заменить все CRLF просто LF. И о чудо - почта пришла целой.

Это странно, потому что RFC 5322 прямо заявляет, что

2,3. Тело

Тело сообщения - это просто строки символов US-ASCII. только два ограничения для тела следующие:

o CR и LF ДОЛЖНЫ появляться только вместе как CRLF; они НЕ ДОЛЖНЫ появляться самостоятельно в теле.

А? Плохая почта? Или я где-то ошибся? Другие почтовые сообщения (такие как gmail) не имеют проблем с этим, и действительно, кажется, что у большинства людей нет проблем (так как жалоб мало).

Просто заметьте - я отправляю электронную почту через функцию PHP mail() на Linux-боксе. Основным почтовым программным обеспечением является qmail, но я не уверен.

Похоже, qmail не любит CRLF при похожих условиях . Может ли это быть проблемой? Разве это не исправлено (эта страница не обновлялась в течение 4 лет)?

1 Ответ

2 голосов
/ 16 апреля 2014

http://www.php.net/manual/en/function.mail.php состояния

Примечание:

Если сообщения не получены, попробуйте использовать только LF (\ n). Некоторые агенты пересылки почты Unix (в частности, qmail) автоматически заменяет LF на CRLF (что приводит к удвоению CR, если CRLF используется). Это должно быть последним средством, так как оно не соответствует RFC 2822.

...