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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:15:59