Какая строка прерывается в заголовке php mail, \ r \ n или \ n?

Я видел много примеров, используя функцию php mail. Некоторые из них используют \ r \ n в качестве разрыва строки для заголовка, некоторые используют \ n.

$headers = "From: Just Me\n"; $headers .= "Reply-To: Just me <$email>\n"; 

против

 $headers = "From: Just Me\r\n"; $headers .= "Reply-To: Just me <$email>\r\n"; 

какой из них правильный?

Иногда у меня были случаи, когда используется \ r \ n, а часть заголовка интерпретируется некоторыми почтовыми клиентами как почтовый текст (теряющий эту информацию заголовка) – это потому, что \ r \ n не так?

CRLF \r\n следует использовать в соответствии с документацией php . Кроме того, чтобы соответствовать спецификациям RFC 2822, должны быть ограничены символом возврата каретки, CR \r за которым следует строка, LF \n .

Так как \r\n является родным для платформ Windows и \n для Unix, вы можете использовать постоянную константу PHP_EOL Docs в Windows, что является подходящим новым символом строки для платформы, на которой в данный момент работает скрипт.

На всякий случай поисковая система подбирает это и спасает кого-то еще от разочарования, которое я пережил: вот еще одно любопытство.

В php 5.2x на Linux я имел \ r \ n в своих почтовых заголовках в php mail (), после обновления до php 5.3.3 форматирование и отправка таинственным образом не удалось. Удаление \ r фиксировало скрипт (после изучения многих других возможностей).

Как указано выше, \ r \ n – это то, что вы должны использовать в соответствии с RFC, но это разбивает ваши заголовки на несколько почтовых систем (fi Outlook 2003). Несмотря на то, что \ n не является «правильной» разрывом строки для использования, по моему опыту он работает правильно на всех почтовых системах, с которыми я столкнулся до сих пор. Из-за этого я всегда использую только \ n.

Мой опыт: HTML-письма работали в веб-клиентах, но нарушали клиентские настольные клиенты на базе MS (антураж, внешний вид). Использул \ r \ n. Удалено \ r только в MIME-версии и теперь работает по всей доске.

RFC официально обязывает CRLF (\ r \ n), но используя разрывы Unix (\ n) для заголовков, сэкономит вам много хлопот. Некоторые почтовые серверы, такие как qmail, отклонят ваше сообщение, если оно использует \ r \ n.

Источник: опыт, подтвержденный этой запиской: http://www.php.net/function.mail#40204

У меня была проблема с недопониманием gmail-заголовков gmail, но просто оставить разрывы строки заголовка в \ n в моем случае было недостаточно, потому что в этом случае некоторые версии Outlook отображали электронные письма как пустые.

Решение в https://stackoverflow.com/a/7960957 (я выбрал установку postfix 2.9 на lucid из ppa) в сочетании с использованием \ n, похоже, работает повсюду.

Я изменил свой скрипт, чтобы вместо этого использовать PHP_EOL, который, похоже, работает – вот так:

 //Set Content-type header $headers = "MIME-Version: 1.0" . PHP_EOL; $headers .= "Content-type: text/html; charset=iso-8859-1" . PHP_EOL; //Additional headers $headers .= "From: $from" . PHP_EOL; $headers .= "Cc: $cc" . PHP_EOL; $headers .= "Content-type: text/html" . PHP_EOL; $headers .= "Bcc: $bcc" . PHP_EOL; 

NB. Будьте уверены, «вместо того, чтобы», поскольку последний, похоже, не работает!