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

