Django 5配置邮件发送功能,使用QQ邮箱 SMTP 发送邮件
•
2024-02-20
•
文章类别:
框架 & CMS
•
阅读量:386
Django 5 配置邮件发送功能,使用 QQ 邮箱的 smtp 发送邮件。
Django 5 中如果你要使用评论等功能,可能需要为 django 5 网站启用邮件功能,要使用 QQ 邮箱发送邮件需要,配置 QQ 邮箱的 smtp 服务,同时还要启用 django 5 的 smtp 功能。
Django 5 邮件服务配置
Django 5 需要在 settings.py
文件中添加以下配置启用 smtp,以实现使用 smtp 发送邮件:
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.qq.com"
EMAIL_USE_TLS = True
EMAIL_PORT = 587
EMAIL_HOST_USER = "u1shizhi@qq.com"
EMAIL_HOST_PASSWORD = "jisljedsljdiwjg"
配置解释
EMAIL_BACKEND
:
邮件服务后端,使用邮件服务商发送邮件,需要配置使用 smtp 邮件后端。
smtp 邮件后端为 django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST
:
smtp 服务器地址,使用邮件服务商发送邮件,需要配置使用 smtp 邮件后端。
QQ邮箱 smtp 服务器地址为 smtp.qq.com
EMAIL_USE_SSL
& EMAIL_USE_TLS
:
EMAIL_USE_SSL
表示是否使用隐式 TSL 连接传输数据,其对应的端口是 465
。
EMAIL_USE_TLS
表示是否使用显式 TSL 连接传输数据,其对应的端口是 587
。
EMAIL_USE_SSL
& EMAIL_USE_TLS
的默认值为 False
,并且只能设置其中一项为 True
。
QQ 邮箱的端口 465
和 587
都可以使用,如果使用 465 端口,需要配置 EMAIL_USE_SSL = True
;如果使用 587 端口,需要配置 EMAIL_USE_TLS = True
EMAIL_PORT
QQ邮箱 TSL 端口是 465
和 587
都使用,非 TSL 端口是 25
。
在此使用QQ邮箱 587 端口,需要配置 EMAIL_PORT = 587
EMAIL_HOST_USER
邮件地址,填入你自己的QQ邮箱地址。
EMAIL_HOST_PASSWORD
QQ邮箱使用授权码作为第三方应用的专用密码。
在此输入你的QQ对应邮箱的授权码。
QQ邮箱开启 SMTP 服务
默认情况下QQ邮箱的 smtp 服务是关闭的,不允许使用 smtp 服务发送邮件,如果你要使用QQ邮箱的 smtp 服务,需要先开启 smtp 服务。
开启QQ邮箱 smtp 服务
- 登陆 QQ 邮箱
- 点击邮箱界面右上方的 “账号与安全” 按钮
- 点击 "安全设置" 菜单
- 点击 “POP3/IMAP/SMTP/Exchange/CardDAV 服务” 下的 “开启服务” 按钮,按照提示开启 smtp 服务
- 复制给出的授权码(一定要保存好,该授权码在 EMAIL_HOST_PASSWORD 中使用)
测试 Django 5 发送邮件功能
在网站的跟目录,运行 shell 进入 python 命令行,测试 Django 5 发送邮件功能是否配置正确:
python manage.py shell
django.core.mail
模块提供的 send_mail
函数发送邮件,在命令行输入如下 python 代码:
from django.core import mail
mail.send_mail(
subject="邮件标题",
message="邮件正文",
from_email="u1shizhi@qq.com",
recipient_list=["u1shizhi@qq.com"],
)
进入你的邮箱,查看是否收到邮件,如果收到邮件,则说明邮件功能配置正确。
参数解释
subject
:发送邮件的标题
message
:是邮件发送的正文内容
from_email
:发送人的邮箱地址
recipient_list
:收件人列表,可以配置多个邮箱地址
以 HTML 方式发送邮件正文
django.core.mail
模块的 send_mail
函数提供了 html_message
参数,以实现在邮件正文中发送 HTML 信息:
在 shell 命令行输入如下 python 代码:
from django.core import mail
mail.send_mail(
subject="邮件标题",
html_message="<h2>邮件正文</h2>",
from_email="u1shizhi@qq.com",
recipient_list=["u1shizhi@qq.com"],
)
批量发送邮件
django.core.mail
模块提供的 send_mass_mail
函数发送邮件,在命令行输入如下 python 代码:
send_mass_mail 的参数和参数顺序都是固定的,分别是邮件标题,正文,邮件发送人,和邮件接收人列表;并且不支持 html_message 参数。
from django.core.mail import send_mass_mail
message1 = (
"邮件标题1",
"正文一",
"u1shizhi@qq.com",
["u1shizhi@qq.com"],
)
message2 = (
"邮件标题2",
"正文二",
"u1shizhi@qq.com",
["u1shizhi@qq.com"],
)
send_mass_mail((message1, message2), fail_silently=False)
接收不到邮件的处理
如果你已经配置了所有的参数,但是在邮箱内接收不到任何的邮件,你有可能是在开发环境中启用了其他 EMAIL_BACKEND
,该配置覆盖了前面的 smtp 后端配置。
例如你可能启用了控制台后端:
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
解决方法
删除其他的邮件后端配置即可。
0 评论