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

在Django中使用Outlook共享邮箱发送邮件的问题及实现方法问询

使用Office 365共享邮箱在Django中发送邮件的解决方案

当然可以用共享邮箱通过SMTP发送邮件!你遇到的SMTPAuthenticationError是因为共享邮箱本身没有独立的登录密码——Office 365共享邮箱默认依赖拥有权限的用户账号来完成认证,而不是用共享邮箱地址直接登录。下面是具体的实现步骤:

核心原理

共享邮箱无法直接作为SMTP登录账号,你需要使用一个被授予共享邮箱发送权限的用户账号来完成SMTP认证,然后在发送邮件时指定发件人为共享邮箱地址。

第一步:配置Office 365权限

先在Office 365管理中心给你的个人邮箱(比如之前的xyz@company.com)授予共享邮箱的发送权限:

  • 进入Exchange admin center → 收件人 → 共享邮箱
  • 找到noreply@company.com,点击编辑 → 邮件流权限
  • 添加xyz@company.com为发送代表或发送为权限(两者的区别是:发送代表会显示"发件人:noreply@company.com 代表 xyz@company.com",发送为则完全显示noreply为发件人)
  • 保存设置,权限通常需要15-30分钟生效

第二步:调整Django邮件配置

保持SMTP服务器信息不变,修改账号相关配置为有权限的用户账号,同时默认发件人设为共享邮箱:

# settings.py
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.outlook.office365.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'xyz@company.com'  # 拥有共享邮箱权限的用户账号
EMAIL_HOST_PASSWORD = 'YourUserPasswordOrAppPassword'  # 注意:如果开启了MFA,要用应用密码
DEFAULT_FROM_EMAIL = 'noreply@company.com'  # 全局默认发件人
SERVER_EMAIL = 'noreply@company.com'  # Django系统错误邮件的发件人

第三步:发送邮件时指定发件人

在发送邮件时,显式指定from_email为共享邮箱地址(如果已经设置了DEFAULT_FROM_EMAIL,也可以省略,但显式指定更稳妥):

from django.core.mail import send_mail

send_mail(
    '测试邮件主题',
    '这是一封来自共享邮箱的测试邮件',
    'noreply@company.com',  # 发件人设为共享邮箱
    ['test@example.com'],
    fail_silently=False,
)

关键注意事项

  • MFA用户需用应用密码:如果你的xyz@company.com开启了多因素认证,普通密码无法用于SMTP登录,需要在Microsoft账户设置中生成一个应用密码,替换EMAIL_HOST_PASSWORD的值。
  • 确保SMTP AUTH被允许:检查Exchange Online的客户端访问规则,确保允许SMTP AUTH(默认是允许的,但如果你的组织有严格限制,可能需要开启)。
  • 不要直接用共享邮箱登录:共享邮箱没有独立密码,所以永远不要把noreply@company.com设为EMAIL_HOST_USER,否则一定会触发认证错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:41:05