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 服务

  1. 登陆网易邮箱
  2. 点击邮箱界面左上方的 “设置” 按钮
  3. 点击下拉菜单中的 “POP3/SMTP/IMAP”
  4. 开启 “IMAP/SMTP服务” 或 “POP3/SMTP服务”,开启一个,另一个也会自动开启
  5. 点击 “IMAP/SMTP服务” 后面的 “开启” 按钮,发送短信验证开启
  6. 复制给出的授权码(一定要保存好,该授权码在 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"

解决方法

删除其他的邮件后端配置即可。