Google Colab运行SMTP连接时报OSError: [Errno 99]错误怎么解决
报错根本原因
该报错的核心是Google Colab底层基于Google Cloud Platform(GCP)运行,GCP默认对所有普通计算实例封禁了SMTP协议默认使用的25号端口的出站连接,以此防范垃圾邮件滥用行为。你本地个人设备没有对应的端口封禁策略,所以可以正常连接,Colab实例发起25端口的出站连接时会被网络ACL直接拦截,导致套接字无法分配可用的连接地址,最终抛出OSError: [Errno 99] Cannot assign requested address错误。
调整方案
- 更换连接端口:Gmail SMTP服务器同时支持587(STARTTLS加密)、465(SSL加密)端口,这两个端口不在Colab的封禁列表内,修改对应代码即可正常运行,参考修改后代码:
import smtplib # 方案1:使用587端口+STARTTLS加密 smtp = smtplib.SMTP(host='alt1.gmail-smtp-in.l.google.com', port=587, timeout=10) smtp.starttls() # 建立连接后执行ehlo验证 print(smtp.ehlo()) # 方案2:使用465端口+SSL加密 # smtp = smtplib.SMTP_SSL(host='alt1.gmail-smtp-in.l.google.com', port=465, timeout=10) # print(smtp.ehlo())
- 替换调用方案:如果是用于Gmail邮件的收发操作,更推荐使用官方Gmail API替代原生SMTP调用,完全规避端口限制问题,同时权限控制颗粒度更精细,安全性更高。
- 注意:Colab普通用户没有权限修改底层GCP网络ACL规则,没有办法解封25端口,不需要尝试寻找底层网络配置调整入口,无操作权限。
内容的提问来源于stack exchange,提问作者Question-er XDD
相关产品推荐
相关产品推荐

