我正在向以下收件人发送电子邮件:
test@example.com, test1@test.com,test2@test.com
该消息被发送到我的本地 smtp 服务器,该服务器必须将其中继到@example.com和@test.com。
我的问题是:服务器应该如何做?
保留消息原样并将其转发到更复杂的 smtp 服务器,该服务器将执行其他选项之一
将其分成两条消息,并将一条消息转发给@example,将另外两条消息转发给@test.com一条消息
将其分成三个消息并转发一次 to@example.com和两次 to@test.com
例如,接收服务器如何@example.com知道它不应该@test.com自己发送消息?(有邮件标题吗?)
如果@example.com和@test.com由同一台服务器提供服务,它会多次收到消息吗?
我可能遗漏了 SMTP 协议中的某些内容。
信封(RFC822 及更多)只是外部边界。有趣的事情发生在 ESMTP 协议中。
就普通 SMTP 而言,每个收件人 (RCPT TO) 都会在发件箱队列中启动一封新邮件 - 每个收件人一个。然后,它被交付。
现在让我们谈谈交付:假设我要求交付到 user@host.com。下面是它的工作原理:
在 DNS 上查询 host.com 地址,特别是 MX(邮件交换器)类型的记录。(nslookup -q=MX 应该告诉你它是如何完成的)
它们被排序(最小的数字在前),并使用这种排序在循环的基础上尝试交付。
当它被传送到任何 MX 记录主机时,就完成了。然而,存在多个 MX 主机的原因是因为例如在中断时需要对邮件进行排队。因此,更高的 MX 主机可能只是排队,而不让原始主机服务器反弹和过期消息(这就是当消息卡在给定主机上时会发生的情况 - 您可以通过其标头跟踪它)
每个服务器都有自己的传送规则,但是,当您转发到尝试在 MX 目标上传送自身的主机时,我们将其称为智能主机。主机知道是否应该排队等待另一台主机(中继)或通过 SMTP 问候语 (HELO) 进行本地传送。
另外:单个 SMTP 连接将允许您发送多封邮件,因此即使您必须向收件人发送邮件,也只会发生一个连接(尽管邮件队列中有两封邮件)