Django + AWS SES 重置密码邮件发送故障排查求助
以下是代码配置中可能存在的问题及排查方向:
邮件发件人配置不符沙箱要求
AWS SES沙箱模式下,发件邮箱必须是已验证的身份。检查settings.py中的DEFAULT_FROM_EMAIL或SERVER_EMAIL是否设置为你在SES控制台验证过的邮箱地址。如果密码重置视图中指定了自定义的from_email参数,也要确保该邮箱已验证。自定义密码重置视图的发送逻辑缺失/错误
如果你使用了自定义的PasswordResetView,确认是否正确调用了表单的save()方法,并且传递了必要参数(如from_email、email_template_name)。比如:# 错误示例:未指定from_email form.save(request=request) # 正确示例:指定已验证的发件邮箱 form.save(request=request, from_email=settings.DEFAULT_FROM_EMAIL)若你完全自定义了发送逻辑,要确保调用的
send_mail或send_mass_mail方法参数正确,尤其是收件人、发件人、邮件内容模板路径。异步邮件发送未配置到位
若你配置了Celery等异步任务队列处理邮件发送,需确认:- 异步任务是否成功触发并执行
- 任务队列服务是否正常运行
- 邮件发送任务有没有抛出未捕获的异常(可查看Celery日志)
沙箱模式下异步发送失败可能不会直接返回错误,导致页面跳转但邮件未发出。
Django邮件后端的配置冲突
虽然你在Shell中用send_mail成功,但要确认密码重置流程是否使用了相同的邮件后端。检查settings.py中的EMAIL_BACKEND是否为django.core.mail.backends.smtp.EmailBackend,且相关SMTP配置(EMAIL_HOST、EMAIL_PORT、EMAIL_HOST_USER、EMAIL_HOST_PASSWORD、EMAIL_USE_TLS)是否完全正确,没有被视图中的代码覆盖。日志未开启导致无法定位错误
在settings.py中开启邮件相关的DEBUG日志,查看发送过程中的具体错误:LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'loggers': { 'django.core.mail': { 'handlers': ['console'], 'level': 'DEBUG', }, }, }运行密码重置流程后,查看控制台输出,确认邮件是否被实际发送、是否有SES返回的隐藏错误(比如沙箱下的收件人验证问题,即使你以为收件人已验证)。
密码重置模板的链接生成问题(间接影响发送)
虽然你提到页面能跳转到password_reset_confirm,但如果模板中生成的重置链接格式错误(比如域名、token无效),部分邮件服务商可能会将邮件判定为垃圾邮件,直接拦截。检查password_reset_email.html模板中的{{ protocol }}://{{ domain }}{% url 'password_reset_confirm' uidb64=uid token=token %}是否正确生成有效链接。
内容的提问来源于stack exchange,提问作者manny_22

