You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:46:02