美文网首页Django学习笔记
用 Django 发送邮件踩过的深坑

用 Django 发送邮件踩过的深坑

作者: FesonX | 来源:发表于2019-01-16 22:34 被阅读21次

Django (读作 [/ˈdʒæŋɡoʊ/], D不发音 )有一个 DRY 原则(Don't Repeat Yourself, 不要重复造轮子),很多模块都可以直接改动使用,最近使用其中的重置密码发送邮件模块遇到了一些坑,在这里记录一下。

测试环境

推荐在 django shell 下进行测试,不要开启服务器即可测试.

启动命令

python manage.py shell

或者直接在 Pycharm 中点击 Python Console

测试配置

在项目的 settings.py 中添加如下配置

# Config Email
EMAIL_HOST = 'smtp.qq.com'
EMAIL_HOST_USER = 'fesonx@foxmail.com'
EMAIL_HOST_PASSWORD = '*******'
EMAIL_PORT = 587
EMAIL_USE_TTL = True
DEFAULT_FROM_EMAIL = "fesonx@qq.com"

上面的配置截止发稿前均为可用状态.

配置过程

但是授人以鱼不如授人以渔, 下面是这些配置的具体信息.
在 QQ 邮箱的设置->账户->POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务 中开启SMTP, 进入选项旁边的如何收发页面, 可以看到下面的配置图:

配置

在图中即可找到相对应的信息发送邮件服务器地址:
EMAIL_HOST = 'smtp.qq.com
端口:
EMAIL_PORT = 587
加密连接类型:
EMAIL_USE_TTL = True

测试命令

命令分别对应主题(Subject)\ 内容(Message)\ 发件人(From) \ 收件人(To)\ 发送失败是否显示信息
需要注意的是收件人是一个列表

from django.core.mail import send_mail
send_mail("Hello", "Hello World:)", "fesonx@qq.com", ['fesonx@foxmail.com'], fail_silently=False)

踩到的坑

如果出现下面的错误:

...
File "/usr/lib/python3.6/smtplib.py", line 642, in auth
    raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (530, b'Must issue a STARTTLS command first.')

原因:
加密连接方式选择错误, 请查阅你所选择的邮箱服务器是 SSL 还是 TLS


...
File "/usr/lib/python3.6/socket.py", line 745, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known

原因:
域名错误,请检查你的域名有没有打错.


File "/usr/lib/python3.6/smtplib.py", line 642, in auth
    raise SMTPAuthenticationError(code, resp)
smtplib.SMTPAuthenticationError: (530, b'Must issue a STARTTLS command first.')

原因
端口炸了, 465,587,25端口都试试看.


SMTPAuthenticationError at /account/password-reset/
(535, b'Error: \xc7\xeb\xca\xb9\xd3\xc3\xca\xda\xc8\xa8\xc2\xeb\xb5\xc7\xc2\xbc\xa1\xa3\xcf\xea\xc7\xe9\xc7\xeb\xbf\xb4: 
http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256')

原因:
认证失败, ('\xc7\xeb\xca\xb9\xd3\xc3'这串是中文)这个错误比较隐蔽, 如果没有配置过QQ邮箱的第三方邮件软件登录的同学很容易犯, 在第三方邮件收发软件中, 并非使用邮箱密码登录, 而是使用授权码

这样第三方邮箱泄露里密码, 你的QQ密码至少还在.

授权码

成果

当你看到返回1的时候就发送成功了

PyDev console: starting.
Python 3.6.5 (default, May 11 2018, 13:30:17) 
[GCC 7.3.0] on linux
Django 2.1.5
from django.core.mail import send_mail
send_mail("Hello", "Hello World:)", "fesonx@qq.com", ['fesonx@foxmail.com'], fail_silently=False)
1

查看一下收件箱吧!


结果

相关文章

  • 用 Django 发送邮件踩过的深坑

    Django (读作 [/ˈdʒæŋɡoʊ/], D不发音 )有一个 DRY 原则(Don't Repeat Yo...

  • 2018-07-17

    发送邮件 django中内置了邮件发送功能,被定义在django.core.mail模块中,发送邮件需要使用SMT...

  • smtp服务器开启

    发送邮件 Django中内置了邮件发送功能,被定义在django.core.mail模块中。发送邮件需要使用SMT...

  • email

    1. django 发送邮件 settings.py中配置发送邮件邮箱 使用send_mail方法发送邮件

  • Python之发送邮件

    Python之发送邮件 使用SMTP模块发送邮件 发送HTML文件 发送带附件的文件 Django发送文件 各大邮...

  • Django——发送邮件和缓存

    发送邮件 概述:Django 中内置了邮件发送功能,发送邮件需要使用 SMTP服务,常用的免费服务器有:163、1...

  • django邮件发送

    配置setting 编写发送邮件函数

  • django发送邮件

    在使用django的send_mail发送邮件过程中发现QQ用不了,不管是用25端口,还是465/587都不行,后...

  • django发送邮件

    邮件配置 邮件发送

  • 使用django发送邮件

    django通过封装python的smtplib实现发送邮件功能。django 1.11官网翻译内容见:http:...

网友评论

    本文标题:用 Django 发送邮件踩过的深坑

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