You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Django与Bootstrap构建的联系表单无法发送邮件如何解决?

问题根因及修复方案

1. 视图逻辑致命错误(最核心原因)

你views.py的contact函数里,获取完POST参数后直接加了一行return redirect('contact'),这行代码会直接中断后续所有逻辑,发邮件的代码完全不会被执行,直接删除这行即可。

2. 视图缩进错误

return render(request,'home_app/home.html',{}) 当前缩进在if request.method == "POST"分支内部,会导致GET请求访问页面时没有返回值报错,要把这行代码调整到和if request.method == "POST"同级的位置。

3. 发件人配置缺失

你构造EmailMessage对象时第三个参数(发件人地址)留了空字符串,要改成和settings.py里EMAIL_HOST_USER一致的邮箱地址,否则Gmail会拒绝发信请求。

4. Gmail专属配置调整

谷歌现在不支持直接用账号密码作为EMAIL_HOST_PASSWORD发信,需要先完成以下配置:

  • 先给你的Gmail账号开启两步验证
  • 前往谷歌账号安全页生成应用专用密码,把生成的16位密码填到EMAIL_HOST_PASSWORD字段
  • 确认你的网络环境可以正常连接Gmail的SMTP服务

优化建议

  • 表单里的主题输入框type写错成了tel,建议改成text,避免部分浏览器限制输入内容
  • 不要用裸except捕获异常,可以打印异常信息方便后续排查问题,示例:
import traceback
try: 
    email.send()
    return redirect("/?valid")
except Exception as e:
    print(traceback.format_exc())
    return redirect("/?notvalid")

修复后的views.py参考:

from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.core.mail import EmailMessage
from django.conf import settings
    
def contact(request):
    if request.method == "POST":
        name = request.POST.get('name')
        subject = request.POST.get('subject')
        email = request.POST.get('email')
        message = request.POST.get('text')
   
        email=EmailMessage("Message from Django",
        "User: {} Subject: {} Address: {} Message:\n\n {}".format(name,subject,email,message),
        settings.EMAIL_HOST_USER,["你的收件邮箱地址"],reply_to=[email])
   
        try: 
            email.send()
            return redirect("/?valid")
   
        except:
            return redirect("/?notvalid")   
   
    return render(request,'home_app/home.html',{})

内容的提问来源于stack exchange,提问作者Shifter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:54:03