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

Django应用使用Gmail应用密码发邮件遇535认证错误求助

Gmail应用密码认证失败(535错误)排查方案

问题描述

运行在生产环境的Django应用,通过Gmail账户应用密码发送带附件邮件的功能正常运行3年多后,近日出现以下错误:

App 2165051 output: smtplib.SMTPAuthenticationError: (535, b'Incorrect authentication data')

已完成的排查动作:

  • 检查Gmail账户发现原应用密码已消失
  • 创建新应用密码替换代码后仍触发535错误
  • 先后创建三个应用密码均无效

相关代码

settings.py

EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'xxxx@adicra.org.ar'
EMAIL_HOST_PASSWORD = os.environ.get('EMAIL_HOST_PASSWORD')
EMAIL_USE_TLS = True

views.py

#Vista de enviar por mail
class pagosMailPdfView(View):
    def get(self,request,*args,**kwargs):
        print("Aca en pagosMailPdfView")
        mailServer = smtplib.SMTP(settings.EMAIL_HOST,settings.EMAIL_PORT)
        #print(mailServer.ehlo())
        mailServer.starttls()
        #print(mailServer.ehlo())
        print(settings.EMAIL_HOST_USER)
        print(settings.EMAIL_HOST_PASSWORD)
        mailServer.login(settings.EMAIL_HOST_USER,settings.EMAIL_HOST_PASSWORD)
        print("conectando...")
        # averiguo la dirección de email del socio
        pagoh=PagosHead.objects.get(pk=self.kwargs['pk'])
        emailsocio=pagoh.numero_socio.email

排查步骤

1. 确认2步验证状态

应用密码仅在账户开启2步验证时有效,登录Gmail账户进入「安全」设置,检查「2步验证」是否为开启状态,若被意外关闭需重新开启后再创建应用密码。

2. 验证应用密码创建规范

创建应用密码时需满足:

  • 必须在已完成2步验证的设备上操作
  • 应用类型选择「邮件」或「其他(自定义名称)」,避免选错类型导致密码无效
  • 复制密码时确保无多余空格,应用密码为16位无空格字符串

3. 检查环境变量加载情况

从代码看密码读取自环境变量EMAIL_HOST_PASSWORD:

  • 确认生产环境已正确设置该变量为新创建的应用密码
  • 重启应用服务,避免缓存旧密码
  • 通过代码中print(settings.EMAIL_HOST_PASSWORD)的输出,确认打印的密码与新创建的完全一致

4. 排查账户安全限制

  • 查看Gmail账户的「最近安全活动」,确认是否有异常登录记录导致应用密码被临时锁定,若有需验证账户安全性后重新创建密码
  • 检查是否开启了设备/IP白名单限制,确保应用所在服务器IP不在拦截列表中

5. 替换为Django内置邮件发送函数

尝试用Django官方提供的邮件发送类替代手动SMTP连接,排除手动配置的潜在问题:

from django.core.mail import EmailMessage

# 在视图中替换原有SMTP代码
email = EmailMessage(
    '邮件主题',
    '邮件内容',
    settings.EMAIL_HOST_USER,
    [emailsocio],
)
email.attach_file('/path/to/your/attachment.pdf')  # 替换为实际附件路径
email.send()

6. 检查服务器网络连通性

  • 测试服务器是否能访问Gmail的SMTP端口:执行telnet smtp.gmail.com 587,确认端口连通正常
  • 尝试在本地用新应用密码发送邮件,排除服务器IP被谷歌黑名单拦截的可能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 08:25:38