最近用python写了官网的后台。官网的后台功能比较简单,一个多语言支持,一个联系我们,即给公司发邮件的功能。多语言支持的方式写在另一篇博客了。这里先来说一说Django的发送邮件功能。
其实python本身自带了发送邮件的功能,Django在其基础上进行了封装,使其更加简单易用。仅仅几行代码就可以实现发送邮件的功能。
但是在实际开发的时候,遇到了两个大坑,折腾了3天才真正搞定,在这里做一个简单的记录和梳理,希望能帮其他小伙伴规避这些问题。
使用Django做发送邮件的功能前,首先要有一个支持smtp协议的邮箱并检查设置。**在这里要控诉一下网易邮箱,163和126邮箱,都会强行把你要发送的邮件判定为垃圾邮件,从而阻止发送,所以这里不建议使用。最好使用企业邮箱,付费的真的比较靠谱。**我这里以腾讯企业邮箱作为示范:
1.登陆腾讯企业邮箱,进入设置--客户端设置
2.确认SMTP服务是否开启,如下图:
3.若没有开启,记得开启。然后看设置方法,下边会用到。
然后,要在settings.py文件中配置邮箱相关参数:
# send e-mail
EMAIL_BACKEND ='django.core.mail.backends.smtp.EmailBackend'#email后端
EMAIL_USE_TLS =False#是否使用TLS安全传输协议
EMAIL_USE_SSL =True#是否使用SSL加密,qq企业邮箱要求使用
EMAIL_HOST ='smtp.exmail.qq.com'#发送邮件的邮箱 的 SMTP服务器,这里用了qq企业邮箱EMAIL_PORT =465#发件箱的SMTP服务器端口
EMAIL_HOST_USER ='charleschen@xmdaren.com'#发送邮件的邮箱地址EMAIL_HOST_PASSWORD ='*********'#发送邮件的邮箱密码
最后,在views.py中制作一个简单的demo邮件并发送:
fromdjango.core.mail import send_mai
l# send_mail的参数分别是 邮件标题,邮件内容,发件箱(settings.py中设置过的那个),收件箱列表(可以发送给多个人),失败静默(若发送失败,报错提示我们)
send_mail('Subject here','Here is the message.','charleschen@xmdaren.com',['to@example.com'], fail_silently=False)
如果一切正常,那么邮件发送已经成功了。但是我很蛋疼的遇到了问题,报错显示是语法错误...
大坑注意
我到达上一步的时候,报错显示语法错误,可是一共就几行代码,检查了几遍也没错,怎么回事呢?后来改用python自带的smtp模块发送,一步步调试之后,发现问题在登陆邮箱的时候就失败了。然后在大神的带领下,使用Wireshark软件抓包,发现登陆时,SMTP协议会收取本地计算机名称,在这个名称中,不能包含诸如横杠"-",空格" "等字符,而我的本地计算机名称包含了"-",并且公司的局域网路由器在主机名后边加了带空格的后缀“HDCP HOST”所以导致SMTP协议校验失败。
问题清除之后就好办了,首先修改主机名,然后在设置ip地址的高级设置-DNS中,手动添加一个合法的DNS后缀即可。我这里改为dhcp3
http://blog.csdn.net/creabine/article/details/53857826