Django allauth改域名后验证邮件仍发自example.com怎么办
Django allauth 验证邮件默认显示example.com问题修复
已解决 - 查看下方发布的答案
问题描述
使用Django allauth实现用户注册账号的验证邮件发送功能时,遇到邮件始终以example.com为发件人、正文保留关联example.com默认内容的问题,已完成以下配置操作:
- 在Django admin的「Sites(站点)」板块修改了域名与显示名称
- 在settings配置文件中添加了对应的站点ID编号
- 在settings配置文件中设置了
DEFAULT_FROM默认发件邮箱 - 在
templates/account/email路径下添加了自定义的email_confirmation_subject.txt和email_confirmation_message.txt邮件模板
异常表现:
- 本地执行注册流程时,验证邮件输出到终端,发件地址已为预期配置的邮箱,但邮件正文仍为allauth默认的通用内容
- Heroku部署的站点上执行注册操作时,验证邮件的主题和正文仍显示发件方为
example.com,部署站点的代码与本地代码完全同步。
解决方案
按以下步骤逐一排查修复即可解决:
修正发件人配置项笔误
Django框架识别的默认发件人配置参数为DEFAULT_FROM_EMAIL,而非DEFAULT_FROM,配置名写错会直接导致发件人规则不生效。本地终端输出能显示正确发件人,是因为本地使用控制台邮件后端做模拟输出,不会严格校验配置项合法性。调整模板加载优先级
自定义邮件模板不生效,核心原因是模板加载顺序错误:
- 先确认
settings.py中TEMPLATES配置的APP_DIRS参数设为True,否则Django不会加载各app下的模板文件 - 确认项目自定义模板目录(即你存放自定义邮件模板的
templates目录)写在TEMPLATES配置的DIRS列表最靠前位置,Django会按列表顺序查找模板,目录靠后会被allauth自带的默认模板优先匹配加载。
参考配置如下:
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [BASE_DIR / 'templates'], # 自定义模板目录放在最前 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
- 同步线上环境站点配置
本地Django admin中修改的Sites站点数据存储在本地数据库,Heroku部署环境使用独立的线上数据库,不会同步本地的站点修改记录:
- 先执行
heroku run python manage.py createsuperuser创建线上环境超级管理员账号 - 登录线上环境的Django admin后台,进入Sites板块,找到ID和
SITE_ID配置值一致的记录,将域名、显示名称修改为实际的线上站点域名,删除默认的example.com内容。
- 重启服务清缓存验证
所有配置修改完成后,本地重启开发服务,线上执行heroku restart重启服务,可执行以下代码校验当前站点配置是否生效:
from django.contrib.sites.models import Site print(Site.objects.get_current().domain, Site.objects.get_current().name)
输出结果为你配置的实际域名、而非example.com即代表配置生效,再触发注册流程发送验证邮件即可看到自定义的发件人、主题和正文内容。
内容的提问来源于stack exchange,提问作者Ross
相关产品推荐
相关产品推荐

