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
相关产品推荐
相关产品推荐

