Wagtial 5 配置邮件发送功能,使用网易或 QQ 邮箱的 smtp 发送邮件,其他的邮箱配置一样,只需查看相应邮箱的 smtp 使用配置说明,找到其相应的参数进行替换即可。

在 Wagtial 5 中要使用发送邮件时,需要为网站启用发送邮件功能,如果需要使用 smtp 后端,则需要为网站配置相应 smtp 邮箱服务器,并为邮箱开启 smtp 服务。

本文中以网易邮箱和 QQ 邮箱为例,配置 wagtail 网站的发送邮件功能。

Wagtail 5 邮件服务配置

Wagtail 5 需要在 settings/base.py 文件中添加 smtp 配置启用 smtp,以实现使用 smtp 发送邮件。

使用网易邮箱的 smtp 配置

网易邮箱的 TLS 端口只能使用 465,使用 465 端口,需要配置 EMAIL_USE_SSL = True;密码要使用专为第三方应用使用的授权码。

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"

注:Wagtail 5 的发送邮件功能配置与 Django 的配置一样,只是使用的配置文件不同,Wagtail 5 使用的配置文件为 settings/base.py,Django 5 使用的配置文件为 settings.py,关于更详细的发送邮件配置查看:django 5 使用网易邮箱发送邮件

使用QQ邮箱的 smtp 配置

QQ 邮箱的 TLS 端口 465587 都可以使用,如果使用 465 端口,需要配置 EMAIL_USE_SSL = True;如果使用 587 端口,需要配置 EMAIL_USE_TLS = True;密码要使用专为第三方应用使用的授权码。

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"

注:Wagtail 5 的发送邮件功能配置与 Django 的配置一样,只是使用的配置文件不同,Wagtail 5 使用的配置文件为 settings/base.py,Django 5 使用的配置文件为 settings.py,关于更详细的发送邮件配置查看:django 5 使用 QQ 邮箱发送邮件

配置解释

EMAIL_BACKEND
  邮件服务后端,使用邮件服务商发送邮件,需要配置使用 smtp 邮件后端。
  smtp 邮件后端为 django.core.mail.backends.smtp.EmailBackend

EMAIL_HOST
  smtp 服务器地址,使用邮件服务商发送邮件,需要配置使用 smtp 邮件后端。

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;如果使用 587 端口,需要配置 EMAIL_USE_TLS = True

EMAIL_PORT
  邮箱 TSL 端口是 465587,非 TSL 端口是 25

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 中使用)

QQ邮箱开启 smtp 服务

  1. 登陆 QQ 邮箱
  2. 点击邮箱界面右上方的 “账号与安全” 按钮
  3. 点击 "安全设置" 菜单
  4. 点击 “POP3/IMAP/SMTP/Exchange/CardDAV 服务” 下的 “开启服务” 按钮,按照提示开启 smtp 服务
  5. 复制给出的授权码(一定要保存好,该授权码在 EMAIL_HOST_PASSWORD 中使用)

测试 Wagtail 5 发送邮件功能

在网站的跟目录,运行 shell 进入 python 命令行,测试 Wagtail 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:收件人列表,可以配置多个邮箱地址

接收不到邮件的处理

使用 Wagtial 命令生成的项目,默认情况下使用配置文件是 settings/dev.pysettings/dev.py 在文件的开始导入 settings/base.py 中的配置,如果你没有修改 wsgi.py 文件中使用配置文件,无论你是使用 Apache 或 Nginx 服务器,还是直接使用 python manage.py runserver 命令,使用的都是 settings/dev.py 文件。

默认在该文件中配置了邮件后端 EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend",该配置覆盖了配置的 smtp 邮件后端。

解决方法

解决在配置 smtp 后,无法收到邮件的方法有两个:

1、删除 dev.py 文件中的邮件后端配置

直接注释掉该行,或者直接删除该行。

2、使用 prod.py 配置文件

prod.py 配置文件是在生产环境中使用的配置文件,该文件中没有邮件后端配置。

修改文件 wsgi.py,把如下内容:

os.environ.setdefault(
    "DJANGO_SETTINGS_MODULE",
    "demo.settings.dev",
)

修改为:

os.environ.setdefault(
    "DJANGO_SETTINGS_MODULE",
    "demo.settings.prod",
)