![由于使用通讯组列表时感知到的标头语法错误,来自各种基于 Linux 的系统拒绝的电子邮件](https://linux22.com/image/231069/%E7%94%B1%E4%BA%8E%E4%BD%BF%E7%94%A8%E9%80%9A%E8%AE%AF%E7%BB%84%E5%88%97%E8%A1%A8%E6%97%B6%E6%84%9F%E7%9F%A5%E5%88%B0%E7%9A%84%E6%A0%87%E5%A4%B4%E8%AF%AD%E6%B3%95%E9%94%99%E8%AF%AF%EF%BC%8C%E6%9D%A5%E8%87%AA%E5%90%84%E7%A7%8D%E5%9F%BA%E4%BA%8E%20Linux%20%E7%9A%84%E7%B3%BB%E7%BB%9F%E6%8B%92%E7%BB%9D%E7%9A%84%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6.png)
我错过了什么...
给出:基于 Linux 堆栈的电子邮件服务器系统(托管),带有 Webmail 组件。各种各样的电子邮件客户端和其他网络邮件系统涉及并对此进行了测试。
我们使用网络邮件客户端通过分发列表分发电子邮件。邮件系统发送类似于以下示例的电子邮件(从源电子邮件标头复制)。organisation
通讯组列表的名称在哪里:
Date: Sat, 20 Apr 2024 18:35:45 +0200
Message-ID: <[email protected]>
From: [email protected]
To: organisation: [email protected], [email protected];
Subject: here goes the subject
到目前为止,一切顺利,电子邮件发送正常(甚至发送到 GMX 邮箱),并且没有收到“无法发送的电子邮件”消息。
问题
接下来,从某些电子邮件客户端或网络邮件系统(例如 GMX 网络邮件)回复“所有人”会导致明显错误的标头(而使用例如 Thunderbird 会产生正确的格式)。这些回复会被某些系统拒绝;消息示例:
您的电子邮件已被我们的邮件系统拒绝,因为电子邮件标头中提供的信息不符合 RFC 5322 和 RFC 2047 中的规范。标头字段“收件人”在语法上不正确。
有问题的电子邮件标题如下所示(请特别注意“To:”行):
Received: from ...
Reply-To: ...
From: <[email protected]>
To: <[email protected]>, <organisation: [email protected]>;
References: <[email protected]>
In-Reply-To: <[email protected]>
Subject: AW: here goes the subject
显然,某些邮件客户端将提供的通讯组列表名称解释为第一个收件人的电子邮件地址的一部分。
目前的问题是:(1)谁是罪魁祸首? (2)正确的格式是什么? (3) 分发原始消息的服务器是否未遵循某些 RFC,或者这是邮件客户端或邮件系统中的故障?
=====最后修改=====
这显然是部落的一个错误。票提出了。
答案1
(这可能是错误的,但保持原样,因为下面有一些有用的讨论)
其中,组织是通讯组列表的名称:
无论生成原始电子邮件的是什么,这里都有问题。邮箱名称(@domain 之前的位)可以包含空格、@ 字符和各种其他奇怪的东西。因此,转发正确地将 To: 标头中的第一个条目解释为“组织:[电子邮件受保护]”。
我需要进行大量阅读才能确定显式空格是否需要引用或转义(邮箱名称中的“@”字符需要)。因此,我无法告诉您声称这不符合 RFC 的错误是否准确 - 但是这一点没有实际意义,因为即使不需要,这也不是您想要的行为。
答案2
RFC 5322是组地址的当前规范。它们在附录 A.1.3 中进行了解释,其中写道:
From: Pete <[email protected]> To: A Group:Ed Jones <[email protected]>,[email protected],John <[email protected]>; […]
在此消息中,该
To:
字段有一个名为“的组收件人”一个小组”,其中包含 3 个地址 [...]
地址规范在第 3.4 节中正式定义,从这里我将只挑选相关部分:
3.4.地址规范
地址可以是单个邮箱,也可以是一组邮箱。
group = display-name ":" [group-list] ";" [CFWS] group-list = mailbox-list / CFWS mailbox-list = (mailbox *("," mailbox)) mailbox = name-addr / addr-spec name-addr = [display-name] angle-addr angle-addr = [CFWS] "<" addr-spec ">" [CFWS]
和
3.4.1.地址规格规范
addr-spec 是一个特定的 Internet 标识符,包含本地解释的字符串,后跟 at 符号(“@”,ASCII 值 64),最后是 Internet 域。 [...] 注释和折叠空格不应在地址规范中的“@”周围使用。
addr-spec = local-part "@" domain local-part = dot-atom / quoted-string domain = dot-atom / domain-literal
和
3.2.3.原子
dot-atom = [CFWS] dot-atom-text [CFWS]
我在这里省略了obs-*
RFC 5322 正式规范中存在的条目,因为它们引用了过时的模式。CFWS
表示允许注释和/或折叠空白。
因此,这两种格式都应被以下定义所接受group-list
:
A Group:Ed Jones <[email protected]>,[email protected],John <[email protected]>;
A Bare Group:[email protected],[email protected],[email protected];
将这种解释应用到您自己的组列表中,我想说您所拥有的内容是有效的:
To: organisation: [email protected], [email protected];
因此,有问题的是接收系统。 (或者是具有积极标头重写的中间系统。如果您通过防火墙设备发送电子邮件,或者您的客户通过防火墙设备接收电子邮件,我会检查这一点。)