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

Django发送邮件报错ConnectionRefusedError[WinError10061]求助

Django邮件发送ConnectionRefusedError([WinError 10061]) 修复方案

核心问题分析

「目标计算机积极拒绝连接」错误本质是SMTP服务器连接失败,再加上代码中参数传递、逻辑缩进、字段拼写等多处错误,导致邮件发送逻辑完全无法正常执行。

分步修复方案

1. 修正SMTP服务器配置(settings.py)

你的EMAIL_HOST末尾多了一个空格,这会导致Django无法解析正确的SMTP服务器地址:

# 错误写法
EMAIL_HOST = "smtp.gmail.com "
# 修正后
EMAIL_HOST = "smtp.gmail.com"

额外注意Gmail SMTP的权限要求:

  • 若使用普通密码,需开启「低安全性应用访问」(不推荐);推荐开启2FA后使用应用专用密码
  • EMAIL_PORT=587和EMAIL_USE_TLS=True是Gmail TLS端口的标准配置,无需修改

2. 修复视图函数的逻辑错误(views.py)

视图中存在缩进、参数传递、字段匹配等多处错误,修正后代码如下:

from django.core.mail import send_mail
from django.conf import settings  # 必须导入settings模块

def contact(request):
    if request.method == "POST":
        # 匹配表单字段拼写,或后续修正表单的name属性为firstname
        firstname = request.POST.get('fistname', '')
        lastname = request.POST.get('lastname', '')
        email = request.POST.get('email', '')
        msg = request.POST.get('msg', '')
        
        # 将send_mail缩进在POST判断内,避免非提交请求触发发送
        send_mail(
            '用户留言通知',  # 自定义邮件主题
            f"来自用户的留言:\n姓名:{firstname} {lastname}\n邮箱:{email}\n内容:{msg}",  # 用变量填充邮件内容
            settings.EMAIL_HOST_USER,  # 引用settings变量,而非字符串字面量
            [email],  # 用表单提交的邮箱作为收件人,而非字符串'email'
            fail_silently=False,
        )
    return render(request,'core/contact.html')

关键修正点:

  • send_mail必须缩进在if request.method == "POST"代码块内,避免每次访问页面都触发邮件发送
  • 发件人、邮件内容、收件人需使用变量而非字符串字面量
  • 用request.POST.get()替代直接索引,避免表单字段缺失时抛出KeyError

3. 修正HTML表单的字段拼写错误

表单中firstname输入框的name属性拼写错误,修正后确保和视图中的字段名匹配:

<!-- 错误写法 -->
<input type="text" class="form-control" placeholder="First name" style="height: 50px;" name="fistname">
<!-- 修正后 -->
<input type="text" class="form-control" placeholder="First name" style="height: 50px;" name="firstname">

额外验证步骤

可以用Python自带库测试SMTP连接是否正常:

import smtplib
try:
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login('你的邮箱地址', '应用专用密码/账号密码')
    print("SMTP连接成功")
    server.quit()
except Exception as e:
    print(f"连接失败:{e}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 06:24:16