排查外发邮件问题

:bookmark: 这是一份 #说明 指南,讨论管理员如何排查 Discourse 站点的出站邮件问题。

:person_raising_hand: 所需用户等级:管理员

Discourse 严重依赖邮件进行用户通知和账户管理任务。如果用户无法收到来自您 Discourse 站点的邮件,可能会导致各种问题,包括错过通知和账户管理故障。

摘要

在本文档中,您将了解:

  • 如何检查已发送邮件日志
  • 如何调查被跳过和退信的邮件
  • 邮件投递问题的常见排查步骤
  • 关键设置及其位置

检查已发送邮件

排查邮件问题时,首先应查看您站点的 AdminEmailsSent 页面(位于 .../admin/email/sent)。Discourse 中的 EmailsSent 页面是管理员监控和排查论坛邮件功能的重要资源。该页面提供了从您的 Discourse 实例成功发送的所有邮件的详细日志。

在此页面上,您可以找到关于已发送邮件的以下所有信息:

  • 发送时间: 邮件发送距今的时间。
  • 用户: 接收邮件的用户。
  • 收件人地址: 收件人的电子邮件地址。
  • 邮件类型: 发送的邮件类型。可能是摘要、邮件列表、用户发帖、用户私信等。
  • 回复密钥: 每封已发送邮件的唯一标识符。该密钥确保当用户回复通知邮件时,Discourse 能够正确地将回复匹配到相应的帖子和用户,从而让用户直接通过邮件参与论坛讨论。
  • 帖子: 生成该邮件的帖子 ID。点击此 ID 将带您进入论坛中的实际帖子。
  • SMTP 详情: 此字段显示尝试发送邮件后从 SMTP 服务器收到的响应。250 2.0.0 响应表示邮件已被第一个邮件服务器(出站中继)接受投递

:information_source: 如果用户报告未收到来自 Discourse 的邮件,而 Discourse 在其 Post & SMTP Details 下显示 250 2.0.0 Ok: queued as ... 消息,您可能需要让用户再次检查收件箱以及垃圾邮件文件夹,看看是否错过了邮件。此状态表明邮件已被第一个邮件服务器接受,但并不保证能投递到最终收件箱。邮件仍可能被后续服务器过滤、延迟或丢弃。

您还可以建议用户联系管理其邮件服务器的支持团队或 IT 部门,查看他们是否了解邮件在报告为“已排队”后可能遇到的任何问题。如果您有权访问出站邮件服务器的日志(或者如果您使用的是 Discourse 托管的基础设施),您可以使用 SMTP 详情中显示的队列 ID 来追踪邮件在投递链中的流转路径。

如果某封邮件未出现在 Discourse 的 EmailsSent 页面上,则意味着该邮件从您的 Discourse 实例成功发送。

让我们看看其他可用于邮件排查的页面。

调查被跳过的邮件

位于您站点的 .../admin/email/skipped 页面,Skipped Emails 页面列出了 Discourse 出于各种原因决定不发送的所有邮件。每封被跳过的邮件旁边都会列出 Skip Reason(跳过原因),从而提供未发送邮件的缘由。

此页面上关于被跳过邮件的可用信息如下:

  • 时间: 邮件本应发送却被跳过的日期和时间。
  • 用户: 本应接收邮件的用户。
  • 收件人地址: 收件人的电子邮件地址。
  • 邮件类型: 被跳过的邮件类型,例如 digest(摘要)、mailing list(邮件列表)、user posted(用户发帖)、user private message(用户私信)等。
  • 跳过原因: 邮件被跳过的原因。常见原因包括用户在网站上活跃、用户已阅读某帖子,或用户超过了退信分数阈值。

:person_raising_hand: Exceeded bounce_score_threshold 是什么意思?

在 Discourse 中,每次发送给某用户邮箱地址的邮件发生退信,该用户的“退信分数”(bounce score)就会增加。“退信分数”是衡量向特定地址发送邮件的失败投递次数的指标。

Discourse 中的 Exceeded bounce_score_threshold 消息指的是用户的“退信分数”超过某个限制的情况,这是您需要排查 Discourse 出站邮件最常见的原因之一。

:person_raising_hand: 什么是退信邮件?

退信邮件是指无法投递给收件人并返回给发送者的邮件。这可能由多种原因引起,一旦发生,发送者的邮件系统会收到关于投递问题的通知。

退信邮件分为两种类型:

  1. 硬退信(Hard Bounce): 这是永久性投递失败。通常发生在收件人的电子邮件地址无效或不再使用时。其他原因可能包括域名不存在,或收件人的邮件服务器完全阻止了投递。
  2. 软退信(Soft Bounce): 这是临时性投递问题。可能是由于收件人的邮箱已满、邮件服务器暂时宕机或过载,或者邮件消息过大。

:person_raising_hand: 我可以调整 bounce_score_threshold 吗?

可以!请参阅:退信分数站点设置

不过,重要的是在调整退信分数设置之前,确保任何潜在的邮件投递问题已完全解决。

鉴于此,让我们讨论一下我们在 Discourse 中可以看到的其他关于退信邮件的信息。

排查退信邮件

退信邮件页面位于 .../admin/email/bounced,提供了所有退信邮件的详细概览。在此页面上,您可以看到关于退信邮件的以下内容:

  • 时间: 邮件退信的日期和时间。
  • 用户: 本应接收邮件的用户。
  • 收件人地址: 收件人的电子邮件地址。
  • 邮件类型: 被跳过的邮件类型。可能是摘要、邮件列表、用户发帖、用户私信等。

Bounced 页面上,您可以点击 :information_source:i)图标以查看有关退信邮件的更多详细信息:


Incoming Email Details(传入邮件详情)窗口将包含有关退信邮件的详细信息,通常 Body(正文)部分会解释邮件退信的原因。

:information_source: 请务必在此处阅读有关退信邮件的完整详情!确定相关邮件退信的原因将有助于识别下一步应采取的措施。

以下是来自 Discourse 的邮件可能退信的几个原因:

  • 无效的电子邮件地址: 如果收件人的电子邮件地址无效、不存在或已被删除,邮件将退信。
  • 邮箱已满: 如果收件人的邮箱已满且无法接受新消息,邮件将退信。
  • 服务器问题: 如果收件人的邮件服务器宕机或暂时不可用,邮件将退信。这通常是临时性问题。
  • 发件人被阻止: 收件人的邮件服务器可能已阻止您的 Discourse 电子邮件地址,或者可能只允许来自特定域的入站邮件,这通常是由于电子邮件安全策略。
  • 激进的垃圾邮件过滤器: 如果邮件内容被收件人的邮件服务器标记为垃圾邮件,邮件可能会退信。
  • 自动回复: 某些自动回复系统(如休假自动回复)可能导致软退信。

:person_raising_hand: 如果退信邮件被目标服务器阻止、拒绝等,我该怎么办?

在这种情况下,让邮件被退信的用户联系其电子邮件服务提供商是最佳选择。电子邮件服务提供商可能能够提供有关邮件为何被阻止、拒绝等的具体见解,并可能能够调整安全设置或将 Discourse 邮件服务列入白名单。他们也可能了解正在进行的邮件服务器维护或其他导致邮件退信的问题。

如果用户控制其电子邮件服务,并且使用的是 Microsoft Hosted Exchange 或 Google Workspace,我们还提供了 在 Microsoft Hosted Exchange 中绕过来自 CDCK 托管站点的邮件的垃圾邮件过滤在 Google Workspace 中绕过来自 Discourse 托管站点的邮件的垃圾邮件过滤 的流程。

:person_raising_hand: 我已解决所有邮件投递问题,如何恢复向特定用户发送邮件?

您需要 重置用户的退信分数,或者如果问题影响了多个用户,您可以 批量重置所有用户的退信分数。一旦退信分数被重置,Discourse 将恢复尝试向那些超过 bounce_score_threshold 的用户投递邮件。

其他步骤

由于涉及众多变量,邮件设置和排查可能很复杂。除了查看您站点的 AdminEmail 部分以排查邮件问题外,如果您仍无法确定为何邮件无法从您的 Discourse 站点正确投递,您可能还需要查看我们的 邮件投递配置检查清单

如果您的 Discourse 站点是最近设置的,我们还有一份关于 排查新 Discourse 安装中的邮件问题 的指南(仅限自托管安装)。

最后,您可以导航到 Admin > Logs.../logs/)查看 Discourse 日志页面,并查找任何与邮件投递相关的错误。

7 个赞

看起来很棒!

我认为我们需要澄清的是,这表示电子邮件已被第一个邮件服务器接受,而不是目标邮件服务器。

但是,鉴于此响应,我们可以搜索第一个邮件服务器上的日志,并确定接下来发生了什么;这有点像一个追溯链。

例如,在我们的托管上,我们可能会看到:


250 2.0.0 Ok: queued as 9F54480721

我们可以搜索第一个邮件服务器的日志,看看接下来发生了什么:

timestamp queueid message
2023-07-17T15:50:51Z 9F54480721 client=mx-out-01a.yyz1.discourse.cloud[2602:fd3f:2:ff01::39]
2023-07-17T15:50:51Z 9F54480721 message-id=<xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx@meta.discourse.org>
3 个赞

这可以在OP中更改吗(或者你是否同意我更改)?人们阅读的范围不会超出前几段,所以他们看不到你的更正,这对于试图解决问题的人来说非常令人困惑,因为他们得出了错误的结论。

1 个赞

它被划掉了,但很微妙,所以我完全删除了它 :+1:t3:

2 个赞

下面的部分仍然显示 250 表示对方已收到邮件。