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

Django中配置Outlook Office 365邮件SMTP认证失败问题求助

解决Django中Outlook Office 365 SMTP认证失败的问题

我之前也碰到过一模一样的Office 365 SMTP认证失败问题,结合你的配置和报错信息,给你几个实用的排查和解决方向:

1. 优先检查:是否需要使用应用密码而非普通账号密码

这是最常见的原因!现在Office 365(包括Outlook个人版)如果开启了多因素认证(MFA),直接用账号密码登录SMTP会被拒绝,必须使用应用密码:

  • 登录你的微软账号安全设置页面,找到「应用密码」选项(只有MFA开启后才会显示)
  • 生成一个专门用于SMTP客户端的应用密码,替换配置里的EMAIL_HOST_PASSWORD

如果账号没开MFA,也建议重置一下普通密码(注意大小写、特殊字符是否输入正确),有时候密码里的特殊字符在配置文件中可能需要转义,重置后再试更稳妥。

2. 确认账号的SMTP访问权限

如果你用的是企业版Office 365,管理员可能限制了账号的SMTP客户端访问权限:

  • 联系IT管理员确认你的账号是否被允许使用SMTP发送邮件
  • 确认租户是否开启了SMTP AUTH功能(Exchange Online默认可能关闭,需要管理员手动启用)

3. 核对Django配置细节

你的基础配置大部分是正确的,补充几个关键注意点:

  • 确保EMAIL_HOST确实是smtp.office365.com,不要打错域名
  • 建议添加DEFAULT_FROM_EMAIL = 'myemail@outlook.com',确保发件人账号和登录账号一致,避免触发微软的反垃圾机制
  • 保持EMAIL_PORT=587、EMAIL_USE_TLS=True、EMAIL_USE_SSL=False,这组配置完全符合Office 365的要求,不要随意修改

4. 用纯Python脚本测试SMTP连接(排除Django影响)

有时候问题可能和Django无关,用原生smtplib写个测试脚本验证:

import smtplib
from email.mime.text import MIMEText

# 替换成你的信息
sender_email = "myemail@outlook.com"
sender_password = "你的应用密码或重置后的密码"
recipient_email = "test@example.com"

msg = MIMEText("这是一封测试邮件")
msg["Subject"] = "SMTP测试"
msg["From"] = sender_email
msg["To"] = recipient_email

try:
    with smtplib.SMTP("smtp.office365.com", 587) as server:
        server.starttls()  # 启用TLS加密
        server.login(sender_email, sender_password)
        server.send_message(msg)
    print("邮件发送成功!")
except smtplib.SMTPAuthenticationError as e:
    print(f"认证失败:{e}")

如果这个脚本也报错,那问题出在微软账号或权限上;如果脚本成功,再检查Django配置是否有拼写错误,或者是否有第三方邮件中间件干扰。

5. 检查账号安全状态

登录微软账号的安全中心,查看是否有可疑登录记录。如果微软标记你的SMTP登录为异常操作,需要手动确认该登录是你发起的,否则会被拒绝认证。

内容的提问来源于stack exchange,提问作者Y Logs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:44:08