Почта PHP: использовать кавычки в $to и в заголовке почты или НЕТ?

Нужно ли нам использовать кавычки в заголовках почты $to и from/cc/bcc при использовании почтовой функции PHP?

Я имею в виду, скажем, я хочу отправить письмо на:

User One <[email protected]>

Должен ли я позвонить:

mail("\"User One\" <[email protected]>", ...

OR

mail("User One <[email protected]>", ...

Я полагаю, как только вы дадите мне ответ на $to, он будет таким же и для других почтовых заголовков, которые я обычно добавляю следующим образом:

$mail_headers  = "From: " . $from . "\r\n";      
$mail_headers .= "Cc: " . $cc . "\r\n";
$mail_headers .= "Bcc: " . $bcc . "\r\n";
$mail_headers .= "MIME-Version: 1.0\r\nContent-type: text/plain;\r\n\tcharset=\"Windows-1252\";\r\nContent-Transfer-Encoding: 8bit" . "\r\n";      
//I use "Windows-1252" charset, cause "iso-8859-1" DOES NOT DISPLAY EURO CHAR!

mail($to, $subject, $body, $mail_headers);

Может быть, мне нужно использовать кавычки, если в заголовке есть одинарная кавычка? Не знаю, иногда видел примеры с кавычками, иногда без них, может кто знает, а может и объяснит.

Спасибо!


person Marco Demaio    schedule 19.06.2010    source источник


Ответы (3)


Если я правильно прочитал соответствующий RFC:

Строки символов, включающие символы, отличные от разрешенных в атомах, могут быть представлены в формате строки в кавычках, где символы заключены в кавычки (DQUOTE, значение ASCII 34).

Строка в кавычках рассматривается как единица. То есть строка в кавычках семантически идентична атому.

правильным символом для переноса строки является двойная кавычка " (и только она), но это необязательно.

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

person Pekka    schedule 19.06.2010

Получатель должен соответствовать RFC2822 (см. документ PHP для функции почты) .

Поскольку фактический получатель находится между ‹ и >, на самом деле не имеет значения, используете ли вы кавычки или нет — письмо будет отправлено тому же человеку; но его собственный почтовый клиент может отображать это по-другому.

В документации они перечисляют примеры без кавычек; Я бы тоже так поступил.

person Joubarc    schedule 19.06.2010
comment
Но то, что я бы сделал так, не означает, что это хорошо :-/ - pekka, вероятно, прав, что вы должны добавить немного. Единственное, что я могу сказать с определенной уверенностью: если ставишь вступительную цитату, используй и закрывающую. Это не слишком полезный совет, я знаю. - person Joubarc; 19.06.2010
comment
На самом деле, у меня только что была проблема с адресом типа A, B <[email protected]>, так как сервер считал запятую разделителем между двумя адресами электронной почты, тем самым вызывая отправку на A, который является недопустимым адресом; правильное форматирование, кажется, было "A, B" <[email protected]>. Вероятно, это связано: addedbytes.com/blog/code/email-address-validation и stackoverflow.com/questions/12008720/ - person sdaau; 07.07.2015

Это:

mail("\"User One\" <[email protected]>", ...

выведет:

"User One" <[email protected]>

пока это:

mail("User One <[email protected]>", ...

выведет:

User One <[email protected]>

Обновление:

У меня нет ссылки на RFC, но я только что заметил, что когда вы составляете электронное письмо с помощью Gmail, оно вставляется примерно так:

"Sarah Chafer" <[email protected]>, 

Смотрите двойные кавычки там.

person Sarfraz    schedule 19.06.2010
comment
Это еще не ответ на вопрос. Для этого существует определенный RFC способ, и, если я правильно помню, он даже определяет, следует ли использовать одинарные или двойные кавычки. (Я бы тоже хотел знать ответ на этот вопрос.) - person Pekka; 19.06.2010
comment
@Pekka: Будет интересно на это посмотреть, но я заметил, что когда вы составляете электронное письмо с помощью Gmail, оно вставляется как "Sarah Chafer" <[email protected]>,. - person Sarfraz; 19.06.2010
comment
@Sarfraz Ahmed: я не понимаю, что вы имеете в виду, на самом деле, если отправить электронное письмо на мой Outlook Express от \User One\ ‹[email protected]›, мой Outlook Express отображается в поле From: User One, а не User One ( с цитатами). - person Marco Demaio; 19.06.2010
comment
@Марко, да, именно так и задумано. Кавычки заключают строку, если она содержит пробелы, но они не будут отображаться. - person Pekka; 19.06.2010
comment
@Marco: я обновил свой ответ, двойные кавычки, похоже, есть в RFC, но, как сказал @Pekka, они кажутся необязательными. - person Sarfraz; 19.06.2010
comment
RFC, похоже, рассматривает все, что находится за пределами ‹ ›, как комментарии или иные пробелы; что в основном означает, что это не имеет значения. Внутри ‹ › находится фактический адрес. - person Joubarc; 19.06.2010
comment
@Joubarc Я почти уверен, что видел случаи проблем, когда кавычки не использовались, но сейчас я не могу найти пример. - person Pekka; 19.06.2010
comment
Может быть, я должен признать, что ваше чтение RFC имеет больше смысла, чем мое. Какие проблемы? Недоставленные письма? Но да, сомневаюсь, что двойные кавычки не помешают. - person Joubarc; 19.06.2010