【问题标题】:Sending mail with SMTP to multiple addresses: relaying the message to different servers?使用 SMTP 向多个地址发送邮件:将邮件中继到不同的服务器?
【发布时间】:2010-09-01 17:27:23
【问题描述】:

我正在向以下收件人发送电子邮件: test@example.comtest1@test.comtest2@test.com

消息被发送到我的本地 smtp 服务器,该服务器必须将其中继到 @example.com@test.com

我的问题是:服务器应该怎么做?

  • 保留消息原样并将其中继到更复杂的 smtp 服务器,该服务器将执行其他选项之一

  • 将其分成两条消息,并在一条消息中将一条消息转发给@example,将另外两条转发给@test.com

  • 将其分成三条消息,一次转发给@example.com,两次转发给@test.com

以及接收服务器,例如@example.com如何知道它不应该自己发送@test.com消息? (任何邮件标题?)

如果@example.com@test.com由同一个服务器服务,会不会多次收到消息?

我可能在 SMTP 协议中遗漏了一些东西。

【问题讨论】:

    标签: email smtp


    【解决方案1】:

    信封(RFC822 及更多)只是外部界限。乐趣发生在 ESMTP 协议中。

    就普通 SMTP 而言,每个收件人 (RCPT TO) 都会在发件箱队列中启动一封新邮件 - 每个收件人一个邮件。然后,它被交付。

    现在让我们谈谈交付:假设我要求交付给 user@host.com。以下是它的工作原理:

    在 DNS 上查询 host.com 地址,特别是 MX(邮件交换器)类型的记录。 (nslookup -q=MX 应该会告诉你它是如何完成的)

    它们被排序(最小的数字在前),并使用这种排序在循环的基础上尝试交付。

    当它被传送到任何 MX 记录主机时,它就完成了。但是,有多个 MX 主机的原因是例如在中断时需要排队邮件。因此,更高级别的 MX 主机可能只是排队,而不会让原始主机服务器反弹并使消息过期(当消息卡在给定主机上时会发生这种情况 - 您可以通过其标头跟踪它)

    每个服务器都有自己的传递规则,但是,当您转发到试图在 MX 目标上传递自身的主机时,我们称其为智能主机。主机知道它是否应该为另一台主机排队(中继)或通过 SMTP 问候 (HELO) 在本地传送。

    另外:单个 SMTP 连接将允许您发送多条消息,因此即使您必须发送给收件人,也只会发生一个连接(尽管邮件队列中有两条消息)

    【讨论】:

    • 我知道所有 MX 的东西,我的问题是“智能主机”如何知道如何处理消息?有没有默认配置?
    • 是的,有。检查来自 postfix 的设置,其中列出了 4 种邮件集线器配置文件:postfix.org/STANDARD_CONFIGURATION_README.html 一般而言,它保留了一个它应该接收电子邮件的域列表,既用于本地递送,也用于排队等待最终递送,或者只是智能中继.它也可以通过 SQL 后端进行管理。无论如何,我记得一件事:交付规则是邪恶的。 Postfix 尽力简化它,但如果您使用 sendmail.cf 示例,您会看到 GNU m4 中的恶意脚本只是为了处理此路由。
    • 我正在寻找的答案隐藏在原始答案的第二句中:SMTP 服务器不会读取邮件的收件人:抄送:或密件抄送:标题。 SMTP 客户端将提供 SMTP 服务器应在“RCPT”TO 行中接收消息的地址。
    • 还是第一段。事实是:邮件服务器从不读取信封 - 它只是将传递路线附加到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 1970-01-01
    • 2015-05-16
    • 2012-02-05
    • 2017-12-16
    • 1970-01-01
    相关资源
    最近更新 更多