用 Django 发送邮件踩过的深坑

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, 进入选项旁边的如何收发页面, 可以看到下面的配置图:

5530017-e4a92174876bab48.png

配置

 

在图中即可找到相对应的信息发送邮件服务器地址:
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密码至少还在.

5530017-ec3f910a2b8159ee.png

授权码

成果

当你看到返回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

查看一下收件箱吧!

 

5530017-ea117c88143c1e13.png

结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值