Django SMTP sendmail功能本地正常 部署后提交表单报500错误如何解决?
Django联系表单本地正常线上500错误排查方案
- 先排查服务器SMTP端口连通性:多数云服务器默认封禁587、25这类邮件发送端口,你可以在服务器终端执行
telnet [你的EMAIL_HOST对应地址] 587测试连通性。如果无法连通,优先去服务器安全组、系统防火墙开放587端口的出方向规则;或者直接切换为SMTP SSL协议,修改settings.py配置为:
EMAIL_PORT = 465 EMAIL_USE_TLS = False EMAIL_USE_SSL = True
- 检查邮箱服务商的访问限制:你使用Gmail作为收件箱,首先确认发件邮箱是否开启了第三方SMTP访问权限,Gmail需要开启应用专用密码、关闭安全拦截规则,部分国内邮箱还需要将服务器IP加入白名单,避免异地登录被拦截。
- 修复代码语法错误:你views.py中
name = request.POST.get('full-name').末尾多了一个英文句号,属于明显的语法错误,直接删除该句号即可。 - 修正发件人配置:send_mail方法的第三个参数为发件人邮箱地址,你当前填写的是空字符串,多数SMTP服务不允许空发件人请求,直接将该参数替换为你的
EMAIL_HOST_USER配置值即可。 - 空值异常防护:你当前直接从request.POST中取参数,如果用户提交的表单缺少对应字段,
request.POST.get会返回None,后续拼接邮件内容时可能触发异常,可以给get方法加默认值,比如request.POST.get('full-name', '')。 - 临时开启DEBUG定位问题:测试阶段可以临时将线上settings.py的DEBUG参数改为True,提交表单后就能看到具体的错误栈信息,精准定位问题来源,测试完成后务必将DEBUG改回False,避免泄露服务器敏感信息。
内容的提问来源于stack exchange,提问作者shayanvalaie
相关产品推荐
相关产品推荐

