проблема с php mail () – от имени не отображается правильно

hellHi Люди,

У меня есть контактная форма на моей веб-странице, и пока она работает нормально.

Проблема только в том, что в моей почтовой программе имя в поле from не отображается правильно, хотя исходный код сообщения кажется правильным:

From: Metaldemos <hello@metaldemos.com> Reply-To: Metaldemos <hello@metaldemos.com> 

Во всяком случае, в почтовой программе имя «привет».

В php я использую следующие заголовки:

 $headers="Mime-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: quoted-printable\nFrom: Metaldemos <hello@metaldemos.com>\nReply-To: Metaldemos <hello@metaldemos.com>\nReturn-Path: Metaldemos <hello@metaldemos.com>\n"; 

и код для отправки почты:

 mail($email, $subject, $mailbody, $headers,"-t -i -f Metaldemos <hello@metaldemos.com>"); 

Любая идея о том, как я могу это исправить?

Greetz & thanks

Maenny

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

 ... $headers.= "From: MCB Web Design <info@mcbwebdesign.co.uk>\r\n"; $headers.= "Reply-To: Martin Bean <martin@mcbwebdesign.co.uk>\r\n"; ... if (mail($to, $subject, $message, $headers)) { // email sent } else { // email failed } 

Вышеприведенный ответ верен. Вам нужно \ r \ n в конце строк «От» и «Ответить на». AS WELL, поскольку в конце ВСЕХ других строк заголовка.

Согласно SMTP RFC (раздел «2.3.8. Линии»)

Линии состоят из нуля или более символов данных, завершаемых символом последовательности символов ASCII «CR» (шестнадцатеричное значение 0D), за которым следует символ ASCII «LF» (шестнадцатеричное значение 0A). Эта последовательность завершения обозначается как в этом документе. Соответствующие реализации НЕ ДОЛЖНЫ распознавать или генерировать любой другой символ или последовательность символов в качестве ограничителя строки. Ограничения МОГУТ накладываться на длину строк серверами (см. Раздел 4).

Кроме того, появление «голых» символов «CR» или «LF» в тексте (то есть либо без другого) имеет долгую историю возникновения проблем в почтовых реализациях и приложениях, которые используют почтовую систему в качестве инструмента. Реализации клиента SMTP НЕ ДОЛЖНЫ передавать эти символы, за исключением случаев, когда они предназначены как терминаторы линий, а затем ДОЛЖНЫ, как указано выше, передавать их только как последовательность.

Итак, ваша строка заголовка:

 $headers="Mime-Version: 1.0\nContent-Type: text/plain; charset=UTF-8\nContent-Transfer-Encoding: quoted-printable\nFrom: Metaldemos <hello@metaldemos.com>\nReply-To: Metaldemos <hello@metaldemos.com>\nReturn-Path: Metaldemos <hello@metaldemos.com>\n"; 

недопустимо, заголовки HTTP или SMTP ДОЛЖНЫ всегда заканчиваться \ r \ n не только \ n или \ r

Правильная строка будет

 $headers="Mime-Version: 1.0\r\n"; $headers.="Content-Type: text/plain; charset=UTF-8\n"; $headers.="Content-Transfer-Encoding: quoted-printable\n"; $headers.="From: Metaldemos <hello@metaldemos.com>\n"; $headers.="Reply-To: Metaldemos <hello@metaldemos.com>\n"; $headers.="Return-Path: Metaldemos <hello@metaldemos.com>\n"; 

Вы можете положить все это в одну длинную строку, это нормально, я просто разделил ее, чтобы сделать ее более ясной.

Причина, по которой она не срабатывала раньше, заключается в том, что вы только изменили FROM и REPLY-TO, вы должны изменить все из них.