Django部署在IIS 10上用Gmail SMTP发邮件报530认证失败怎么解决?
问题核心原因排查与解决
首先明确你的第一个疑问:你使用django.core.mail.backends.smtp.EmailBackend作为邮件后端时,完全不需要配置IIS的web.config中的SMTP相关设置,Django的邮件逻辑是独立的,不会读取IIS的.NET邮件配置项,你配置的<system.net><mailSettings>节点对Django无效,可以直接删除。
你遇到的530 Authentication Required报错,核心原因来自两个问题:
- 配置项拼写错误
你的settings.py中写错了用户名配置项,正确的配置键是EMAIL_HOST_USER,你写的是EMAIL_HOST_USE,会导致Django根本读取不到你配置的发件人用户名,直接无身份信息请求SMTP服务就会触发认证失败。 - IIS进程无法读取环境变量
你用os.environ.get读取环境变量,本地开发环境中你的用户账户下配置的环境变量可以正常读取,但部署到IIS后,Django运行在IIS应用程序池对应的身份下,默认不会继承系统环境变量,导致EMAIL_USER、EMAIL_PASS两个变量取值为空,认证信息缺失。
解决步骤
- 第一步:修正
settings.py的拼写错误,修改后配置如下:
# django settings.py 修正后配置 EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 EMAIL_USE_TLS = True EMAIL_HOST_USER = os.environ.get('EMAIL_USER') EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_PASS')
- 第二步:修复环境变量读取问题,二选一即可:
- 测试阶段可以先把
EMAIL_HOST_USER、EMAIL_HOST_PASSWORD直接写死为实际值(注意Gmail现在不支持直接用账号登录密码发信,必须开启两步验证后生成应用专用密码填入),先验证发信功能正常。 - 生产环境如果要保留环境变量的配置方式,可以在你IIS对应的
web.config的FastCGI配置节点中添加环境变量声明,示例如下:
<configuration> <system.webServer> <handlers> <add name="Python FastCGI" path="*" verb="*" modules="FastCgiModule" scriptProcessor="C:\path\to\python\python.exe|C:\path\to\your\env\Lib\site-packages\wfastcgi.py" resourceType="Unspecified" requireAccess="Script" /> </handlers> <fastCgi> <application fullPath="C:\path\to\python\python.exe" arguments="C:\path\to\your\env\Lib\site-packages\wfastcgi.py"> <environmentVariables> <environmentVariable name="EMAIL_USER" value="你的Gmail账号" /> <environmentVariable name="EMAIL_PASS" value="你的Gmail应用专用密码" /> <!-- 其他你需要的环境变量都可以在这里添加 --> </environmentVariables> </application> </fastCgi> </system.webServer> </configuration> - 测试阶段可以先把
- 第三步:如果修正后还是报错,登录你的Gmail账号安全中心,确认当前服务器IP的登录请求没有被拦截,同时确认你已经开启了两步验证、使用的是应用专用密码而非普通登录密码。
内容的提问来源于stack exchange,提问作者JustLearning123
相关产品推荐
相关产品推荐

