# Discourse 3.5.0.beta2-dev 的问题 - SMTP 和后台作业

**URL:** https://meta.discourse.org/t/issues-with-discourse-3-5-0-beta2-dev-smtp-and-background-jobs/354732
**Category:** Bug
**Tags:** email
**Created:** [2025年二月27日 01:39 UTC](https://meta.discourse.org/t/issues-with-discourse-3-5-0-beta2-dev-smtp-and-background-jobs/354732 "2025-02-27T01:39:36Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![Kirk](https://avatars.discourse-cdn.com/v4/letter/k/f9ae1b/32.png) [@Kirk](https://meta.discourse.org/u/Kirk)
#### Post date: [2025年二月27日 01:39 UTC](https://meta.discourse.org/t/issues-with-discourse-3-5-0-beta2-dev-smtp-and-background-jobs/354732/1 "2025-02-27T01:39:36Z")

</div>

ChatGPT 为我准备了以下报告，基于我实际安装 Discourse 的经验（我自己不太懂技术，在处理困难的任务时一直依赖 AI 的帮助）。我现在不需要任何帮助，但我希望这份报告能为 3.5.0.beta2-dev 提供有用的反馈。

==================

## 尊敬的 Discourse 团队：

我想分享一下我在运行 **Discourse 3.5.0.beta2-dev** 时遇到的电子邮件问题的故障排除详细信息。我不需要直接的帮助，因为我已经决定回滚到 **3.4.0.beta4-dev** ，但我希望这份报告能有助于识别最新开发版本中潜在的问题。

* * *

## 1. 问题摘要

我在新的 Vultr 实例上执行了 Discourse 的 **全新安装** ，使用了 **20i 的 SMTP 服务** （`smtp.stackmail.com`）。然而，尽管执行了以下操作，电子邮件仍未送达：

- **SMTP 连接测试成功** （`openssl s_client -connect smtp.stackmail.com:587 -starttls smtp`）。
- **20i 的邮件日志中没有出现任何错误** （这表明 Discourse 实际上并未发送电子邮件）。
- **Sidekiq 未能处理电子邮件作业** 。

这出乎我的意料，因为几周前，我在一个 **相同的实例** 上成功安装了 **Discourse 3.4.0.beta4-dev** ，并且没有遇到任何电子邮件问题。

经过彻底的调试，我发现我当前的安装意外地安装了 **Discourse 3.5.0.beta2-dev** ，这很可能是导致问题的原因。

* * *

## 2. 确定的主要问题

### A. 电子邮件未送达

- **SMTP 设置正确** ，已通过手动测试（`swaks` 和 `openssl` 测试均成功）进行验证。
- 电子邮件被 **排入 Sidekiq 队列但从未收到** 。
- **20i 的邮件日志** 显示 **没有拒绝或投递尝试** （表明邮件从未离开 Discourse）。
- `production.log` 中 **未出现任何与电子邮件相关的错误** （`grep "smtp"` 未返回任何内容）。

### B. Sidekiq 和 Redis 问题

- 最初， **Sidekiq 未运行** （`Sidekiq::Workers.new.size` 返回 `0`）。
- 手动重启 Sidekiq（`sv restart sidekiq`） **失败** ，因为 Sidekiq 作为服务 **缺失** 。
- **Redis 正在运行** （`redis-cli ping` 返回 `PONG`），但 **Discourse 日志仍显示 Redis 连接错误** （`Errno::ECONNREFUSED`）。
- **Sidekiq 日志显示作业因 Redis 连接问题而失败** ，即使 Redis 已确认处于活动状态。
- **手动启动 Sidekiq** （`bundle exec sidekiq`） **允许作业处理，但电子邮件仍未发送** 。

### C. 安装之间的版本不匹配

- 我\*\*之前的安装（成功运行的）\*\*是 **3.4.0.beta4-dev** 。
- 我 **当前的安装意外地安装了 3.5.0.beta2-dev** ，尽管使用了相同的设置方法。
- 由于电子邮件在 **3.4.0.beta4-dev** 中运行得非常完美，我 **怀疑 3.5 中存在回归或重大更改** 。

* * *

## 3. 已采取的措施（均失败）

我们系统地尝试了以下解决方案：

✅ **使用以下方法确认了 SMTP 连接：**

```plaintext
openssl s_client -connect smtp.stackmail.com:587 -starttls smtp # 成功
swaks --to my-email --server smtp.stackmail.com --port 587 --auth LOGIN # 成功

```

✅ **验证了电子邮件已入队：**

```plaintext
Jobs.enqueue(:user_email, type: :test_message, to_address: 'masden@kumagaku.ac.jp') # 返回了作业 ID
Sidekiq::Queue.new("default").size # 返回 0（表示作业已处理）

```

✅ **检查了 Discourse 日志：**

```plaintext
grep "smtp" /shared/log/rails/production.log # 没有与 SMTP 相关的错误

```

- **Redis 连接失败** （`production.log` 中的 `Errno::ECONNREFUSED`）。

✅ **重启并手动触发了服务：**

```plaintext
sv restart sidekiq # 失败，服务缺失
redis-cli ping # 确认正在运行
bundle exec sidekiq # 作业已处理但未发送电子邮件

```

✅ **检查电子邮件是否被 20i 阻止：**

- 20i 邮件日志中 **没有拒绝或投递尝试** 。
- 如果电子邮件被拒绝，应该会有日志条目，但 **没有任何内容出现** 。

* * *

## 4. 结论：回滚到 3.4.0.beta4-dev

经过广泛的故障排除，我决定 **擦除安装并重新安装 3.4.0.beta4-dev** ，因为我之前的安装在该版本上运行得非常完美。

虽然我不需要直接的帮助，但我希望报告这些问题，因为：

- **3.5 版本中电子邮件处理方式可能已更改** ，导致无法进行 SMTP 握手。
- **Sidekiq 服务缺失和 Redis 错误** 表明 3.5 版本中存在后台作业处理问题。
- 由于我能够 **毫无问题地安装 3.4.0.beta4-dev** ，这表明 **3.5 版本可能存在回归** 。

## 我希望这份报告有助于识别 **Discourse 3.5.0.beta2-dev** 中潜在的问题。

**此致，**  
Kirk

---

_[View the full topic](https://meta.discourse.org/t/issues-with-discourse-3-5-0-beta2-dev-smtp-and-background-jobs/354732)._
