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

Django重置密码接口出现SMTPServerDisconnected连接意外关闭错误

解决SMTPServerDisconnected: Connection unexpectedly closed错误

以下是针对你遇到问题的排查方向和解决办法:

1. 替换Yahoo邮箱密码为应用专用密码

Yahoo现在禁止第三方客户端直接使用账户登录密码,必须用应用专用密码:

  • 先给你的Yahoo账户开启两步验证
  • 进入账户安全设置,生成一个针对Django的应用专用密码
  • 把settings.py里的EMAIL_HOST_PASSWORD换成这个生成的密码

2. 修复手动管理SMTP连接的代码问题

你代码里手动调用connection.open()是多余的,send_mail会自动处理连接的开闭,手动操作反而可能导致连接状态异常。修改代码如下:

# 删掉这三行手动操作连接的代码
# connection = get_connection()
# connection.open()
# connection.connection.set_debuglevel(1)

# 如果需要调试SMTP交互,用Django自带的debug配置
connection = get_connection()
connection.debug = 1  # 开启后会在控制台输出SMTP对话细节

send_mail(
    subject,
    email_content,
    settings.DEFAULT_FROM_EMAIL,
    [user.email],
    fail_silently=False,
    connection=connection
)

3. 验证Yahoo SMTP配置正确性

确认参数是否符合Yahoo要求:

  • EMAIL_HOST设置为smtp.mail.yahoo.com是对的
  • 可以尝试切换端口和加密方式:把EMAIL_PORT=587+EMAIL_USE_TLS=True换成EMAIL_PORT=465+EMAIL_USE_SSL=True(注意TLS和SSL不能同时开启)
  • 确保DEFAULT_FROM_EMAIL和EMAIL_HOST_USER完全一致

4. 排查网络环境问题

  • 测试服务器能否访问Yahoo的SMTP端口:执行telnet smtp.mail.yahoo.com 587,如果连不上就是网络被拦截
  • 本地开发的话,暂时关闭防火墙或代理试试;云服务器要确认服务商没封禁SMTP出站端口

5. 开启详细日志定位问题

在settings.py中添加日志配置,查看SMTP交互的完整过程:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {'class': 'logging.StreamHandler'},
    },
    'loggers': {
        'django.core.mail': {
            'handlers': ['console'],
            'level': 'DEBUG',
        },
    },
}

运行后看控制台输出的SMTP对话,能精准找到连接断开的具体原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 18:28:10