哪些端口专门用于电子邮件通信中的哪些目的?

Which ports are used for which purpose specifically in email communication?

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

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

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

受到上述容器 exposed-port explanation 的鼓舞,我现在认为整个检索、提交和传输过程的工作方式(极其简化)如下:

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

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

然后收件人在 143993 端口上从 his/her 邮件服务器(假设使用 IMAP/s)接收电子邮件,并相应地在 his/her 邮件客户端.

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

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

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

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

  • 端口 465,SMTPS(smtp-secure,类比 https)在技术上已被弃用,但被广泛使用。它用于 TLS 上的 SMTP,其中连接在连接后立即加密直到终止。
  • 端口 587,submission 通常与 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 隧道传输的自定义协议,或 public GMAIL REST 协议。如果您使用的是 Microsoft,他们至少有 3 种电子邮件协议:Exchange ActiveSync、Exchange Web Services 和 Microsoft Graph/Outlook MAIL Rest API,全部使用 HTTPS。