# Digest 邮件发送中的无限循环

**URL:** https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361
**Category:** Bug
**Tags:** activity-summary
**Created:** [2019年十月6日 21:34 UTC](https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361 "2019-10-06T21:34:19Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![doom369](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/doom369/32/157964_2.png) [@doom369](https://meta.discourse.org/u/doom369)
#### Post date: [2019年十月6日 21:34 UTC](https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361/1 "2019-10-06T21:34:19Z")

</div>

大家好。

我们的 Discourse 服务器陷入了无限循环，不停地发送邮件。以下是 `shared/standalone/log/rails/production.log` 的输出：

```
Delivered mail 7db8eecd-c36a-419c-ae34-0561b08bae25@community.xx.cc (1322.2ms)
  Rendered user_notifications/digest.text.erb (Duration: 50.1ms | Allocations: 12577)
  Rendering user_notifications/digest.html.erb within layouts/email_template
  Rendered user_notifications/digest.html.erb within layouts/email_template (Duration: 139.5ms | Allocations: 26910)
  Rendering user_notifications/digest.text.erb
  Rendered user_notifications/digest.text.erb (Duration: 71.7ms | Allocations: 13505)
Delivered mail 5bbf2e54-96a8-437d-a032-69f98a00f22a@community.xx.cc (1485.2ms)
  Rendering user_notifications/digest.html.erb within layouts/email_template
  Rendered user_notifications/digest.html.erb within layouts/email_template (Duration: 70.9ms | Allocations: 20613)
  Rendering user_notifications/digest.text.erb
  Rendered user_notifications/digest.text.erb (Duration: 38.2ms | Allocations: 11390)

```

这个问题是突然发生的（可能是在摘要定时任务启动时：

 ![07-00_30_56](https://global.discourse-cdn.com/meta/original/3X/f/f/ff3084c0e7f5b87dd060177bc8ffdb3315f7eda1.png)）

现在有一个核心完全忙于发送摘要邮件。

- 重新构建应用没有帮助；

- 更新到最新版本后也没有变化；

- 开启“禁用所有用户的摘要邮件”并重新构建应用后仍无变化；

我还能做什么？我该如何停止这种情况？  
提前感谢。

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [2019年十月6日 22:35 UTC](https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361/2 "2019-10-06T22:35:01Z")

</div>

我可能说错了，但我觉得发生的情况是：摘要邮件被排入了队列，现在正在发送。它会一直发送直到全部发完。

如果我的判断正确，你可以先禁用邮件，然后找到包含这些邮件的表并删除它们。但下次发送摘要邮件时，这种情况还会再次发生。

---

<div class="post-metadata">

### Author: ![doom369](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/doom369/32/157964_2.png) [@doom369](https://meta.discourse.org/u/doom369)
#### Post date: [2019年十月7日 07:06 UTC](https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361/3 "2019-10-07T07:06:59Z")

</div>

> [@pfaffman](#):
>
> 我认为发生的情况是摘要邮件被排队了，现在正在投递。它会一直持续直到所有邮件投递完毕。

是的，但这已经持续三天了。所有其他邮件（例如注册邮件）也不再投递了。社区功能正常，但所有邮件发送功能都失效了。  
我发现了一个非常类似的问题——[https://meta.discourse.org/t/extreme-memory-usage-due-to-bad-mail-credentials/120080。所以这看起来像是某种棘手的漏洞。](https://meta.discourse.org/t/extreme-memory-usage-due-to-bad-mail-credentials/120080%E3%80%82%E6%89%80%E4%BB%A5%E8%BF%99%E7%9C%8B%E8%B5%B7%E6%9D%A5%E5%83%8F%E6%98%AF%E6%9F%90%E7%A7%8D%E6%A3%98%E6%89%8B%E7%9A%84%E6%BC%8F%E6%B4%9E%E3%80%82)

我找到的唯一解决方法是：在我的 SMTP 提供商处移除了身份验证令牌。Discourse 开始显示数百个错误，之后负载才下降。随后我恢复了令牌，现在一切似乎都正常了。

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [2019年十月12日 22:30 UTC](https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361/4 "2019-10-12T22:30:56Z")

</div>

您的邮箱凭证是否不正确？

---

<div class="post-metadata">

### Author: ![doom369](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/doom369/32/157964_2.png) [@doom369](https://meta.discourse.org/u/doom369)
#### Post date: [2019年十月13日 07:00 UTC](https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361/5 "2019-10-13T07:00:16Z")

</div>

@codinghorror 我找到了问题的根本原因。我们的邮件服务商出于他们自己愚蠢的原因，移除了我们账户的已验证主机记录。这些主机记录用于在邮件的 `from` 字段中提供我们的主机信息。因此，在他们这样做之后，Discourse 陷入了无限循环。我认为 Discourse 的流程在这个情况下也存在一个 bug，因为它应该报告错误并停止占用 100% 的 1 个核心。所以账户本身是正确的。但邮件服务商会返回一个发送邮件的错误，比如“发送主机错误”之类的，而这个流程导致了问题。

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [2019年十月13日 07:25 UTC](https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361/6 "2019-10-13T07:25:37Z")

</div>

我同意，这是一种糟糕的状态，我们应该更好地处理它。

---

<div class="post-metadata">

### Author: ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)
#### Post date: [2019年十月14日 00:19 UTC](https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361/7 "2019-10-14T00:19:36Z")

</div>

现在一切恢复正常了吗？

---

<div class="post-metadata">

### Author: ![doom369](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/doom369/32/157964_2.png) [@doom369](https://meta.discourse.org/u/doom369)
#### Post date: [2019年十月14日 08:09 UTC](https://meta.discourse.org/t/endless-loop-in-digest-emailing/130361/8 "2019-10-14T08:09:17Z")

</div>

是的。在我更改了邮件凭证之后。
