我了解到,发件人地址和收件人地址都在称为“信封”的隐藏元素中重复,然后在“正文”中再次重复。
问题
- 为什么信封数据没有复制到“标题”中?
- 为什么存在这种重复,为什么不能将必要的特征嵌入到消息本身中?
- 所有(非 SMTP)消息传输都这样做吗?
- 有哪些 SMTP 的替代方案?(这样我就能更好地理解其中的原因)
答案1
电子邮件消息头中的地址与信封发件人和收件人的用途不同(实际上并非隐藏本身,它们只是不是消息的一部分)。
信封发件人和收件人(您在邮件中看不到)是 SMTP 协议的一部分,用于指定交货指示,即邮件服务器应将邮件投递到哪个邮箱,或者在发生故障时将邮件返回到哪里。这两个地址都不需要与邮件的语义内容有任何关系。这些内容在RFC 5321第 4.1.1.2 和 4.1.1.3 节。
从逻辑上讲,这些类似于印刷在邮件信封上的地址。
消息本身中出现的发送者和目标地址表示语义含义,而不是明确的传递指令。这些内容在RFC 5322第 3.6.3 节和RFC 6854第 2.1 节(取代了 RFC 5322 第 3.6.2 节)。
简而言之,邮件中的 From: 表示撰写邮件的人的邮箱,Sender: 表示代表其他人发送邮件的实体,To: 和 Cc: 表示预期收件人的邮箱。RFC 还定义了您可能感兴趣的其他标头字段。
从逻辑上讲,这些类似于邮件内信件上印刷的地址。
通常,信封的发件人和收件人与发件人地址和收件人地址相同。但他们之间完全没有对应关系的情况也很常见,例如在邮件列表中。
答案2
最常见的看到差异的情况是在向多个收件人发送电子邮件时。
假设您要发送一封电子邮件至:
当您的邮件客户端将电子邮件发送到您的邮件服务器时,所有三个地址将在信封和标题上重复。接下来,您的邮件服务器将查找 MX 记录并example.com
继续example.net
投递。
您的邮件服务器现在将与每个接收服务器建立两个单独的 SMTP 连接,以进一步发送电子邮件。
与 MX 通信时,example.com
所有三个接收器仍将在To
标头中,但只有一个信封接收器。
与 MX 通信时,example.net
所有三个接收器仍将在To
报头中,但只有两个信封接收器。
与上述情况类似,想象一下你打印了一封信的三份副本,纸上写有三个收件人。然后你将这三张纸放入三个不同的信封中,每个信封上只写一个地址。
在其他情况下也会有所不同,例如使用bcc
和转发电子邮件时。
打个比方,假设你正在与某个实体交换信件。你对那个实体不知情,复印了每封信,然后将其放在一个写有你律师地址的信封里。