东哥一直使用阿里邮箱发送通知邮件、在更换新账号之后,发现发送报错的情况,排查之后从以下几点入手排查。

SMTP三方客户端权限开关

登录管理员账号,在安全管理》账号安全策略里面,允许使用第三方客户端,同时关闭强制启用安全密码的功能,这样才能使用邮箱账号和邮箱密码发信

2024-12-18T02:11:17.png

检查端口

更换服务器之后,通过SMTP请求阿里云邮箱,之前邮件发送正常,现在发送超时失败了,代码明明没更新。

通过查询阿里邮箱的官方文档:阿里邮箱IMAP、POP、SMTP地址和端口信息

使用时请注意端口是否已在您的本地电脑和网络中开放(由于安全原因,阿里云ECS默认封禁25端口)。

SMTP服务器的80和587端口未对所有IP开通。

推荐您使用加密端口连接,更加安全。

端口修改

因为很多代码库默认的端口是587,而这个端口未对所有IP开通,所以需要修改成其他SMTP端口,未加密25,加密465端口。

加密协议

修改完端口,再看加密协议,加密协议之前用的STARTTLS,这个和TLS看着相似,但是有区别,对比一下就是下面这个区别

STARTTLSTLS(Implicit TLS)
概念STARTTLS 是一种升级协议,用于从未加密的连接升级为加密连接。TLS 是一种加密协议,通常用于直接建立加密连接。
工作原理客户端首先建立未加密的连接(明文)。<br/>通过发送 STARTTLS 命令,告诉服务器开始加密。<br/>连接升级为加密状态,后续通信在加密通道中进行。在使用 TLS 时,客户端与服务器的连接从一开始就是加密的。<br/>连接建立后,所有通信都在安全的 TLS 隧道中进行。
使用场景常用于邮件传输协议(SMTP、IMAP、POP3),在非加密端口上升级连接。TLS 是一种加密协议,通常用于直接建立加密连接。
优点可以在同一个端口上支持加密和非加密通信,兼容性较好。使用较少的端口号,更容易通过防火墙和网络设备。连接安全性更高,因为从开始就是加密的。配置简单,客户端直接使用加密端口连接。
端口SMTP: 587 <br/>IMAP: 143 <br/>POP3: 110SMTP: 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"            //邮箱密码
        )
    }
}

这是阿里云邮箱对端口的限制原因,排查这两个关键性问题,现已可以正常发送。


☟☟可点击下方广告支持一下☟☟

最后修改:2024 年 12 月 18 日
请我喝杯可乐,请随意打赏: ☞已打赏列表