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

Python SMTPLib邮件脚本无法运行,求原因及修复方案

问题原因及修复方案

核心问题分析

你的脚本运行报错smtplib.SMTPServerDisconnected: Connection unexpectedly closed,主要由以下几个问题导致:

  • 邮件主题未正确赋值:代码中em['Subject']这行仅读取属性,未设置值,缺少主题字段可能触发服务器过滤机制。
  • 密码格式错误:密码字符串包含空格("corr ectp assw ords"),这不是有效的Gmail密码或应用专用密码。
  • Gmail权限限制:Gmail默认禁止普通密码通过SMTP登录,需使用应用专用密码(需开启两步验证),或临时开启"不太安全的应用访问"(不推荐)。

修复步骤

1. 修正邮件主题赋值

将em['Subject']修改为赋值语句:

em['Subject'] = subject

2. 修复密码问题

  • 若账号已开启两步验证,生成应用专用密码(在Google账号安全设置中操作),替换掉带空格的错误密码,确保密码无空格。
  • 未开启两步验证的话,可临时开启"不太安全的应用访问"(存在安全风险,官方已逐步淘汰该选项,优先推荐应用专用密码)。

3. 完整修正后的代码

from email.message import EmailMessage
import ssl
import smtplib

email_sender = 'correctemail@gmail.com'
# 替换为你的应用专用密码或正确无空格密码
email_password = "your_app_specific_password"

email_receiver = 'throwaway@email.com'

subject = 'Written by Code!'
body = """
    This was written by my program! Tell me if it worked.
"""

em = EmailMessage()
em['From'] = email_sender
em['To'] = email_receiver
em['Subject'] = subject  # 修正:添加主题赋值
em.set_content(body)

context = ssl.create_default_context()

with smtplib.SMTP_SSL('smtp.gmail.com', 465, context) as smtp:
    smtp.login(email_sender, email_password)
    smtp.sendmail(email_sender, email_receiver, em.as_string())

4. 备选连接方案(若端口465被屏蔽)

部分网络环境可能屏蔽465端口,可尝试使用SMTP_TLS方式(端口587):

with smtplib.SMTP('smtp.gmail.com', 587) as smtp:
    smtp.starttls(context=context)
    smtp.login(email_sender, email_password)
    smtp.sendmail(email_sender, email_receiver, em.as_string())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:22:14