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

Django send_email无法发送至站点同域名邮箱问题求助

解决思路:Django应用无法发送同域名邮箱的问题

遇到这种同域名邮件收不到但外部邮箱正常的情况,大概率是邮件路由或配置环节出了针对性问题,结合你的Google Workspace + cPanel环境,给你几个具体的排查和解决方向:

1. 确认Django邮件配置是否用对了Google Workspace的SMTP服务器

不少人部署时会图方便用cPanel本地邮件服务,但既然你用Google Workspace托管域名邮箱,必须确保Django走的是Google的SMTP通道,而不是cPanel本地服务——本地服务可能会把同域名邮件直接路由到cPanel本地账户,而你的实际邮箱在Google那边,导致邮件“丢”在本地没发出去。

打开Django的settings.py,检查并修正配置:

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'  # 也可填 smtp.googlemail.com
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = '你的Google Workspace邮箱地址'
EMAIL_HOST_PASSWORD = '你的应用专用密码(不是登录密码)'
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER

2. 调整cPanel的邮件路由规则

cPanel默认可能会优先把同域名邮件投递到本地账户,哪怕你已经配置了MX记录指向Google。这时候需要强制它走远程路由:

  • 登录cPanel,找到邮件板块下的路由设置(Mail Routing)
  • 选中你的域名,把路由方式改成**远程邮件交换器(Remote Mail Exchanger)**并保存
  • 这个设置会让cPanel把所有该域名的邮件都转发到MX记录指定的Google服务器,不再尝试本地投递

3. 排查Google Workspace的拦截与垃圾邮件规则

邮件可能已经发出去,但被Google的反垃圾系统误判:

  • 登录Google Workspace管理员后台,进入安全>邮件>垃圾邮件、钓鱼和恶意软件,检查是否有针对你服务器IP的拦截规则
  • 让收件人检查垃圾邮件文件夹,确认邮件是不是被误归类了
  • 建议给域名配置正确的SPF记录,比如包含你的服务器IP和Google的SPF规则:v=spf1 ip4:你的服务器IP include:_spf.google.com ~all,这能让Google认可你的服务器是合法发件源

4. 测试发送并查看日志定位问题

用Django Shell测试发送,同时查看日志找线索:

  • 进入项目目录,执行:
python manage.py shell
  • 在shell里运行测试代码:
from django.core.mail import send_mail
send_mail(
    '测试邮件主题',
    '测试邮件内容',
    '你的发件邮箱',
    ['同域名收件邮箱'],
    fail_silently=False,
)

如果报错直接看错误信息;如果没报错但收件人没收到,去cPanel的邮件>邮件日志查看投递记录,或者在Google Workspace管理员后台的邮件>邮件跟踪里查邮件流向,确认是被拦截了还是路由错误。

5. 检查cPanel Python App的SMTP端口限制

有些cPanel的Python应用环境会限制出站SMTP连接,尤其是587或465端口。你可以在服务器上用telnet测试连通性:

telnet smtp.gmail.com 587

如果连接失败,联系主机提供商确认是否开放了这些端口;如果连接成功,说明环境没问题,回到前面的配置排查。


内容的提问来源于stack exchange,提问作者Andras Sztrokay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 17:39:09