邮件客户端如何选择SMTP端口

3,134 阅读8分钟

喜欢折腾的朋友应该都倾向于自己配置邮件客户端,而不是使用邮件服务商提供的App或者网页端。
自己配置邮件客户端的好处我就不多说了,这里主要说一下配置SMTP需要注意的问题。
配置POP3和IMAP相对简单,选择安全端口就好,而SMTP的情况就复杂得多了,我们从头说起。

什么是SMTP

简单邮件传输协议(Simple Mail Transfer Protocol,SMTP)是一种用于电子邮件传输的通信协议。作为Internet标准,SMTP由RFC 821于1982年首次定义,是当今广泛使用的协议种类。邮件服务器和其他邮件传输代理使用SMTP发送和接收邮件。SMTP服务器通常在端口号25上使用传输控制协议(TCP)。

邮件的传输过程大致如图:

  1. 客户端A通过SMTP将邮件提交到邮件服务器B(发件箱)
  2. 邮件服务器B通过SMTP将邮件传输到邮件服务器C(收件箱)
  3. 客户端D通过POP3或者IMAP将邮件从邮件服务器C取回

需要注意的是,整个电子邮件传输过程中只有SMTP是必须的,邮件的发送和接收都使用SMTP,而不是“SMTP用于发送邮件,POP3或IMAP用于接收邮件”。POP3和IMAP仅用于从邮件服务器访问已经接收到的邮件。

邮件提交(即过程A - B)和邮件取回(即过程C - D)也可以在网页端完成,则不需要SMTP或IMAP,而是HTTP。当然,如果把邮件服务器架在本地,连HTTP都不需要了。

邮件服务器之间使用SMTP在端口25上传输邮件,邮件服务器B和邮件服务器C并不一定直接连接,也可能有其他邮件中继服务器,他们之间也使用SMTP在端口25上传输邮件。

SMTP历史

为什么要说一大段历史?

因为了解了历史,才能对当前的情况有清晰的认识,才能作出合理的决定。

跟其他网络服务一样,SMTP也有许多历史性问题,而且更甚。这导致了SMTP端口的复杂情况,以及配置邮件客户端和服务器的各种困惑。

RFC 821于1982年定义了SMTP,并指定使用端口25进行邮件传输。

早期的SMTP使用明文传输,同样使用明文传输的如FTP和HTTP。这种明文传输存在巨大的安全隐患。

早期的SMTP也不需要身份验证,因为早期的SMTP服务器一般位于公司或学校内部,接收内部用户的邮件并发送到外部邮件服务器,每个SMTP服务器只对有限的受信任用户提供服务(如:从终端登录到学校的Unix系统,写了一封邮件并调用此系统的邮件服务发送邮件,在登录的过程中已经输入了用户名和密码,所以提交邮件不再需要身份验证)。随着SMTP服务器面向大众,以及万维网的迅速发展,情况变得严重起来,提交邮件无需验证将导致垃圾邮件泛滥。

针对安全问题,互联网数字分配机构(Internet Assigned Numbers Authority,IANA)于1997年为smtps服务注册了465端口,应用程序可以在这个端口上提交邮件,并使用SSL(TLS的前身)加密。

RFC 2476于1998年发布,它将SMTP的消息提交和邮件传输分开,邮件传输仍使用端口25,而消息提交使用端口587。消息提交的端口标准化以后,IANA也于1998年撤销了smtps服务的465端口,并在之后把465端口分配给了其他服务。

RFC 2487于1999年1月发布,提出了STARTTLS机制,允许邮件客户端与邮件服务器在建立连接后,通过STARTTLS命令启动TLS加密,为邮件提交提供安全环境。

RFC 2554于1999年3月发布,提出了SMTP的身份验证机制,邮件服务器可以设置不同的验证方式,只有通过验证的用户才可以提交邮件。

在端口465被撤销之后,出于安全考虑,很多邮件服务器仍然使用端口465进行邮件提交,而RFC 2487RFC 2554在同一年分别提供了安全加密和身份验证,465端口已经没有了使用的必要。

而历史问题的复杂性就在于,尽管465端口已经不再被任何标准或者权威机构承认,很多邮件服务器为了兼容老旧的应用程序或者顽固的配置人员,还是使用465端口进行邮件提交。他们甚至建议使用465端口,而对587端口只字不提(虽然他们也支持587端口)。同样地,尽管消息提交和邮件传输已经分开,很多邮件服务器仍然允许使用端口25提交邮件。由于对STARTTLS安全性的怀疑,STARTTLS也没有得到普及。

20年后,虽然大多数邮件服务器都同时支持这3个端口,但主流的配置还是使用465端口,RFC也最终妥协。2018年,RFC 8314发布,将465端口定为邮件提交端口,隐式开启TLS,并建议从587端口转移到465端口。

SMTP端口

端口25

自从RFC 821定义SMTP以来,端口25就是SMTP使用的端口。然而消息提交和邮件传输分开以后,端口25就仅用于邮件服务器之间的邮件传输。虽然大部分邮件服务器还允许使用端口25提交邮件,但这不是规范行为。为了防止垃圾邮件泛滥,很多网络服务提供商禁用了端口25,仅对认证的邮件服务器开放,如果使用端口25提交邮件可能会遇到无法连接的情况。端口25默认使用明文传输,可以手动开启STARTTLS加密。

端口465

端口465曾短暂地用于消息提交,在1997年由IANA注册,并在第二年RFC 2476发布以后被撤销。尽管不再被互联网标准和权威机构承认,很多邮件服务器仍使用这个端口提交邮件,并建议用户使用这个端口。2018年RFC 8314正式将端口465定为邮件提交端口,并建议从端口587转移到端口465。端口465默认开启TLS加密。

端口587

1998年RFC 2476发布,将消息提交和邮件传输分开,自此端口587就是标准的邮件提交端口。虽然很多邮件服务器建议使用端口465,但是也基本都支持标准端口587。2018年RFC 8314将端口465定为邮件提交端口,并建议在数年内从端口587转移到端口465,在此期间端口465和端口587都是符合标准的邮件提交端口。端口587默认使用明文传输,可以手动开启STARTTLS加密。

此外有些地方还提到了端口2525,这个端口从来没有被RFC或者IANA承认,仅仅是某些邮件服务器使用的备用端口。经测试QQ邮箱并不支持端口2525,可见这个端口的使用并不广泛,所以没有介绍它的必要。

总结

首先应该明确的是,邮件服务器之间传输邮件只使用端口25,我们这里选择的端口只用于邮件提交。示例图如下:

端口25不是标准规定的邮件提交端口,而且可能受到网络服务提供商的封禁,所以首先从我们的选择列表中排除。

按照最新的RFC标准,端口465和端口587都是合法的邮件提交端口,且RFC标准建议从端口587转移到端口465。不过根据历史经验,这个转移过程不会快速推进,而且即使转移完成,为了兼容性邮件服务器依然会保留端口587,就像今天还保留着端口25一样。

很多网络服务以所谓的“防止垃圾邮件泛滥”的名义禁用了邮件传输端口25,甚至连用于邮件提交的端口465也被禁用,这个现象在网络代理服务尤其严重。不过他们经常会忽略不那么为人所知的端口587,所以如果你配置GMail的SMTP无法使用,尝试换成端口587。

综上,端口587是最合适的端口,既是标准规定的端口,有广泛的支持,也能在端口转移期间防止个别邮件服务器不支持端口465,而且能避开网络服务提供商的端口封禁。同时,一定要开启STARTTLS保证邮件安全。