使用Django Allauth发送邮件遇SMTPAuthenticationError问题求助
问题描述
使用Django Allauth发送注册、账户验证等邮件时,开发阶段以控制台作为邮件后端功能正常,但切换为Gmail SMTP发送后出现如下认证错误:
SMTPAuthenticationError at /accounts/password/reset/
(535, b'5.7.8 Username and Password not accepted. Learn more at\n5.7.8 https://support.google.com/mail/?p=BadCredentials q1-20020adfdfc1000000b0022e049586c5sm11068760wrn.28 - gsmtp')
已尝试错误提示中的步骤但未解决,当前Django邮件配置代码如下:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_USE_TLS = True EMAIL_PORT = 587 EMAIL_HOST_USER = 'example@gmail.com' EMAIL_HOST_PASSWORD = '*****'
排查与解决方法
- 启用两步验证并创建应用专用密码:Gmail当前默认不支持直接使用账户密码登录SMTP服务,需先开启Google账户的两步验证,随后在账户安全设置中生成应用专用密码,将该密码替换配置中的
EMAIL_HOST_PASSWORD。 - 核对账户安全配置:确认Google账户未开启已停用的“不太安全的应用访问”功能,重点验证两步验证状态为已开启,且应用专用密码是对应“邮件”或自定义类别生成的。
- 检查配置参数准确性:
EMAIL_USE_TLS需设为True,EMAIL_PORT对应587端口;若使用465端口则需将EMAIL_USE_SSL设为True,同时关闭EMAIL_USE_TLSEMAIL_HOST_USER必须填写完整的Gmail邮箱地址,不能省略@gmail.com后缀
- 验证网络连通性:确保服务器能够访问
smtp.gmail.com的587端口,未被防火墙或代理拦截 - 单独测试SMTP连接:使用Python脚本直接测试Gmail SMTP服务,排除Django配置外的问题:
import smtplib from email.mime.text import MIMEText # 配置信息 sender_email = "你的Gmail邮箱地址" app_password = "生成的应用专用密码" receiver_email = "测试收件邮箱" # 构造邮件 message = MIMEText("这是一封测试邮件,用于验证SMTP配置是否正常") message["Subject"] = "Gmail SMTP测试" message["From"] = sender_email message["To"] = receiver_email try: # 连接SMTP服务器并发送邮件 with smtplib.SMTP("smtp.gmail.com", 587) as server: server.starttls() server.login(sender_email, app_password) server.sendmail(sender_email, receiver_email, message.as_string()) print("邮件发送成功") except Exception as e: print(f"发送失败,错误信息:{e}")
内容的提问来源于stack exchange,提问作者BenD2525
相关产品推荐
相关产品推荐

