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

Ubuntu下Django发Hotmail邮件遇Invalid domain name错误求助

解决Django发送Hotmail邮件时的SMTPHeloError问题

问题根源

SMTPHeloError: (501, b'5.5.4 Invalid domain name') 错误的核心原因是:Outlook的SMTP服务器在接收HELO/EHLO握手请求时,判定你的Ubuntu主机提交的域名无效或无法解析。Outlook服务器会严格验证发送端的主机名合法性。

具体解决方案

1. 修正Django邮件配置的变量错误

你的配置里存在变量名错误,同时需要补充发件人地址配置:

# 修正变量名:EMAIL_HOST_USERNAME → EMAIL_HOST_USER
EMAIL_HOST_USER = 'x@hotmail.com'
# 添加发件人地址,需和邮箱账户一致
DEFAULT_FROM_EMAIL = 'x@hotmail.com'
EMAIL_HOST = 'smtp-mail.outlook.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# 别忘了补充邮箱密码配置
EMAIL_HOST_PASSWORD = 'your-hotmail-password'

2. 配置Ubuntu主机的合法主机名

Outlook服务器会校验发送端的系统主机名,你需要给Ubuntu设置一个符合规范的主机名:

  • 临时生效(重启后失效):
    sudo hostname your-valid-domain.com
    
  • 永久生效:
    编辑/etc/hostname文件,替换为合法域名(或符合格式的名称):
    sudo nano /etc/hostname
    
    输入your-valid-domain.com后保存退出,再编辑/etc/hosts添加映射:
    sudo nano /etc/hosts
    
    新增一行:
    127.0.0.1   your-valid-domain.com
    

3. 自定义Django SMTP后端指定HELO主机名

如果不想修改系统主机名,可以通过自定义SMTP后端强制指定HELO时使用的合法域名:
在项目中创建utils/email_backends.py文件:

from django.core.mail.backends.smtp import EmailBackend
import smtplib

class CustomSMTPBackend(EmailBackend):
    def open(self):
        if self.connection:
            return False
        try:
            self.connection = smtplib.SMTP(self.host, self.port, timeout=self.timeout)
            # 手动指定HELO主机名,替换为合法域名
            self.connection.ehlo('your-valid-domain.com')
            if self.use_tls:
                self.connection.starttls(context=self.ssl_context)
                self.connection.ehlo('your-valid-domain.com')
            if self.username and self.password:
                self.connection.login(self.username, self.password)
            return True
        except smtplib.SMTPException as e:
            if not self.fail_silently:
                raise
            return False

然后修改Django配置中的后端:

EMAIL_BACKEND = 'utils.email_backends.CustomSMTPBackend'

4. 检查Outlook账户安全设置

  • 若开启了两步验证,需创建应用密码,用该密码替代原密码作为EMAIL_HOST_PASSWORD
  • 未开启两步验证时,确保账户设置中“允许低安全性应用访问”选项已开启

内容的提问来源于stack exchange,提问作者Sky Q

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:47:39