本地SMTP服务器发送邮件遇WinError 10061错误的解决方法
解决WinError 10061:本地SMTP连接被拒绝的问题
首先,这个[WinError 10061]错误的核心原因很明确:你的本地电脑上没有运行SMTP服务器,或者服务器没有监听默认的25端口,导致Python脚本无法建立连接。下面分两种场景给你解决办法:
场景1:使用第三方公共SMTP服务器(推荐,无需搭建本地服务)
如果你只是想测试邮件发送功能,完全不需要自己搭建本地SMTP服务器,直接用各大邮箱服务商提供的SMTP服务就行。比如QQ邮箱、163邮箱、Gmail都支持。这里以QQ邮箱为例,给你修正后的代码:
首先,你需要先在QQ邮箱的设置里开启「SMTP服务」,并获取授权码(不是邮箱密码)。
修正后的Python代码(兼容Python3):
import smtplib from email.mime.text import MIMEText from smtplib import SMTPException # 配置信息 sender = 'your_qq_email@qq.com' receivers = ['to@todomain.com'] auth_code = 'your_qq_auth_code' # 替换成你的QQ邮箱授权码 smtp_server = 'smtp.qq.com' smtp_port = 587 # QQ邮箱SMTP端口是587,用TLS加密 # 构造符合邮件格式的内容(原代码Subject写法错误,邮件需要标准格式) message = MIMEText('hello, this is a test e-mail message.', 'plain', 'utf-8') message['From'] = sender message['To'] = ','.join(receivers) message['Subject'] = 'SMTP e-mail test' try: # 建立连接并发送邮件 smtpObj = smtplib.SMTP(smtp_server, smtp_port) smtpObj.starttls() # 启用TLS加密 smtpObj.login(sender, auth_code) smtpObj.sendmail(sender, receivers, message.as_string()) print("Successfully sent email") except SMTPException as e: print(f"Error: unable to send email. Details: {e}") finally: smtpObj.quit()
场景2:搭建本地SMTP服务器(适合需要本地测试的场景)
如果必须用本地SMTP服务器,你需要在Windows上安装并配置一个:
- 方法1:启用Windows自带的SMTP服务(仅Windows Server版本或专业版有,家庭版可能没有)
- 打开「控制面板」→「程序」→「启用或关闭Windows功能」
- 找到「Internet Information Services」→展开后勾选「SMTP Server」,点击确定安装
- 安装完成后,打开IIS管理器,配置SMTP服务器的监听端口(默认25)和允许的发送地址
- 方法2:使用第三方本地SMTP工具,比如hMailServer、Postfix(Windows版本)
这些工具安装简单,配置灵活,适合个人测试使用,安装后确保服务启动并监听25端口,再运行你的脚本。
另外,你原代码里还有几个小错误需要注意:
- 没有定义
sender变量,sendmail方法必须传入发件人地址 Subject: "..."这种写法不符合Python语法,邮件内容需要用email模块构造标准格式- Python3里
print是函数,需要加括号:print("Successfully sent email") SMTPException需要从smtplib导入,否则会报错
内容的提问来源于stack exchange,提问作者userD1989
相关产品推荐
相关产品推荐

