美文网首页
Django实现发送邮件功能

Django实现发送邮件功能

作者: 阡陌3536 | 来源:发表于2017-10-01 18:28 被阅读0次

    最近用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

    相关文章

      网友评论

          本文标题:Django实现发送邮件功能

          本文链接:https://www.haomeiwen.com/subject/mieaextx.html