使用Gmail SMTP发送邮件时触发TypeError: getaddrinfo()参数错误
问题排查与解决
核心错误原因
1. SMTP服务器地址被错误覆盖
在settings.py中,你重复赋值了EMAIL_HOST:
EMAIL_HOST = 'smtp.gmail.com' EMAIL_HOST = 587 # 这里把服务器地址覆盖成了端口号,导致getaddrinfo无法解析整数类型的地址
getaddrinfo()需要接收字符串类型的服务器地址,而你把EMAIL_HOST设置成了整数587,这直接触发了TypeError。
2. 其他潜在问题
- EmailMessage发件人参数错误:
EmailMessage(subject, message, company, [email])中的第三个参数是from_email,应该使用你的Gmail邮箱地址,而不是公司名称,否则邮件会因发件人无效被拒收。 - views.py中render缺少模板名:
return render(request, {'form':form})没有指定模板文件,会导致渲染失败。 - forms.py中Meta类无效:
EmailForm是forms.Form,不是ModelForm,Meta类在这里不起作用,可以删除。
修复步骤
1. 修正settings.py的SMTP配置
把端口号赋值给EMAIL_PORT,而不是覆盖EMAIL_HOST:
# EMAILS (smtp server) EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' EMAIL_HOST = 'smtp.gmail.com' EMAIL_PORT = 587 # 正确设置端口变量 EMAIL_HOST_USER = 'abiodunazeez230@gmail.com' EMAIL_HOST_PASSWORD = '你的应用专用密码' # 确保是Gmail的应用专用密码,不是普通密码 EMAIL_USE_TLS = True
2. 修正views.py中的EmailMessage和render
def email(request): if request.method == 'POST': # save message to DB to_db = Email( status = request.POST.get('status'), name = request.POST.get('name'), email = request.POST.get('email'), message = request.POST.get('message'), subject = request.POST.get('subject'), ) to_db.save() #Send email form = EmailForm(request.POST) if form.is_valid(): email = form.cleaned_data["email"] subject = form.cleaned_data["subject"] message = form.cleaned_data["message"] # 使用EMAIL_HOST_USER作为发件人,添加可选的显示名称 from_email = f"TT Software Solutions <{settings.EMAIL_HOST_USER}>" mail = EmailMessage(subject, message, from_email, [email]) mail.send() messages.success(request, 'Email sent successfully') return redirect('candidates') else: form = EmailForm() # 替换成你的实际模板文件名,比如'email_form.html' return render(request, 'email_form.html', {'form':form})
3. 清理forms.py的无效代码
删除Meta类,因为forms.Form不需要它:
class EmailForm(forms.Form): email = forms.EmailField() subject = forms.CharField(max_length=100) message = forms.CharField(widget= forms.Textarea)
4. 确保Gmail应用专用密码正确
- 确保你的Gmail账号开启了两步验证
- 生成并使用应用专用密码,而不是你的普通登录密码
内容的提问来源于stack exchange,提问作者Azeez Soliudeen
相关产品推荐
相关产品推荐

