东哥一直使用阿里邮箱发送通知邮件、在更换新账号之后,发现发送报错的情况,排查之后从以下几点入手排查。
SMTP三方客户端权限开关
登录管理员账号,在安全管理》账号安全策略里面,允许使用第三方客户端
,同时关闭强制启用安全密码
的功能,这样才能使用邮箱账号和邮箱密码发信
检查端口
更换服务器之后,通过SMTP请求阿里云邮箱,之前邮件发送正常,现在发送超时失败了,代码明明没更新。
通过查询阿里邮箱的官方文档:阿里邮箱IMAP、POP、SMTP地址和端口信息
使用时请注意端口是否已在您的本地电脑和网络中开放(由于安全原因,阿里云ECS默认封禁25端口)。
SMTP服务器的80和587端口未对所有IP开通。
推荐您使用加密端口连接,更加安全。
端口修改
因为很多代码库默认的端口是587
,而这个端口未对所有IP开通,所以需要修改成其他SMTP端口,未加密25
,加密465
端口。
加密协议
修改完端口,再看加密协议,加密协议之前用的STARTTLS
,这个和TLS
看着相似,但是有区别,对比一下就是下面这个区别
STARTTLS | TLS(Implicit TLS) | |
---|---|---|
概念 | STARTTLS 是一种升级协议,用于从未加密的连接升级为加密连接。 | TLS 是一种加密协议,通常用于直接建立加密连接。 |
工作原理 | 客户端首先建立未加密的连接(明文)。<br/>通过发送 STARTTLS 命令,告诉服务器开始加密。<br/>连接升级为加密状态,后续通信在加密通道中进行。 | 在使用 TLS 时,客户端与服务器的连接从一开始就是加密的。<br/>连接建立后,所有通信都在安全的 TLS 隧道中进行。 |
使用场景 | 常用于邮件传输协议(SMTP、IMAP、POP3),在非加密端口上升级连接。 | TLS 是一种加密协议,通常用于直接建立加密连接。 |
优点 | 可以在同一个端口上支持加密和非加密通信,兼容性较好。使用较少的端口号,更容易通过防火墙和网络设备。 | 连接安全性更高,因为从开始就是加密的。配置简单,客户端直接使用加密端口连接。 |
端口 | SMTP: 587 <br/>IMAP: 143 <br/>POP3: 110 | SMTP: 465 <br/>IMAP: 993 <br/>POP3: 995 |
所以587端口对应的是STARTTLS
协议,端口限制的话,加密协议也要顺便升级成tls协议。
示例
我使用的是VaporSMTPKit
,修改之后的配置代码
extension SMTPCredentials {
static var `default`: SMTPCredentials {
return SMTPCredentials(
hostname: "smtp.mxhichina.com",
port: 465,
ssl: .tls(configuration: .default),
email: "email@email.com", //替换为真实邮箱
password: "123321" //邮箱密码
)
}
}
这是阿里云邮箱对端口的限制原因,排查这两个关键性问题,现已可以正常发送。
版权属于:东哥笔记 - DongGe.org
本文链接:http://dongge.org/blog/1342.html
自2017年12月26日起,『转载以及大段采集进行后续编辑』须注明本文标题和链接!否则禁止所有转载和采集行为!