保存电子邮件域或电子邮件账户时出现SMTP超时或连接错误

当你在电子邮件域或电子邮件账户中输入邮件服务器的主机、端口和加密设置,然后点击保存时,设置并没有被保存,反而立刻出现超时或连接错误。这是因为 ERPNext 会在你保存的那一刻测试连接——它不会存储未经测试的设置——所以错误总是指向具体的问题:端口与加密方式组合错误,或者连接在 15 秒内根本无法到达服务器。

错误信息

你会看到以下错误之一,可能是在保存时弹出的提示,也可能是账户已保存但之后邮件发送失败时,出现在电子邮件队列条目的错误字段中:

Invalid Outgoing Mail Server or Port: STARTTLS extension not supported by server.
Invalid Outgoing Mail Server or Port: Connection unexpectedly closed: timed out
Incoming email account not correct. Error connecting via IMAP/POP3: timed out
TimeoutError: timed out

如果你看到的是 421 ... too many failed logins 或 535 ... User has been restricted,请跳到“服务商拒绝连接或账户”一节——那是另一种原因,只是错误标题相同。

为什么会发生

保存电子邮件域或电子邮件账户并不只是存储你的设置。ERPNext 会当场与邮件服务器建立真实连接——接收邮件使用 IMAP/POP3 连接,发送邮件使用 SMTP 连接——并给它 15 秒时间。如果服务器有响应但拒绝了你发送的特定端口/加密组合,或者连接在这段时间内根本没有到达任何地方,保存就会立即失败,并显示上述错误之一。

这些问题分为两种看起来相似但实际不同的问题:

  • 端口/加密组合错误。邮件服务商期望端口和加密方式有特定的配对,把它们弄混就会产生上面提到的 STARTTLS 和“连接意外关闭”错误:

    端口 需要检查的设置 作用
    465 勾选使用 SSL,不勾选使用 TLS 隐式 SSL/TLS——连接从第一个字节起就是加密的。
    587 勾选使用 TLS,不勾选使用 SSL 先以明文连接开始,然后通过 STARTTLS 升级为加密连接。这就是使用 TLS复选框对发送邮件的实际作用——并非隐式 TLS。
    25 很少用于需要认证的发送 大多数服务商阻止在此端口上进行认证提交;请改用 465 或 587。

    在指向 587 端口时勾选使用 SSL,或在指向 465 端口时勾选使用 TLS,是最常见的情况:服务器在该端口上期望一种加密方式,却收到了另一种。

  • 连接根本没有到达服务器。主机名拼写错误、服务商的防火墙不允许来自其自身网络外部的连接,或者——特别是在 Frappe Cloud 上——邮件服务商没有允许 Frappe Cloud 当前的出站 IP 地址进行连接。Frappe Cloud 不会阻止任何出站 SMTP、IMAP 或 POP3 端口——如果连接超时或操作系统报告“网络不可达”,限制几乎总是出在接收邮件服务器一侧,而不是 Frappe Cloud 一侧。

如何修复

  1. 仔细阅读确切的错误文本——上述两种问题需要不同的修复方法,错误信息会告诉你属于哪一种。STARTTLS 或“意外关闭”错误是端口/加密不匹配(第 2 步)。单纯的超时或“网络不可达”是连接从未成功建立(第 3 步)。
  2. 端口/加密不匹配:打开电子邮件域(如果未关联到域,则打开电子邮件账户),根据上表将端口与正确的加密复选框匹配。大多数服务商都会公布两种选项;使用与表中主机和端口组合相匹配的那一种。

此示例(一个测试电子邮件域的发送设置)展示了 587 + 使用 TLS 的配对——这是服务商期望在 587 上使用 STARTTLS 时的正确组合。如果你的服务商公布的是 465 端口,请改为在此处勾选使用 SSL,并保持使用 TLS 不勾选。
3. 连接从未到达服务器:首先确认主机和端口输入正确,然后检查限制是否在服务商一侧。由于 Frappe Cloud 不会阻止出站连接:

  • 找到你站点当前的出站 IP 地址(在 Frappe Cloud 仪表板上进入站点 → 概览),并确认你的邮件服务商的防火墙或 IP 允许列表包含该地址。待核实:此字段的确切标签和位置在本次会话中未在 Frappe Cloud 仪表板上实时重新验证。
  • 如果你的服务商只允许一组固定的 IP,而你的站点出站 IP 会变化(例如服务器调整规格后),要么将新 IP 重新添加到服务商的允许列表,要么将站点迁移到具有静态 IP 的专用服务器上,以免再次发生。静态 IP 是专用服务器上的付费附加项,共享主机上不可用。
  • 如果相同的设置在另一台服务器上有效,但从本站点却无效,这一差异就证明问题出在服务商一侧,而不是 Frappe Cloud 的限制——请向你的邮件服务商反映,而不是联系支持团队。
  1. 服务商拒绝连接或账户:出现 421 ... too many failed logins 或类似的“尝试次数过多”错误,通常意味着错误凭据被重试了足够多次,导致服务商临时封禁了发起连接的 IP——请先修正密码,然后等待或请服务商解除封禁。出现 535 ... User has been restricted(或类似措辞)错误,是邮件服务商设置的账户级限制,而不是连接问题——请联系服务商的支持团队解除限制。
  2. 特定服务商的情况:
  • Microsoft 365 / Outlook.com / Exchange Online:Microsoft 要求这些邮箱使用 OAuth;无论端口和加密设置如何,使用普通 SMTP 密码通常都会失败。请按照 Microsoft Office365 Email OAuth 操作,而不是去排查端口。
  • Gmail / Google Workspace:使用 imap.gmail.com 端口 993 并勾选 Use SSL,以及 smtp.gmail.com 端口 587 并勾选 Use TLS(ERPNext 在 Email Account 上内置的 GMail 服务预设正是使用这些设置)。需要核实:启用了两步验证的 Google Workspace 账户通常需要使用 App Password 而不是常规账户密码——这是 Google 账户的通用政策,并非 Frappe 特有,且本主题中未通过工单确认。
  • PEC(意大利认证电子邮件):使用你的 PEC 服务商公布的确切主机、端口和加密方式——PEC 服务商通常对任何其他设置都会严格拒绝。需要核实:本主题的样本中没有涉及 PEC 的工单;这是一般性指导,并非经验证的模式。

如果这样仍无法解决

  • 如果你的邮件服务商确认端口已开放,但连接仍然仅从 Frappe Cloud 失败,请提交支持工单,附上确切的错误文本、站点名称以及 Email Domain/Account 的设置(不含密码)。
  • 如果错误是关于 SSL 证书验证,而不是超时或 STARTTLS 不匹配,那么这是邮件服务器一侧的证书问题,不在本文的讨论范围内。

如何预防

  • 当业务域名自有的 SMTP 在 Frappe Cloud 上持续失败时,作为备用方案,请使用内置的 Email Delivery Service,而不是为外发邮件配置自己的 Email Account——参见 Upgrade the Email Delivery Service plan。需要核实:它是否会在没有任何 Email Account 被标记为 Default Outgoing 时自动使用,还是需要显式步骤,本次会话中未确认。
  • 如果你的邮件服务商严格采用 IP 白名单,请一次性申请一个静态 IP,而不是每次 Frappe Cloud 的出站 IP 变化时都重新添加。
  • Email Account
  • Email Domain
  • Microsoft Office365 Email OAuth
  • Obtain a Static IP
  • Upgrade the Email Delivery Service plan