这更像是一个网络管理问题,而不是一个编程问题,因此可能被认为是题外话。话虽如此:
SMTP 协议用于两个不同但相似的目的:消息提交和消息传输。
消息提交由MSA
消息提交代理完成,通常代表最终用户,但也可能代表脚本或进程。传统上,这些客户端是 Thunderbird、Apple Mail 或手机上的电子邮件客户端。在现代实践中,这通常是通过身份验证(使用用户凭据)并在端口 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 隧道传输的自定义协议或公共 GMAIL REST 协议。如果您使用的是 Microsoft,他们有不少于 3 个电子邮件协议:Exchange ActiveSync、Exchange Web Services 和 Microsoft Graph/Outlook MAIL Rest API,它们都使用 HTTPS。