关于python smtplib在linux上发送邮件失败解决办法

在上线django 项目遇到在本地window系统可以实现正常的邮件发送,但部署到centos7上的时候,邮件发送模块一直无法实现,并报socket错误。本以为是防火墙问题,于是将防火墙关掉,使用的命令是:systemctl stop friewall.server 但还是一样报错,检查25端口,并未发现端口被关闭。于是用python调用smtplib写一个发送邮件的测试脚本,调用的仍然是SMTP()。本地测试正常,能发送邮件,但放到服务器上,使用python mailtest.py 一样报socket错误。查网上资料,提示smtplib调用smtp_ssl()能解决问题,于是尝试用smtplib_ssl() ,sslport从网上查得知,一般25端口的sslport是465

尝试修改为如下:


再次上传到服务器,使用python +文件名,这次显示OK! 邮箱也正常收到邮件。原来在linux上对发送的加密要求更严格,需要使用更安全的SMTP_SSL()进行邮箱传输认证。具体原因,待找时间认证查看原理。附参考链接:https://segmentfault.com/q/1010000007661948

补充:在django项目部署中即便将项目的setting.py文件中邮件传输改成-SSL也无法发送邮件,需要修改django的全局setting.py, django全局文件查看方法:


参考链接:http://blog.csdn.net/Cryhelyxx/article/details/42552411

找到django全局文件所在位置后,进入找到global_settings.py 使用vi global_settings.py

打开后在邮件模块进行修改:


如图修改后,在Centos上就可以正常发送了

2017.10.06

推荐阅读更多精彩内容