Django表单提交创建对象后无法向工作邮箱发送邮件问题
Django联系表单邮件发送失败排查与修复
问题场景
个人网站的"Contact Me"表单提交后,数据能成功保存到数据库,但无法发送邮件到目标工作邮箱myworkemail@gmail.com。
核心错误排查与修复
1. 收件人邮箱格式错误
在contact视图的send_mail调用中,recipient_list参数填写不完整:
recipient_list=['myworkemail.com'], # 缺少@gmail.com后缀,SMTP无法识别有效收件人
修复后:
recipient_list=['myworkemail@gmail.com'],
这是导致邮件无法送达的最直接原因。
2. Gmail账户与应用密码验证
确保Gmail账户配置符合要求:
- 已开启两步验证:Gmail应用密码仅对开启两步验证的账户生效,未开启则无法生成和使用应用密码。
- 应用密码正确:确认
EMAIL_HOST_PASSWORD中的my_app_pass是Gmail生成的专用应用密码,而非原账户密码。 - 无需开启"不太安全的应用访问":Gmail已淘汰该选项,必须使用应用密码或OAuth2认证。
3. SMTP配置细节确认
当前Settings配置无明显错误,但可做以下验证:
EMAIL_PORT=465配合EMAIL_USE_SSL=True是Gmail SSL连接的正确组合,无需调整。DEFAULT_FROM_EMAIL与EMAIL_HOST_USER保持一致,避免发件人身份验证异常。
4. 利用异常信息定位问题
视图已捕获并返回异常提示,可通过前端展示的错误内容进一步排查:
- 若提示SMTP认证失败,重点检查应用密码有效性和两步验证状态。
- 若提示收件人无效,再次确认邮箱格式是否正确。
修复后的完整视图代码片段
def contact(request): banner = get_object_or_404(Banner, page='contact') if request.method == 'POST': name = request.POST.get('name') email = request.POST.get('email') subject = request.POST.get('subject') message = request.POST.get('message') submission = ContactSubmission.objects.create( name=name, email=email, subject=subject, message=message ) try: send_mail( subject=f"New Contact Submission from {name}", message=f"Name: {name}\nEmail: {email}\nSubject: {subject}\nMessage: {message}", from_email=settings.DEFAULT_FROM_EMAIL, recipient_list=['myworkemail@gmail.com'], # 修复收件人地址 fail_silently=False, ) messages.success(request, "Your message has been submitted successfully!") except Exception as e: messages.error(request, f"An error occurred while sending the email: {str(e)}") return redirect('contact') return render(request, 'pages/contact.html', {'banner': banner})
内容的提问来源于stack exchange,提问作者Omar Saleem Haji
相关产品推荐
相关产品推荐

