1

我知道在使用电子邮件服务器时有几个选项可供选择。例如,25 和 587 用于选择加入加密,465 用于强制加密。

docker-mailserver是一个流行的 docker 邮件服务器容器,它描述了端口587465143993特别是提交和检索端口。实际的服务器到服务器的通信显然是使用双方的端口 25 建立的。这是一个常见的实现吗?

到目前为止,我的理解是,实际通信(用于外发电子邮件)是通过端口 587 或 465 完成的。

受到上述容器的暴露端口解释的鼓舞,我现在认为整个检索、提交和传输过程是这样工作的(非常简化):

使用端口25465587从客户端发送电子邮件到传输邮件服务器。

发送邮件服务器通过端口将电子邮件发送25到收件人邮件服务器。

然后收件人在端口上143993从他/她的邮件服务器(假设使用 IMAP/s)接收电子邮件,并在他/她的邮件客户端中相应地显示它。

这个对吗?如果是这样,是否甚至可以从 ISP 阻止端口 25 的邮件服务器发送电子邮件,而 GMail、Yahoo 等普通邮件服务的用户可以接收?

4

1 回答 1

3

这更像是一个网络管理问题,而不是一个编程问题,因此可能被认为是题外话。话虽如此:

SMTP 协议用于两个不同但相似的目的:消息提交和消息传输。

消息提交MSA消息提交代理完成,通常代表最终用户,但也可能代表脚本或进程。传统上,这些客户端是 Thunderbird、Apple Mail 或手机上的电子邮件客户端。在现代实践中,这通常是通过身份验证(使用用户凭据)并在端口 465 或 587 上加密完成的。

  • 端口 465 SMTPS(smtp-secure,类似于 https)在技术上已被弃用,但被广泛使用。它用于基于 TLS 的 SMTP,其中连接在连接后立即加密,直到终止。
  • 端口 587submission通常与 一起使用STARTTLS,其中连接首先是未加密的,但此后不久使用特殊命令进行升级。

这两个端口通常都接受来自具有凭据的用户发往任何目的地的邮件,并将为用户保存和转发这些邮件。例如,如果您在端口 465 或 587 上连接到 smtp.gmail.com,并以 user@gmail.com 身份验证,它将允许您为任何人提交电子邮件,只要它来自 user@gmail.com。

消息传输MTA消息传输代理完成,通常代表站点或服务的所有用户。中继是在端口 25 上的站点之间完成的,并带有可选的 STARTTLS 加密。通常不进行身份验证,但通常在幕后使用复杂的信誉跟踪、防火墙和黑名单系统。通常,此端口只接受特定站点的邮件。例如,如果您在端口 25 上连接到 gmail.com 的 MX 服务器(例如,撰写本文时的 gmail-smtp-in.l.google.com),并且它认为您是一个值得信赖的 IP,它将接受来自任何人的邮件到任何 gmail 地址(需进一步扫描)。它将拒绝转发给异地的任何人。

消息检索通常通过IMAP端口 143(使用 STARTTLS)或 993(使用来自连接的 TLS)完成。这是最终用户(通常)用来检索 MTA 代表他们持有的电子邮件的拉取服务。一些站点也使用 POP3(在 110 和 995 上),但它的功能要差得多。

传统上,提交和传输都在端口 25 上完成,无需身份验证,但这在现代互联网上是行不通的。它分为传输和提交,以便更好地控制网络资源。正如您可能已经发现的那样,许多 ISP 和云服务限制端口 25,因此最终用户在未经他们同意的情况下不能充当传输器,因此中继通过他们的服务器或其他负责的服务进行。

这样一来,通过这种模式,gmail用户一般只能通过gmail的提交服务器提交,其他用户必须通过自己的服务服务器提交,垃圾邮件发送者不能随便在任何地方设置服务器来向gmail发送消息。如果他们这样做并且他们的 ISP 没有对其进行防火墙保护,他们的声誉很快就会被破坏并被列入许多黑名单。

此外,很多这种情况甚至不再发生在传统协议上。如果您使用 Google 服务和客户端,您可能会使用通过 HTTPS 隧道传输的自定义协议或公共 GMAIL REST 协议。如果您使用的是 Microsoft,他们有不少于 3 个电子邮件协议:Exchange ActiveSync、Exchange Web Services 和 Microsoft Graph/Outlook MAIL Rest API,它们都使用 HTTPS。

于 2020-05-03T19:51:03.650 回答