什么是分隔多个电子邮件的最佳分隔符

时间:2012-08-25 07:48:39

标签: php email bcc

我使用mailto链接填充用户默认电子邮件程序的密送。

$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}"); 

我的问题是在密件抄送字段中分隔多个电子邮件的最佳分隔符是什么   , 要么 ;

就我而言,我正在使用','。

4 个答案:

答案 0 :(得分:29)

分隔符应该是逗号(,),并且不应该有空格。

请参阅RFC 6068

答案 1 :(得分:9)

如果有人需要,这是一个迟到的警告:

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

要记住一些事情。

答案 2 :(得分:1)

使用以下代码

implode(',', $contacts);

上面的代码会给逗号分隔的电子邮件。

答案 3 :(得分:0)

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 月发布)。今后,建议使用 ,

来源

引用 2001 年 4 月发布的原始提议标准 RFC2822: Internet Message Format...

<块引用>

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 节。发起人字段

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