Python使用smtplib发邮件出现socket.gaierror[Errno11001]如何解决
问题原因
socket.gaierror: [Errno 11001] getaddrinfo failed 是典型的域名解析失败错误,意味着程序无法找到你填写的SMTP服务器对应的网络地址。你的代码存在一处直接触发该报错的硬伤,同时还有几处会导致后续运行报错的配置问题,按以下步骤修复即可。
修复步骤
- 修正SMTP服务器地址拼写错误:你代码中把SMTP服务地址拼写成了
smpt.gmail.com(smtp的p和t字母顺序写反),这个域名本身不存在,自然会解析失败。正确的Gmail SMTP服务器地址是smtp.gmail.com,同时建议显式指定TLS加密对应的端口587,避免默认端口不匹配的问题。 - 替换登录凭证:当前Gmail已经禁止使用账号原始密码登录第三方SMTP客户端,你需要先进入Gmail账号的安全设置页面,开启账号的两步验证,之后在安全设置里生成16位的应用专用密码,把代码里
password字段的值替换成这个应用专用密码,不要用你日常登录Gmail的账号密码。 - 优化连接写法:推荐使用
with上下文管理器管理SMTP连接,不需要手动调用close()方法,程序会在代码块执行结束后自动释放连接,避免异常场景下连接泄漏。 - 补充标准邮件头:直接发送纯文本内容很容易被邮件服务商判定为垃圾邮件拦截,建议在消息内容前加上主题字段,符合标准邮件格式要求。
修复后可运行的完整代码
import smtplib my_email = "你的Gmail邮箱地址@gmail.com" password = "你生成的16位Gmail应用专用密码" receiver = "收件人邮箱地址@yahoo.com" with smtplib.SMTP("smtp.gmail.com", port=587) as connection: connection.starttls() connection.login(user=my_email, password=password) connection.sendmail( from_addr=my_email, to_addrs=receiver, msg="Subject:测试邮件\n\nhello" )
补充说明:如果修正地址后仍然报解析错误,检查你当前的网络环境是否能正常访问Gmail服务,网络连通性异常也会触发同类域名解析失败问题。
内容的提问来源于stack exchange,提问作者user17585775
相关产品推荐
相关产品推荐

