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

Django项目配置AnyMail+MailGun调用mail_admins时出现401未授权错误求助

解决Django AnyMail + MailGun调用mail_admins时的401未授权错误

首先看你的settings.py配置,有一个非常明显的语法错误——MAILGUN_SENDER_DOMAIN这一行末尾多了一个右括号:

"MAILGUN_SENDER_DOMAIN": "sandboxe6301378bfe741bf99d5684e65852283.mailgun.org"), 
# 这里的右括号是多余的,会导致配置字典解析失败!

这个错误会让Python无法正确加载ANYMAIL配置字典,可能导致MAILGUN_API_KEY没有被正确读取,这很可能就是你收到401错误的核心原因。先把这个多余的括号删掉,修正后的配置应该是:

ANYMAIL = { 
    "MAILGUN_API_KEY": os.environ.get("MAILGUN_API_KEY"), 
    "MAILGUN_API_URL": "https://api.mailgun.net/v3", 
    "MAILGUN_SENDER_DOMAIN": "sandboxe6301378bfe741bf99d5684e65852283.mailgun.org"
}

修复语法错误后,再按以下步骤排查其他可能的问题:

  • 验证环境变量是否正确加载:
    进入Django的shell环境(运行python manage.py shell),执行以下命令确认MAILGUN_API_KEY是否能被正确获取:

    import os
    print(os.environ.get("MAILGUN_API_KEY"))
    

    如果输出为空或者不是你在MailGun控制台获取的正确API密钥,说明环境变量没有在Django运行的环境中正确设置。你可以先硬编码密钥做调试(上线后务必改回环境变量),或者检查你的环境变量配置方式(比如dotenv文件是否被正确加载、服务器环境变量是否生效)。

  • 确认发件人地址的合法性:
    MailGun的沙箱域名只允许特定的发件人地址发送邮件,你的SERVER_EMAIL设置的mailgun@sandboxe6301378bfe741bf99d5684e65852283.mailgun.org是符合要求的,但要确保你没有在调用mail_admins时手动指定了不符合要求的from_email参数。默认情况下mail_admins会使用SERVER_EMAIL作为发件人,所以这一点应该没问题,但可以检查调用代码是否有额外配置。

  • 检查AnyMail版本兼容性:
    确保你安装的AnyMail版本和Django版本兼容,比如如果用的是Django 4.x,建议使用AnyMail 9.x及以上版本。可以运行pip show anymail查看版本,必要时更新:

    pip install --upgrade anymail
    

因为你用curl能正常发送邮件,说明API密钥、域名和收件人都是没问题的,所以核心问题大概率是配置中的语法错误导致配置未正确加载。修复后应该就能解决401错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 14:17:30