Документы PHP mail() говорят, что я должен использовать только LF в теле, но RFC 5322 говорит иначе.
Руководство по PHP (http://php.net/manual/en/function.mail.php) гласит:
Каждая строка должна быть разделена LF (\n). Строки не должны быть длиннее 70 символов.
Но фактический RFC 5322 дает совершенно другую информацию:
2,3. Тело Тело сообщения - это просто строки символов US-ASCII. Единственными двумя ограничениями на тело являются следующие:
o CR и LF ДОЛЖНЫ появляться только вместе как CRLF; они НЕ ДОЛЖНЫ появляться самостоятельно в теле. o Строки символов в теле ДОЛЖНЫ быть ограничены 998 символами и ДОЛЖНЫ быть ограничены 78 символами, исключая CRLF.
Итак, RFC говорит, что следует использовать только \r\n. Я не понимаю - как php mail() работает в фоновом режиме?
2 ответа
как php mail() работает в фоновом режиме?
Точно так, как вы могли ожидать от конфигурации. По умолчанию это просто оболочка для двоичного файла sendmail на большинстве систем и очень простой MUA, где указан SMTP-хост. В то время как первый использует LF в качестве строки, заканчивающейся на своем входе, последний требует CRLF для своего вывода - поскольку окончания строк различаются в зависимости от ОС, PHP предоставляет унифицированное окончание строки для почты (LF)
Очевидно PHP mail()
должно быть преобразование \n
в \r\n
на заднем фоне.
Это похоже на практику использования Perl \n
представлять "логический" перевод строки, а затем переводить их внутренне в зависимости от ОС. Поскольку PHP был частично вдохновлен Perl, не удивительно, что подобный механизм существует в PHP.