35

我正在使用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}"); 

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

就我而言,我正在使用,.

4

4 回答 4

46

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

请参阅RFC 6068

于 2012-08-25T07:52:32.550 回答
14

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

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

只是要记住的事情。

于 2014-07-04T09:22:53.903 回答
1

使用以下代码,

implode(',', $contacts);

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

于 2012-08-25T08:40:41.253 回答
1

TLDR 解决方案

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

RFC6068:“mailto”URI 方案(2010 年 10 月发布)只是一个提议的标准它不是一个公认的 Internet 标准。 它也没有讨论逗号分隔。

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”、“Cc”或“Bcc”,后跟一个或多个地址的逗号分隔列表(邮箱或组语法)。

to              =   "To:" address-list CRLF

cc              =   "Cc:" address-list CRLF

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

该提议标准于 2008 年 10 月被接受为标准草案,其中包含RFC5322:Internet 消息格式。我会在那里引用文本,但他们决定保持原样。2013 年 3 月提出了更新,使用RFC6854:更新到 Internet 消息格式以允许组语法...:您不应该在Sender字段中允许逗号分隔值,因为这样就不确定谁真正触发了发送 e-邮件。引用这个 RFC,RFC6854...

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

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

于 2021-02-10T16:08:49.550 回答