Django项目配置Zoho SMTP无法接收表单邮件求助
解决Django使用Zoho SMTP发送邮件失败的问题
一、检查Zoho账户核心设置
- 确保你的域名邮箱已在Zoho完成域名验证,包括DKIM、SPF记录配置(这会直接影响邮件投递成功率,甚至被拦截)。
- 开启SMTP访问:登录Zoho邮箱后台 → 邮箱设置 → 邮件账户 → 选择你的域名邮箱 → POP/IMAP/SMTP → 启用SMTP服务。
- 若使用Zoho免费版,确认未触发发送频率限制(免费版有每日发送额度)。
- 如果你开启了Zoho账户的两步验证,必须使用应用专用密码作为
EMAIL_HOST_PASSWORD,不能用登录密码。
二、修正Django配置细节
EMAIL_HOST_USER必须填写完整的域名邮箱地址(如info@yourdomain.com),不能只填域名。- 确保TLS/SSL配置无冲突:
- TLS配置(端口587):
EMAIL_USE_TLS=True且EMAIL_USE_SSL=False - SSL配置(端口465):
EMAIL_USE_SSL=True且EMAIL_USE_TLS=False
- TLS配置(端口587):
- 添加
DEFAULT_FROM_EMAIL配置,与EMAIL_HOST_USER一致,避免发件人身份不一致:DEFAULT_FROM_EMAIL = '<domain name email>' # 替换为你的Zoho域名邮箱 - 先通过Django Shell测试邮件发送,排除视图逻辑问题:
执行:python manage.py shell
此时会直接输出具体错误(如认证失败、连接超时),方便定位问题。from django.core.mail import send_mail send_mail("Test Subject", "Test Body", "your-zoho-email@domain.com", ["your-zoho-email@domain.com"], fail_silently=False)
三、修复视图代码逻辑
你的视图存在两个关键问题:
send_mail执行逻辑不在表单验证通过的分支内,可能导致表单无效时执行报错,或发送空内容邮件。- 不能直接用用户填写的邮箱作为发件人(Zoho仅允许使用已验证的域名邮箱作为发件人),需设置
reply_to参数实现回复到用户邮箱的需求。
修正后的视图代码:
def home(request): allTemplates = AllTemplates.objects.all() if request.method == 'POST': form = forms.ContactForm(request.POST) if form.is_valid(): body = { 'name': form.cleaned_data['name'], 'surname': form.cleaned_data['surname'], 'from_email': form.cleaned_data['from_email'], 'message': form.cleaned_data['message'], } mail_body = "\n".join(body.values()) try: send_mail( "Generic contact", mail_body, '<domain name email>', # 固定为你的Zoho域名邮箱 ['<domain name email>'], fail_silently=False, reply_to=[form.cleaned_data['from_email']] # 回复地址设为用户填写的邮箱 ) # 发送成功后可添加重定向或提示信息 return redirect('home') except BadHeaderError: return HttpResponse('Ops, qualcosa è andato storto') else: form = forms.ContactForm() context = { 'form': form, 'allTemplates': allTemplates, 'allTemplates_length': len(allTemplates) } return render(request, 'home.html', context)
四、排查服务器/网络问题
- 确认服务器允许出站连接到587或465端口(部分主机商会限制SMTP端口)。
- 查看Django日志文件,查找SMTP相关的错误日志(如认证失败、连接超时)。
- 本地测试时,检查防火墙是否阻挡了Django连接Zoho的SMTP服务器。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

