# 聊天摘要跳过错误

**URL:** <https://meta.discourse.org/t/chat-summary-skipping-bug/356257>\
**Category:** Bug\
**Tags:** chat\
**Created:** [2025年三月7日 14:05 UTC](https://meta.discourse.org/t/chat-summary-skipping-bug/356257 "2025-03-07T14:05:13Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![merefield](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/merefield/32/176214_2.png) [@merefield](https://meta.discourse.org/u/merefield)\
**Post date:** [2025年三月7日 14:05 UTC](https://meta.discourse.org/t/chat-summary-skipping-bug/356257/1 "2025-03-07T14:05:13Z")

</div>

Chat Summary 电子邮件被跳过，因为用户的电子邮件无效：

![image](https://cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/meta/original/4X/b/a/5/ba5521a804ce46250dc282746fc29b5ef9d406ce.png)

我做了一些分析，我认为我知道原因：

最终跳过的地方在这里：

> <https://github.com/discourse/discourse/blob/ffdc97f37296e9568d7a5dcec4d1e90e973a6893/lib/email/sender.rb#L52>

这是因为 `message.to` 为空。

`message.to` 为空是因为传递给 `send_user_email` 的参数不包含 `to_address`，并且此参数从未用用户的首选电子邮件进行丰富，例如：

```plaintext
args: {"type"=>"chat_summary", "user_id"=>3, "force_respect_seen_recently"=>true, "current_site_id"=>"default"}

```

> <https://github.com/discourse/discourse/blob/ffdc97f37296e9568d7a5dcec4d1e90e973a6893/app/jobs/regular/user_email.rb#L47>

这是由 Chat Mailer 调用的，你会注意到 `to_address` 缺失：

> <https://github.com/discourse/discourse/blob/ffdc97f37296e9568d7a5dcec4d1e90e973a6893/plugins/chat/lib/chat/mailer.rb#L16>

这也许没关系，但到你到达 `send_user_email` 的顶部时，我认为 `to_address` 应该用用户的电子邮件进行丰富，这样当它被传递下去时，邮件发送器就可以访问此属性，并且邮件发送会成功。

当我向 `send_user_email` 添加这个小的 monkey-patch 时，问题就消失了：

```ruby
      # CORE BUG: if we don't set to_address, ultimately the email won't send and will be skipped.
      # This is a core bug and we will need to raise it on Meta.
      if args[:to_address].blank? && user&.primary_email&.email
        args[:to_address] = user&.primary_email&.email
      end

```

---

<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:** [2025年三月9日 23:07 UTC](https://meta.discourse.org/t/chat-summary-skipping-bug/356257/2 "2025-03-09T23:07:56Z")

</div>

非常感谢 @merefield 的调试，我们会尽快让会员经验团队查看此问题。

---

<div class="post-metadata">

**Author:** ![davidb](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/davidb/32/554671_2.png) [@davidb](https://meta.discourse.org/u/davidb)\
**Post date:** [2025年五月26日 15:23 UTC](https://meta.discourse.org/t/chat-summary-skipping-bug/356257/7 "2025-05-26T15:23:17Z")

</div>

我对此进行了一些研究，如果我们沿着这条线索追溯，应该会有丰富的信息：

它从邮件发送器开始 [此处](https://github.com/discourse/discourse/blob/main/app/jobs/regular/user_email.rb#L76)，然后 [调用用户通知扩展](https://github.com/discourse/discourse/blob/main/app/jobs/regular/user_email.rb#L239)，该扩展 [在此处](https://github.com/discourse/discourse/blob/main/plugins/chat/lib/chat/user_notifications_extension.rb#L133) 使用用户电子邮件进行丰富，然后将其传递给 [此处](https://github.com/discourse/discourse/blob/main/lib/email/build_email_helper.rb#L6) 的构建电子邮件助手，最后在发送之前 [此处](https://github.com/discourse/discourse/blob/main/lib/email/message_builder.rb#L13) 在消息构建器中设置地址。

除此之外，聊天摘要电子邮件已经在其他站点上运行，因此这里很可能还有其他原因导致了问题。

我认为一个临时的解决方案是将用户电子邮件传递给作业，这将使我们从一开始就更有信心/更清楚地了解是否存在正确的数据：

> <https://github.com/discourse/discourse/commit/487f610fc10aa85c1e0783917efaffbda2d8a1bf>
>
> Pass user email rather than relying on enrichment when sending summary
> emails.

---

<div class="post-metadata">

**Author:** ![j.jaffeux](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/j.jaffeux/32/60297_2.png) [@j.jaffeux](https://meta.discourse.org/u/j.jaffeux)\
**Post date:** [2025年六月29日 21:47 UTC](https://meta.discourse.org/t/chat-summary-skipping-bug/356257/8 "2025-06-29T21:47:06Z")

</div>

因未收到修复反馈，关闭。
