Django后端应用调用send_mail函数报错无法发送邮件问题求助
Django发邮件失败排查方案
1 修正配置拼写错误
你配置的EMAIL_BACKEND存在拼写错误,将单数backend改为复数backends即可:
# settings.py 修正后 EMAIL_BACKEND='django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST='smtp.gmail.com' EMAIL_PORT=587 EMAIL_HOST_USER='kalp2002prajapati@gmail.com' EMAIL_HOST_PASSWORD='你的应用密码' EMAIL_USE_TLS = True EMAIL_USE_SSL = False
2 修正导入语法问题
view.py中的导入语句换行不符合Python语法,修正为:
from django.core.mail import send_mail, EmailMessage
3 统一发件人地址
Gmail会校验发件人身份,send_mail函数传入的发件人地址必须和EMAIL_HOST_USER保持一致,你当前代码里发件人写的是kalpprajapati2002@gmail.com,和配置的登录邮箱不符,修改为:
send_mail( data['subject'], 'Name: '+ data['name'] + '\nEmail: '+data['email']+'\nMessage:'+ data['message'], 'kalp2002prajapati@gmail.com', # 和EMAIL_HOST_USER保持一致 ['kalp2002prajapati@gmail.com'], fail_silently=False )
4 正确配置Gmail发件权限
Gmail已不再支持直接使用账号密码登录SMTP服务,需按以下步骤配置:
- 登录Google账号,开启两步验证
- 在账号安全设置中生成16位应用密码,替换
EMAIL_HOST_PASSWORD的值,不要使用原账号的登录密码
5 定位具体报错信息
当前裸except语句会吃掉所有错误信息,无法定位根因,临时修改异常捕获逻辑打印具体报错:
# 视图文件顶部导入 import traceback # 替换原except块 except: traceback.print_exc() return Response({'error': 'Message failed to send'})
重启服务后重新发起请求,查看控制台输出的错误栈即可定位具体问题。
内容的提问来源于stack exchange,提问作者Kalp Prajapati
相关产品推荐
相关产品推荐

