Django 5 配置邮件发送功能,使用网易邮箱 smtp 发送邮件
•
2024-02-20
•
文章类别:
框架 & CMS
•
阅读量:371
Django 5 配置邮件发送功能,使用网易邮箱 smtp 发送邮件。
Django 5 中如果你要使用评论等功能,可能需要为 django 5 网站启用邮件功能,要使用网易邮箱发送邮件需要,配置网易邮箱的 smtp 服务,同时还要启用 django 5 的 smtp 功能。
Django 5 邮件服务配置
Django 5 需要在 settings.py
文件中添加以下配置启用 smtp,以实现使用 smtp 发送邮件:
EMAIL_BACKEND = "django.core.mail.backends.smtp.EmailBackend"
EMAIL_HOST = "smtp.163.com"
EMAIL_USE_SSL = True
EMAIL_PORT = 465
EMAIL_HOST_USER = "u1shizhi@163.com"
EMAIL_HOST_PASSWORD = "OYQJEISLJEOGHCLR"
配置解释
EMAIL_BACKEND
:
邮件服务后端,使用邮件服务商发送邮件,需要配置使用 smtp 邮件后端。
smtp 邮件后端为 django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST
:
smtp 服务器地址,使用邮件服务商发送邮件,需要配置使用 smtp 邮件后端。
网易 smtp 服务器地址为 smtp.163.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
。
网易邮箱使用的端口是 465,因此需要配置 EMAIL_USE_SSL = True
EMAIL_PORT
网易邮箱使用的 TSL 端口是 465
,非 TSL 端口是 25
。
因此网易邮箱需要配置 EMAIL_PORT = 465
EMAIL_HOST_USER
邮件地址,填入你自己的网易邮箱地址。
EMAIL_HOST_PASSWORD
网易邮箱使用授权码作为第三方应用的专用密码。
在此输入你的网易对应邮箱的授权码。
网易邮箱开启 SMTP 服务
默认情况下网易邮箱的 smtp 服务是关闭的,不允许使用 smtp 服务发送邮件,如果你要使用网易邮箱的 smtp 服务,需要先开启 smtp 服务。
开启网易邮箱 smtp 服务
- 登陆网易邮箱
- 点击邮箱界面左上方的 “设置” 按钮
- 点击下拉菜单中的 “POP3/SMTP/IMAP”
- 开启 “IMAP/SMTP服务” 或 “POP3/SMTP服务”,开启一个,另一个也会自动开启
- 点击 “IMAP/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@163.com",
recipient_list=["u1shizhi@163.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@163.com",
recipient_list=["u1shizhi@163.com"],
)
批量发送邮件
django.core.mail
模块提供的 send_mass_mail
函数发送邮件,在命令行输入如下 python 代码:
send_mass_mail 的参数和参数顺序都是固定的,分别是邮件标题,正文,邮件发送人,和邮件接收人列表;并且不支持 html_message 参数。
from django.core.mail import send_mass_mail
message1 = (
"邮件标题1",
"正文一",
"u1shizhi@163.com",
["u1shizhi@163.com"],
)
message2 = (
"邮件标题2",
"正文二",
"u1shizhi@163.com",
["u1shizhi@163.com"],
)
send_mass_mail((message1, message2), fail_silently=False)
接收不到邮件的处理
如果你已经配置了所有的参数,但是在邮箱内接收不到任何的邮件,你有可能是在开发环境中启用了其他 EMAIL_BACKEND
,该配置覆盖了前面的 smtp 后端配置。
例如你可能启用了控制台后端:
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
解决方法
删除其他的邮件后端配置即可。
0 评论