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

