发送电子邮件时,发送/接收协议中是否有任何内容可以保证或应该保证接收电子邮件的任何人都会按照发件人输入的顺序看到To
和Cc
字段中的收件人列表?这确实是一个非常简单和基本的问题,但似乎不可能在 Google 上找到答案,它只想教我关于抄送老板的顺序的职场礼仪。
这个老问题提到同一封电子邮件在不同的客户端上会以不同的顺序显示收件人,这可能表明各种电子邮件协议中没有任何内容可以保证在任何地方都保持原始顺序(因此,你抄送给老板的顺序并不重要,因为你无法控制他们看到的顺序)——或者它可能只是电子邮件客户端的一个软件错误。
那么实际的协议和标准是怎么说的(请用合理、人性化的术语来说)?邮件客户端是否可以自由地以他们喜欢的任何顺序显示收件人(以及抄送收件人),还是应该将发件人输入的顺序视为法律并坚持这一顺序?
更新
正如 Tonny 和 R.. Github 在他们的回答中指出的那样,实际的 SMTP 协议当然只是一种传输信息的协议。因此,它并不真正关心它传输的数据的内容,就像 HTTP 不关心它传输的 HTML 内容一样。因此,对于实际的 SMTP 协议是否协议本身保证任何事情显然是没有的。
在 HTTP 和 HTML 并行的情况下,整个传输还有另一层,独立于 HTTP 协议本身:W3C 标准规定如何用户代理(= 浏览器)必须向用户呈现实际内容;不符合这些标准的 UA 是不合规的。然而,即使在这些标准中,有些事情也完全由 UA 决定,并且不能保证以特定方式呈现特定内容。
当提到上面的“协议”时,我的意图是也包括这样的标准——任何规定从发件人在其 MUA 中点击“发送”到收件人在其 MUA 中看到电子邮件之间发生的事情。
任何接触过 HTML 电子邮件的人都知道,电子邮件正文内容显然不存在这样的标准(或者即使存在,MUA 也完全无视这些标准)。但收件人并不是邮件实际正文的一部分,因此他们向用户呈现的内容可能受完全不同的标准的制约。
因此,除了实际的 SMTP 协议本身之外,我真正想知道的是,是否存在任何标准/规定控制 MUA 如何处理和向用户呈现收件人。即:
- 发送 MUA 是否可以在生成标头并启动 SMTP 连接之前自由地重新排序 UI 中
To:
和字段中显示的内容?CC:
- 接收方 MUA 是否可以随意以任何其喜欢的方式为 UI 生成(CC)收件人列表,并按照其想要的任何方式进行排序?
- 或者有某种“法律”规定 MUA不是为了保持合规性,可以自由地这样做吗?
答案1
是的,除非参与运送的某个人做了可疑的事情。
电子邮件消息中标头字段的原始内容来自发件人的 MUA(邮件用户代理,即邮件软件)。它技术上可行对于处理邮件的中介系统来说,修改邮件是可以的,但这违反了预期,甚至违反了正式的协议标准,而且,如果涉及到 DKIM,在发送网站的邮件系统使用 DKIM 密钥对邮件头进行签名后的任何阶段执行此操作都会导致签名不匹配。通常,处理转发邮件的中介系统将前置标头(Received:
、DKIM 签名、垃圾邮件可能性分数等)添加到邮件中,而不是修改现有的。
请注意,电子邮件中的To:
和标题仅供参考;它们是Cc:
不属于机制的一部分邮件如何投递给正确的一方。相反,当您的 MUA 通过 SMTP 将邮件提交到您的邮件提供商的提交端口时,命令会RCPT TO
指定应将其投递到的地址。MUA 通常从标头中派生出这些地址,但不必这样做(在 的情况下Bcc:
,它们派生自的标头在发送之前已被剥离)。
为了解决更新针对这个问题:我不知道有任何“法律”来规定 MUA 必须做什么,即使有,许多流行的现有 MUA 违反正常期望/礼仪的程度(例如,隐藏电子邮件地址并仅显示未经身份验证的姓名、文本重排不当等)让我说无论如何你都不能相信它们会遵守这样的“法律”。如果你想知道特定发件人的 MUA 是否可能对收件人的排序与发件人编写/选择的方式不同,或者特定收件人的 MUA 是否可能对收件人的排序与邮件中的顺序不同,你真的需要知道他们正在使用什么特定软件并检查该软件的行为。
不管怎样,我不记得曾经见过这样的重新排序,但在所有的 MUA 中,我只使用/观察过极少数的 MUA,所以有可能有些 MUA 会重新排序。
答案2
我研究 SMTP 协议规范已经有几年了,但据我所知,其中没有任何内容规定要保持这种顺序。
据我所知,SMTP 协议仅规定了消息格式以及该格式中的强制和可选字段。它确实提供了一些关于强制字段发送顺序的指导,但对于具有多个值的字段(如收件人),它只说明了这些字段的格式。它并没有说该字段中多个值的顺序很重要或应该保留。
任何接收和转发电子邮件的邮件服务器/中继都可以自由地在以它喜欢的任何格式发送之前临时存储该电子邮件,并在进一步传输时根据需要重建 SMTP 消息。
如果它对收件人列表进行任何类型的排序,则可能会改变顺序。发送和接收邮件客户端也可以以任何方式处理此问题。
发送客户端可以在创建 SMTP 消息之前重新排序您输入的内容,接收邮件客户端可以在接收时重新排列,然后再向您显示。
发送/接收协议与这些都无关。
它只关心正确格式化的 SMTP 消息。
协议的工作不是关心其上方的应用层如何处理该消息。
答案3
发送 MUA 是否可以在生成标头并启动 SMTP 连接之前自由地重新排序 UI 中“收件人:”和“抄送:”字段中显示的内容?
没有规范规定 MUA必须维护秩序。相反,有人建议 MUA应该按域名排序可提高投递效率,类似于邮局先按邮政编码对邮件进行排序,然后再按地址进行排序。当然,SMTP 的智能实现可能无论如何都会这样做以提高效率,但早期的建议是让 MUA 这样做以“帮助”服务器提高效率。
接收邮件的 MUA 是否可以随心所欲地生成 UI 的 (CC) 收件人列表,并按其想要的方式排序?或者是否存在某种“法律”规定 MUA 不能随意这样做,以保持合规性?
没有关于 MUA 的具体规范。当然,凭借数十年的经验,大多数 MUA 目前都大体相同,因此事实上标准做法是做其他人似乎都在做的事情,即不对收件人和抄送字段进行排序。当然,由于没有规范,MUA 没有理由不能做其他事情,无论是默认还是作为切换选项,例如按域、按本地名称、按两者或按显示名称排序等。
答案4
BCC 不是已发送电子邮件的一部分,因此收件人看不到其顺序。
收件人:和抄送:是电子邮件标题,因此通常是不可改变的,因此它们对于电子邮件的发件人和所有收件人都具有相同的内容(包括相同的地址、相同的顺序和相同的名称)。
SMTP 本身处理与 CC: 和 To: 完全分开的收件人列表,但大多数邮件用户代理使列表成为 To: CC: 和 BCC: 的并集(后者被 MUA 剥离。)
MUA 可以以任何他们认为合适的方式隐藏、修改或混淆这些信息。