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

使用Python smtplib发送邮件时出现PermissionError的原因咨询

问题分析与解决思路

错误核心原因

WinError 10013是Windows系统阻止Python程序创建网络套接字连接导致的,结合你的Gmail SMTP场景,主要原因有这些:

  • 拼写错误(先修正):你代码里写的是smpt.gmail.com,正确域名是smtp.gmail.com,虽然这不会直接触发权限错误,但会导致后续连接失败。
  • 防火墙/杀毒软件拦截:Windows Defender或第三方杀毒软件会监控程序网络访问,可能把Python的SMTP连接判定为风险操作,直接拦截了端口访问。
  • 端口权限与ISP限制:smtplib.SMTP默认用25端口,很多ISP会封禁这个端口防垃圾邮件;同时Windows对普通用户使用知名端口(如25)有严格权限限制,普通进程可能没法访问。
  • Gmail账号配置问题:如果你的Gmail开了两步验证,必须用应用专用密码登录,不能用原账号密码;没开两步验证的话,得在Google账号设置里允许“不太安全的应用访问”(更推荐用应用密码),否则Gmail会拒绝登录,间接引发连接类错误。

修正后的代码示例

import smtplib
from email.mime.text import MIMEText

my_email = "sender_email@gmail.com"
# 开启两步验证就填应用专用密码,没开就填原密码(需允许低安全应用)
my_password = "your_app_password_or_account_password"

# 指定Gmail推荐的587端口,避免25端口被封禁/权限不足
connection = smtplib.SMTP("smtp.gmail.com", 587)
connection.starttls()
connection.login(user=my_email, password=my_password)

# 构造符合邮件标准的消息体,避免被邮箱服务商拒收
msg = MIMEText("Hello")
msg["Subject"] = "Test Email"
msg["From"] = my_email
msg["To"] = "receiver_email@gmail.com"

connection.sendmail(from_addr=my_email, to_addrs="receiver_email@gmail.com", msg=msg.as_string())
connection.quit()

额外排查步骤

  • 暂时关闭防火墙/杀毒软件测试,要是能正常发邮件,就把Python程序添加到防火墙允许列表里。
  • 用telnet smtp.gmail.com 587测试端口是否可用,能连接说明ISP没封禁这个端口。
  • 检查Google账号安全设置,确认应用密码或低安全应用权限配置正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:10:13