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

Python从localhost发邮件报ConnectionRefusedError错误咨询

报错产生原因
  • 核心问题是SMTP连接参数使用错误:你代码中smtplib.SMTP(local_hostname="localhost")的local_hostname参数作用是SMTP握手时本地向服务器宣告的自身主机名,不是你要连接的目标SMTP服务器地址。由于你没有传入目标SMTP的host、port参数,smtplib默认会尝试连接本地IP的25端口。
  • OSX 10.11系统默认没有开启本地SMTP转发服务(如postfix),25端口无进程监听,因此直接返回连接拒绝错误,这段代码实际根本没有发起对Gmail服务器的连接,和Gmail的低安全应用限制无关。
  • 你之前遇到的低安全应用访问被拦截的问题,是Google全面关闭了普通账号密码登录第三方SMTP的权限,常规的账号密码直连方式已经失效。
修正步骤
  1. 前置账号配置
  • 为你的Gmail账号开启两步验证,未开启两步验证的账号无法生成应用专用密码
  • 进入Google账号安全设置页,生成用于邮件发送的16位应用专用密码,妥善保存该密码(仅生成时可见)
  1. 修正代码逻辑
  • 替换连接目标为Gmail官方SMTP服务器smtp.gmail.com,使用465端口走SSL加密连接
  • 发件人字段填写你自己的Gmail邮箱地址,不要填localhost,否则会被Gmail的反垃圾规则拒收
  • 登录时使用你的Gmail邮箱+刚才生成的应用专用密码做鉴权

修正后的可运行代码如下:

import smtplib
from email.mime.text import MIMEText

# 替换为你自己的Gmail地址和生成的应用专用密码
SENDER_EMAIL = "your.name@gmail.com"
APP_PASSWORD = "你生成的16位应用专用密码"
RECEIVER_EMAIL = "my.name@gmail.com"

content = "Some content"
message = MIMEText(content)
message['Subject'] = "Some text"
message['From'] = SENDER_EMAIL
message['To'] = RECEIVER_EMAIL

# 连接Gmail的SSL SMTP服务器,不要连本地
with smtplib.SMTP_SSL(host="smtp.gmail.com", port=465) as connection:
    connection.login(SENDER_EMAIL, APP_PASSWORD)
    connection.send_message(message)
    print("邮件发送成功")
注意事项
  • 不要在代码里硬编码应用专用密码,正式使用时建议从环境变量或本地加密配置文件读取,避免密码泄露
  • 如果运行时出现证书校验错误,先确认你系统的Python根证书库已更新,OSX系统自带的Python可以通过运行对应版本目录下的Install Certificates.command完成证书更新
  • 不要尝试用25端口非加密连接Gmail服务器,Gmail已经全面拦截非加密的邮件传输请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 01:06:31