【问题标题】:PHP mail: use quotes in $to and in from mail header or NOT?PHP 邮件:是否在 $to 和邮件标头中使用引号?
【发布时间】:2011-03-05 18:59:34
【问题描述】:

在使用 PHP 邮件功能时,我们是否需要在 $tofrom/cc/bcc 邮件头中使用引号?

我的意思是,假设我想发送邮件到:

User One <user@domain.com>

我必须打电话吗:

mail("\"User One\" <user@domain.com>", ...

mail("User One <user@domain.com>", ...

我想一旦你给我一个$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);

如果标题中有单引号,也许我需要使用引号?我不知道有时我看到了带引号的示例,而其他时候没有它们,有谁知道,也许可以解释一下。

谢谢!

【问题讨论】:

    标签: php header email quotes


    【解决方案1】:

    如果我阅读了相关的RFC 对:

    字符串,其中包含其他字符 原子中允许的可以用带引号的字符串格式表示,其中 字符被引号包围(DQUOTE,ASCII 值 34) 字符。

    引号字符串被视为一个单元。也就是说,quoted-string 是 在语义上与 atom 相同。

    包裹字符串的正确字符是双引号"(仅此而已),但它是可选的。

    如果您的收件人姓名包含空格,我强烈建议您使用它。

    【讨论】:

      【解决方案2】:

      收件人必须符合 RFC2822(请参阅the PHP doc for the mail function)。

      由于实际收件人是 之间的内容,因此是否使用引号并不重要 - 邮件将发送给同一个人;但他自己的电子邮件客户端可能会显示不同。

      在文档中,他们确实列出了不带引号的示例;我也倾向于这样做。

      【讨论】:

      • 但是仅仅因为我会这样做并不意味着它很好:-/ - pekka 可能是对的,你应该放一些。我唯一可以肯定地说的是:如果您使用开场白,也请使用结束语。我知道,这不是一个有用的建议。
      • 实际上,我只是遇到了A, B &lt;mail@example.com&gt; 类型地址的问题,因为服务器认为逗号是两个电子邮件地址之间的分隔符,从而导致发送到A,即无效地址;正确的格式似乎是"A, B" &lt;mail@example.com&gt;。可能相关:addedbytes.com/blog/code/email-address-validationstackoverflow.com/questions/12008720/…
      【解决方案3】:

      这个:

      mail("\"User One\" <user@domain.com>", ...
      

      将输出:

      "User One" <user@domain.com>
      

      此时:

      mail("User One <user@domain.com>", ...
      

      将输出:

      User One <user@domain.com>
      

      更新:

      我没有指向 RFC 的链接,但只是注意到当您使用 Gmail 撰写电子邮件时,它的内容如下:

      "Sarah Chafer" <sarah.chafer@domain.com>, 
      

      查看那里的双引号。

      【讨论】:

      • 这还没有回答问题。有一个 RFC 定义的方法可以做到这一点,如果我没记错的话,它甚至定义了是使用单引号还是双引号。 (我也想知道这个问题的答案。)
      • @Pekka:看到这一点会很有趣,但我注意到当您使用 gmail 撰写电子邮件时,它会将其放入 "Sarah Chafer" &lt;sarah.chafer@offerpal.com&gt;,
      • @Sarfraz Ahmed:我不明白你的意思,实际上如果从我的 Outlook Express 的“\”User One\" " 向我的 Outlook Express 发送电子邮件显示在 From: User One 而不是“User One”(带引号)。
      • @Marco 是的,这正是它的意图。如果字符串包含空格,引号将包裹字符串,但不会显示。
      • RFC 似乎将 之外的所有内容都视为 cmets 或其他空白;这基本上意味着没关系。 里面是实际地址。
      猜你喜欢
      • 2017-12-14
      • 1970-01-01
      • 1970-01-01
      • 2011-08-26
      • 1970-01-01
      • 1970-01-01
      • 2010-11-21
      • 2011-08-03
      • 2017-04-30
      相关资源
      最近更新 更多