【问题标题】:What is the best Separator to Separate Multiple Emails?分隔多个电子邮件的最佳分隔符是什么?
【发布时间】:2012-08-20 15:42:57
【问题描述】:

我正在使用mailto 链接来填充用户默认电子邮件程序的bcc

$mem_email=" ";    
$sql="SELECT email_address FROM employee";
$contacts = $db->query($sql);
while($contact = $db->fetchByAssoc($contacts))
{
    if($contact['email_address']!="" && $contact['email_address']!=NULL)
    {
        $mem_email.=$contact['email_address'].", ";
    }
}

header("Location: mailto:?bcc={$mem_email}"); 

在密件抄送字段中分隔多封电子邮件的最佳分隔符是什么:,;

就我而言,我使用的是,

【问题讨论】:

  • 如果您使用普通的旧 mailto 锚,那么是的,这是最好的方法。

标签: php email bcc


【解决方案1】:

分隔符应为逗号 (,),且不应有空格。

RFC 6068

【讨论】:

【解决方案2】:

TLDR 解决方案

TLDR 答案:使用不带空格的, 分隔电子邮件地址。

RFC6068: The 'mailto' URI Scheme(2010 年 10 月发布)只是一个建议标准it is not an accepted, Internet standard. 也没有讨论逗号分隔。

TLDR 警告/Gotchya 的

  • 请注意(根据RFC6854),您不应在电子邮件的Sender 字段中使用逗号分隔地址(出于安全原因)。
  • 许多服务允许带有, 的空格,因此用于拆分的理想正则表达式是/\s*,\s*/
  • Outlook 和 Exchange(以及其他 X.400/X.500 兼容软件)支持使用;。这是因为 X.400/X.500 规范将分号视为有效的名称分隔符(参见 RFC1485,1993 年 7 月发布)。今后,建议使用,

来源

引用最初提议的标准RFC2822: Internet Message Format,于 2001 年 4 月发布...

3.6.3。目标地址字段

消息的目标字段由三个可能的字段组成, 每个相同的形式:字段名称,可以是“收件人”、“抄送”或 “密件抄送”,后跟一个或多个地址的逗号分隔列表 (邮箱或组语法)。

to              =   "To:" address-list CRLF

cc              =   "Cc:" address-list CRLF

bcc             =   "Bcc:" [address-list / CFWS] CRLF

该提议标准已于 2008 年 10 月被接受为草案标准,RFC5322: Internet Message Format。我会在那里引用文本,但他们决定保持原样。 2013 年 3 月提出了更新,RFC6854: Update to Internet Message Format to Allow Group Syntax...:您不应该在 Sender 字段中允许逗号分隔的值,因为这样就不确定是谁真正触发了发送电子邮件。引用这个 RFC,RFC6854...

2.1。替换 RFC 5322,第 3.6.2 节。发起人字段

...发件人字段和发件人 字段不应使用组语法;相反,来自字段应该使用 只有邮箱列表语法和发件人字段应该只使用 邮箱语法(参见 RFC 6854,第 3 节)。如果发件人字段使用 组语法,组不得包含多个邮箱。

【讨论】:

    【解决方案3】:

    这是一个迟到的警告,以防万一有人需要它:

    即使 RFC 明确建议使用逗号,Microsoft Outlook 也会使用在区域设置中定义的“列表分隔符”。对于系统配置有不同列表分隔符(例如分号)的 Windows + Outlook 用户,您的 mailto 链接可能无法正常工作。 Outlook 将简单地拒绝用逗号分隔电子邮件地址。

    只是需要记住的一点。

    【讨论】:

      【解决方案4】:

      使用以下代码,

      implode(',', $contacts);
      

      以上代码将给出逗号分隔的电子邮件。

      【讨论】:

      • 我用过$mem_email.=$contact['email_address'].", ";,效果很好,
      • 我使用了$mem_email.=$contact['email_address'].",";,效果很好。 implode(',', $contacts); 有什么额外的好处吗??
      • mansoor,在您的版本中,您的连接电子邮件地址字符串将有一个尾随逗号,但使用 implode 只会在地址之间放置一个逗号,而不是在末尾。除此之外,它纯粹是美学的——更简单的代码看起来更好,更容易理解,但最终取决于你——优化中的微小差异在这种情况下不会有任何区别。
      • 继我上一条评论之后,内爆不会检查数组中的空值或空值,因此如果您要这样做,您需要在内爆之前使用 array_filter()。
      猜你喜欢
      • 2013-06-29
      • 2014-12-05
      • 2011-10-24
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 2017-10-30
      • 2014-02-11
      • 1970-01-01
      相关资源
      最近更新 更多