Какой разрыв строки в заголовке почты php, \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 неверно?

8 ответов

Решение

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, но это нарушает ваши заголовки в нескольких почтовых системах (например, Outlook 2003). Хотя \ n не является "правильным" разрывом строки для использования, по моему опыту, он работает правильно на всех почтовых системах, с которыми я сталкивался до сих пор. Из-за этого я всегда использую просто \ n.

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

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

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

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

Решение в /questions/24908270/problema-formatirovaniya-pochtyi-php-pochemu-okonchaniya-strok-zagolovka-crlf-narushayut-rabotu-elektronnoj-pochtyi-html-v-outlook/24908297#24908297 (я решил установить 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. Будьте уверены, что мы "вместо", так как последний, кажется, не работает!

      > $mail = new PHPMailer;
 $mail->isSMTP(); 
**$mail->isHTML(true);**

Вставьте этот код после работы

      > all html tag <br> <p> in $mail->Body='Hello<br> how are you ?<b>';
Другие вопросы по тегам