Python smtplib发Gmail邮件报错socket.gaierror: [Errno 11001] getaddrinfo失败
错误原因与修复方案
- 核心报错原因:你代码中填写的SMTP服务器地址
stmp.gmail.com存在拼写错误,正确地址为smtp.gmail.com,你遇到的socket.gaierror: [Errno 11001] getaddrinfo failed错误就是因为系统无法解析这个拼写错误的域名导致的。 - 隐藏代码错误:你定义邮件正文的变量名为
Email_body,但在构造msg字符串时使用了未定义的body变量,修正地址后运行到该处也会抛出未定义变量的报错,需要把{body}替换为{Email_body}。 - 额外权限注意:目前Gmail已禁止直接用账号密码调用SMTP服务,你需要先给Google账号开启两步验证,之后生成应用专用密码,将代码中的登录密码替换为这个应用专用密码才能正常登录。
修正后的完整代码
import smtplib with smtplib.SMTP('smtp.gmail.com', 587) as smtp: smtp.ehlo() smtp.starttls() smtp.ehlo() # 替换为自己的 Gmail 地址和生成的应用专用密码 smtp.login('example@gmail.com', '你的应用专用密码') Email_subject = '2 Factor Authentication Code' Email_body = "Hello" # 修正变量名引用错误 msg = f'Subject: {Email_subject}\n\n{Email_body}' # 第二个参数替换为实际收件人邮箱 smtp.sendmail('example@gmail.com', 'example@gmail.com', msg)
内容的提问来源于stack exchange,提问作者Shlok
相关产品推荐
相关产品推荐

