Django项目启动遇SMTP认证错误:账号密码正确但提示无效
Django启动时SMTPAuthenticationError问题排查与解决
问题现象
启动Django应用时抛出SMTPAuthenticationError,提示用户名和密码不被接受,但确认账号密码正确。
一、先修复代码逻辑错误
你的utils.py存在致命逻辑问题:邮件发送代码直接写在模块顶层,导致Django启动加载模块时就自动执行邮件发送,而非调用SendEmail函数时才触发,这是启动就报错的直接原因,同时你并未定义SendEmail函数。
修改utils.py代码:
from django.conf import settings from django.core.mail import send_mass_mail, EmailMessage def SendEmail(): message1 = EmailMessage( "Subject here", "Here is the message", settings.EMAIL_HOST_USER, # 引用配置中的发件人,避免硬编码错误 ["pawwne27@gmail.com"], ) message_tuple = ((message1.subject, message1.body, message1.from_email, message1.to),) send_mass_mail(message_tuple, fail_silently=False)
二、解决Gmail SMTP认证问题
即使密码正确,Gmail默认限制第三方应用直接使用账号密码登录,需按以下操作处理:
- 优先方案:给邮箱开启两步验证,生成应用专用密码,用此密码替换
settings.py中的EMAIL_HOST_PASSWORD。 - 测试临时方案:若不想开启两步验证,可开启Gmail的"不太安全的应用访问"(仅用于测试,生产环境禁用)。
- 修正拼写错误:你的
settings.py中EMAIL_HOST_USER写的是emnosy.wqrfl@gmail.com,但utils.py硬编码的发件人是emnosys.wqrfl@gmail.com(少了一个s),二者必须一致,建议直接用settings.EMAIL_HOST_USER避免硬编码失误。
三、修正settings.py配置
确保邮箱配置信息准确:
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_USE_TLS = True EMAIL_PORT = 587 EMAIL_HOST_USER = "emnosys.wqrfl@gmail.com" # 统一发件人邮箱拼写 EMAIL_HOST_PASSWORD = "你的应用专用密码" # 替换为生成的应用专用密码
四、测试验证
启动应用后,访问SendEmailView对应的URL触发邮件发送,此时才会执行SMTP认证,可正常排查问题。
内容的提问来源于stack exchange,提问作者Yuki
相关产品推荐
相关产品推荐

