Подтвердить что ты не робот

Какая строка прерывается в заголовке 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 неверно?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Ответ 3

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 7

Я изменил свой script на использование 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. Будьте уверены, "вместо того, чтобы", поскольку последний, похоже, не работает!