最近在做测试demo的时候发现,在本地可以使用qq邮箱的服务来进行邮件的发送,但是把项目部署到云服务器上就没办法发送邮件,并且报错是连接超时:
向xxxxx@qq.com用户发送绑定邮箱验证码异常:Mail server connection failed; nested exception is com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.qq.com, 25; timeout -1;nested exception is:java.net.ConnectException: 连接超时 (Connection timed out). Failed messages: com.sun.mail.util.MailConnectException: Couldn't connect to host, port: smtp.qq.com, 25; timeout -1;nested exception is:java.net.ConnectException: 连接超时 (Connection timed out)
但是在本地测试一直可以正常使用,查询资料后得知:如果在yaml配置文件中没有明确指出使用邮箱服务的端口,那么qq邮箱的默认端口为 25,但是阿里云服务器这个端口是没有开放的,查询资料后可以向阿里申请开放25端口:但是下面这些步骤一看就非常麻烦,所以我们选择另一个方案
阿里云服务器默认禁用了TCP 25端口的出方向访问流量,这是出于安全考虑,旨在防止服务器被滥用发送垃圾邮件。尽管如此,如果你有合法的业务需求使用25端口,阿里云提供了官方途径来申请开放此端口。你可以通过以下步骤尝试申请开放25端口:1、提交工单申请:登录阿里云官网,进入控制台,找到相关的云服务器实例,然后提交一个客户服务工单。在工单中详细说明你需要使用25端口的具体原因、用途以及你的服务器实例ID等必要信息。强调你的使用场景是合法且符合规定的服务,比如企业内部邮件服务等。2、提供额外材料:根据阿里云的要求,可能需要你提供额外的证明材料或说明,以证实你的需求合理且不会造成安全风险或违反服务条款。3、等待审核:提交申请后,阿里云的客服或技术团队会对你的申请进行审核。审核过程可能需要一定时间,具体时长视情况而定。4、结果通知与配置:如果申请被批准,阿里云会告知你,并可能指导你进行必要的配置。之后,你就可以在你的阿里云服务器上使用25端口了。
通过查询资料发现,QQ邮箱还有一个发送邮件的端口,那就是 465,在yaml配置文件中修改使用qq邮箱服务的端口号:
mail:# 配置 SMTP 服务器地址host: smtp.qq.com# 邮箱的账号username: 你的qq@qq.com# 邮箱授权码password: 你的授权码# 邮件服务协议protocol: smtpproperties:mail:smtp:socketFactory:# 开放指定的端口,465port: 465class: javax.net.ssl.SSLSocketFactoryfallback: falseauth: truestarttls:enable: truerequired: true
然后再在阿里云服务器的安全组开放这个 465 端口,重新部署后端服务,发现就可以正常使用啦!!!
补充资料:
为了使用QQ邮箱,特别是当你需要通过SMTP发送邮件或使用IMAP/POP3接收邮件时,你需要确保你的云服务器上的相应端口是开放的。以下是QQ邮箱所使用的端口:
-
SMTP(发送邮件):
- SSL加密连接:端口号465
- STARTTLS(先进行明文连接再升级到TLS加密):端口号587
-
IMAP(接收邮件):
- 使用SSL加密:端口号993
-
POP3(接收邮件):
- 使用SSL加密:端口号995
如果你的云服务器上运行着邮件客户端或者任何需要通过QQ邮箱服务器发送/接收邮件的应用,你需要在服务器的安全组或者防火墙设置中开放上述端口。