目录

阿里云ECS使用python smtplib连接smtp服务器Timeout

目录

在邮件的开发测试过程中,遇到一个邮件发送的问题

使用python的smtplib发送邮件卡死,smtplib.SMTP.connect函数长时间不返回超时,具体代码如下:

1
2
3
4
server = smtplib.SMTP()
server.connect(smtp_host)
server.login(mail_user,mail_pass)
server.sendmail(me, to_list, msg.as_string())

该段代码是最简单的一个smtplib发送邮件过程,在实际测试中发现,在本机windows中执行良好,没有发生阻塞

但是在上传到阿里云的CentOS系统中时发现系统卡在server.connect过程中,无法连接

不管换用smtplib.SMTP(smtp_host)还是加上超时时间都没有效果,换用自己安装的虚拟机CentOS执行仍然没有问题

可见是跟环境有问题,进行抓包分析发现正常环境的tcp握手正常,而在阿里云上tcp握手无法成功,不断重发SYN握手请求

怀疑是防火墙DROP了握手包,使用iptables --list查看防火墙策略,发现没有配置策略

怀疑是阿里云的安全策略问题,登陆阿里云后台查看安全策略没有问题

最终在阿里云的安全公告中发现阿里云封禁25的外向请求,具体说明见https://help.aliyun.com/knowledge_detail/56130.html

替换使用smtplib.SMTP_SSL()使用SSL端口进行连接发送邮件避开25端口的使用,测试邮件可以正常发送