Какой разрыв строки в заголовке почты php, \ r \ n или \ n? - PullRequest
26 голосов
/ 11 декабря 2010

Я видел много примеров использования функции 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 неверно?

Ответы [ 7 ]

22 голосов
/ 11 декабря 2010

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

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

11 голосов
/ 06 марта 2012

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

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

8 голосов
/ 10 июня 2011

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

3 голосов
/ 13 февраля 2013

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

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

2 голосов
/ 13 июля 2012

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

1 голос
/ 26 июля 2012

Я изменил свой скрипт, чтобы использовать вместо него 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;

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

1 голос
/ 28 апреля 2012

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...