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

GCP Ubuntu虚拟机Python脚本通过SMTP发送邮件超时如何解决

GCP Ubuntu虚拟机Python SMTP连接超时问题解决

核心原因

  • 代码参数错误:你定义了SMTP端口为587,但未将该参数传入smtplib.SMTP()构造函数,smtplib默认使用25端口建立连接,GCP至今默认封禁所有25端口的出向流量,是触发超时的直接原因。同时代码重复实例化两次SMTP对象,属于冗余逻辑,可能额外触发GCP的端口拦截规则。
  • 潜在环境限制:若修复代码后仍存在问题,可能是VPC防火墙未放通587端口出向规则、虚拟机本地iptables/ufw限制了Python进程的网络请求、GCP组织策略存在额外的邮件端口限制。

解决方案

  1. 优先修复代码错误,正确传入端口参数,删除冗余逻辑,参考修正代码如下:
import smtplib,ssl
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import formatdate
import time

timestr = time.strftime('(%Y-%m-%d)')
username = 'me@mydomain.de'
password = 'secretpw'
send_from = 'me@mydomain.de'
send_to = 'recipient@herdomain.com'
body = 'hello'
smtp_host = 'smtp.ionos.de'
smtp_port = 587

msg = MIMEMultipart()
msg['From'] = send_from
msg['To'] = send_to
msg['Date'] = formatdate(localtime=True)
msg['Subject'] = 'important email'
msg.attach(MIMEText(body, 'plain'))

# 使用上下文管理器自动管理连接,正确传入端口参数,设置超时避免长时间等待
with smtplib.SMTP(host=smtp_host, port=smtp_port, timeout=10) as smtp:
    smtp.ehlo()
    smtp.starttls()
    smtp.ehlo() # TLS握手完成后重新发送EHLO命令符合SMTP协议规范
    smtp.login(username, password)
    smtp.sendmail(send_from, send_to.split(','), msg.as_string())
  1. 检查GCP VPC防火墙规则,确认出向规则允许TCP 587端口的所有请求,没有IP段、服务账号的额外限制。
  2. 验证虚拟机本地网络配置,执行sudo ufw status检查防火墙规则,确认没有限制Python进程的对外连接,可临时关闭防火墙测试连接效果。
  3. 若使用企业级GCP账号,联系管理员确认项目所属的组织策略中,没有额外封禁SMTP相关端口的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:48:05