使用Python发自动化邮件遇[Errno97]地址族不支持协议错误的解决方法
解决Python发送邮件时的[Errno 97] Address family not supported by protocol错误
这个问题我之前排查过,核心原因是你SMTP服务器的连接参数传递方式错误,具体看这行代码:
server = smtplib.SMTP('smtp.gmail.com: 587')
错误原因
smtplib.SMTP()的正确参数格式是:第一个参数是主机名(字符串),第二个参数是端口号(整数),两者需要分开传递。你把主机和端口写在同一个字符串里,还加了多余的空格,导致SMTP客户端无法正确解析地址,进而触发了"Address family not supported by protocol"的错误。
修正步骤
- 修正SMTP连接代码,把主机和端口分开传递:
server = smtplib.SMTP('smtp.gmail.com', 587) - 额外注意(针对Gmail):
- 如果你用的是普通账号密码,Gmail现在默认会阻止这种登录方式,建议你启用两步验证后创建应用专用密码,用这个密码代替原密码登录。
- 确保你的账号没有开启过于严格的安全限制,否则即使代码正确也可能登录失败。
修正后的完整代码
# import necessary packages from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText import smtplib # create message object instance msg = MIMEMultipart() # 替换为你的应用专用密码 password = "your_app_specific_password" msg['From'] = "risk@gmail.com" msg['To'] = "game@gmail.com" msg['Subject'] = "Photos" # 修正后的SMTP连接参数 server = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() # Login Credentials for sending the mail server.login(msg['From'], password) server.sendmail(msg['From'], msg['To'], msg.as_string()) server.quit() # 记得关闭连接释放资源
内容的提问来源于stack exchange,提问作者aeapen
相关产品推荐
相关产品推荐

