email - 为什么发送电子邮件需要多个邮件服务器跃点?

标签 email networking xmpp network-protocols

当我向某人发送电子邮件时,(我认为)我的电子邮件被发送到我的主服务器,然后该电子邮件被发送到目标服务器,最后发送给我想要发送给的人。

有时,这需要多次跳跃,这让我感到困惑。为什么这需要多跳?为什么邮件不能直接发送到目标服务器?例如,XMPP 不需要多跳。

最佳答案

典型的电子邮件交易使用出站邮件服务器,它会查找收件人的传入服务器,将其发送到那里,然后该服务器将其交给收件人的邮箱服务器。这是 3 跳:

SMTP→IMAP mailflow

当您发送消息时,您从电子邮件客户端(更准确地说:邮件用户代理,MUA)连接到出站 SMTP服务器。这是第一个跃点,您的 SMTP 服务器会创建一个 Received header 表示稍后进行审计。这将包括它看到您连接的 IP、该特定服务器内部的消息 ID,有时还包括一些其他信息。

然后,您的出站 SMTP 服务器在 DNS 中查找每个收件人域的 MX(邮件交换)记录,并连接到它可以找到的最高优先级中继(数字上最低的 MX 优先级)。这是第二跳。与任何跃点一样,Received添加了标题。

MX 中继通常执行反垃圾邮件过滤,可能会在 SMTP 连接期间拒绝邮件。这就是生成退回邮件的原因,您的出站 SMTP 服务器直接将其发送给您(如果它通过 Internet 发送,则有可能是 backscatter,一种垃圾邮件形式,因为无法证明退回邮件是合法的)。通常,反垃圾邮件过滤是在稍后完成的,并且消息会被静默丢弃或以标记方式传送。

然后 MX 中继在内部将消息传递到您的邮箱 (IMAP/Exchange) 服务器(跃点 #3)。有时,本地邮箱服务器过滤器用于处理模式(或来自 MX 服务器的标记)并促进各种操作,例如将可疑垃圾邮件归档到您的垃圾文件夹中。

如果您使用邮件转发服务,MX 中继会将您的邮件传递到转发目标(另一个 MX 中继)。这理论上可以持续很长时间甚至无限循环,但它最终应该在邮箱服务器中结束。

另请参阅正式的 SMTP 规范,RFC 5321 .

如果您使用网络邮件,网络邮件服务器就是您的电子邮件客户端。一些网络邮件服务器添加类似于 Received 的标题头来跟踪连接,因此垃圾邮件过滤器可以将他们的信誉检查扩展到用户而不是网络邮件系统,这可以被描述为另一个跳跃。

在企业级环境中,多层服务器用于各种目的是很常见的。这些额外的跃点发生在 MX 中继和邮箱服务器之间,可能与额外的反垃圾邮件或反病毒处理、高级邮件别名、电子邮件归档、校园之间的内部邮件路由或任何数量的其他事情有关。例如,这些可以简化从一个邮件系统到另一个邮件系统的转换(例如在 Exchange 版本之间迁移,这可能需要大量测试和缓慢迁移,因此问题不会影响整个公司)。

关于email - 为什么发送电子邮件需要多个邮件服务器跃点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11182990/

相关文章:

python - 算法检测数据语料库中的重复/相似字符串——比如 Python 中的电子邮件主题

PHP Mailer SMTP 连接在 GoDaddy 服务器上被拒绝

django - 使用 Socket IO(或 Strophe.js)、XMPP 和 Django 进行实时服务器推送

python - 如何使用 MsgWaitForMultipleObjects 可靠地检测断开的 TCP 套接字?

c# - RDM 套接字

ubuntu - Ejabberd:安装期间的故障转储

java - 在带有 aSmack 的 XMPP 中使用 UserSearch 时,getSearchForm 返回 null

php - 从本地主机发送电子邮件

linux - 电子邮件中的所有行一起运行

c++ - 网络数据包创建/解析库?