使用Namecheap私人邮箱的Django应用出现Relay access denied问题
解决Django发送邮件时SMTPRecipientsRefused (Relay access denied)问题
针对你遇到的554 5.7.1 Relay access denied错误,以下是具体排查和解决步骤:
1. 补充SMTP登录用户配置
Django的SMTP配置中,EMAIL_HOST_USER是用于登录SMTP服务器的用户名,Namecheap Private Email要求该用户名必须与发件邮箱一致。在settings.py中添加:
EMAIL_HOST_USER = EMAIL_FROM_USER # 与verification@domain.com保持一致 DEFAULT_FROM_EMAIL = EMAIL_FROM_USER # 确保全局默认发件人匹配
2. 显式设置邮件头字段
Namecheap可能会校验邮件头中的Sender和Return-Path字段,确保与发件邮箱一致。修改views.py中的邮件发送代码:
email = EmailMessage( subject=email_subject, body=email_body, from_email=settings.EMAIL_FROM_USER, to=[user.email], headers={ 'Sender': settings.EMAIL_FROM_USER, 'Return-Path': settings.EMAIL_FROM_USER } )
3. 将服务器IP添加到Namecheap中继白名单
登录Namecheap Private Email控制面板,找到SMTP设置或中继控制选项,将你的Django应用服务器的公网IP添加到允许中继的IP列表中。这是很多用户忽略的关键点——Namecheap默认可能只允许在其Webmail界面发送,外部服务器需要手动授权IP。
4. 用Django Shell测试邮件发送
排除视图代码的干扰,直接在Django Shell中测试:
python manage.py shell
然后执行:
from django.core.mail import send_mail send_mail( '测试邮件', '这是一封测试邮件', 'verification@domain.com', ['你的测试邮箱地址'], fail_silently=False, )
如果同样报错,说明问题出在SMTP配置或服务器网络;如果成功,再排查视图中的上下文或模板渲染是否影响了邮件头。
5. 检查服务器网络限制
确认你的应用服务器的防火墙/安全组允许出站连接到587端口,同时检查服务器ISP是否封锁了SMTP 587端口(部分云服务商可能默认限制,需要手动开启)。
内容的提问来源于stack exchange,提问作者user13725914
相关产品推荐
相关产品推荐

