最近有很多更新。其中一个破坏了主题行(不再包含类别),现在根本没有邮件发出。用户非常不高兴。我不知道如何开始调试这个问题。我在哪里可以找到错误日志,我记得有一个关于 sidekiq 队列等的页面,但我找不到它。任何帮助都将不胜感激。
是的,我注意到昨天更新后电子邮件通知似乎没有触发,但摘要/总结仍然在发送。只有我们遇到这个问题吗?
这可能是因为 sidekiq 在应该处理计划中的作业时未能处理。
我们今天早些时候在我们的 CD 站点上也发现了同样的问题。请确保您至少提交到:
(我认为是这个提交,不完全确定)
要查看问题是否相同,请检查 /sidekiq 中的计划作业,看看是否有过去的作业。
是的,我们也被卷入了其中。一次更新已经解决了这个问题。
4 个帖子被拆分到新主题:Email From: 标题丢失了“via SITENAME”文本
我确认在 latest-release +103 上有数百个 sidekiq 作业失败
已在 latest-release +153 上修复
我已经更新到最新版本,但我的其中一个网站仍然存在电子邮件发送问题。发送测试邮件时,我只收到一条错误消息。
ERROR - 文件末尾已到达
我现在在手机上,等我到电脑旁时会检查 sidekiq 和日志。还有其他建议我去哪里查看吗?
嗨,Tobias!
你的问题不同——连接在初始成功连接后不久就挂起了,等待响应。
我猜你正在尝试使用错误的协议连接到错误的端口……你使用的是什么设置?
使用(逻辑和错误消息已最近更新的)rake emails:test 任务是否显示任何不同的错误?
嗨,Michael!感谢你的回复。我非常想念你们!![]()
嗯……我刚把我的网站从 DO 迁移到 Hetzner,前几周运行得很好。我的另一个网站也运行正常。这真是一个谜。大约一周前它突然停止工作了,当我查看时看到了错误。我联系了 Hetzner(他们拒绝提供帮助)和 Mailgun。根据 Mailgun 的说法:
感谢您的回复,我们看到的最后一个被接受的已认证事件是在 1 月 11 日,并通过 SMTP 发送的。
您能确认是否进行了任何更改吗?请提供您的发送应用程序配置的屏幕截图供我们审查,以及您的发送应用程序/SMTP 发送日志中的任何相关错误。
我只是更改了我的 mailgun 密码,以防是这个问题,然后又试了一次,但没有成功。
rake emails:test 输出:
root@ubuntu-4gb-nbg1-1-app:/var/www/discourse# rake emails:test
正在使用 smtp.mailgun.org:587、用户名:postmaster@domain 和纯文本身份验证测试发送。
====================================================================================== 错误 =======================================================================================
未知错误!
EOFError: 文件结束
===================================================================================== 解决方案 =====================================================================================
这不是一个常见的错误。没有推荐的解决方案!
请将上述确切的错误消息报告到 https://meta.discourse.org/
(如果您找到了解决方案,也请报告!)
====================================================================================================================================================================================
我认为它甚至在尝试登录之前就失败了。
为了排除 Discourse 的影响,请尝试从主机和容器内部进行测试:
$ openssl s_client -connect smtp.mailgun.org:587 -starttls smtp
您应该会看到大量输出,然后可以尝试进行身份验证:
○ → openssl s_client -connect smtp.mailgun.org:587 -starttls smtp
Connecting to 34.160.63.108
CONNECTED(00000003)
…
SSL-Session:
…
---
read R BLOCK
EHLO localhost
250-2ed1d46f4d7dec773e2a97b59f3a3bf8a2d6db54f94eead5dcf49e3ea1caac18
250-AUTH PLAIN LOGIN
250-SIZE 52428800
250-8BITMIME
250-SMTPUTF8
250 PIPELINING
AUTH PLAIN bWljaGFlbABtaWNoYWVsAHBhc3N3b3Jk
501 Username used for auth is not valid email address
535 Authentication failed
closed
您需要输入的字符串是:
EHLO localhost
AUTH PLAIN bWljaGFlbABtaWNoYWVsAHBhc3N3b3Jk
(该字符串是凭据 michael/password,因此显然不起作用,但如果您想手动尝试,可以参阅此帖子以了解如何构建用于您实际凭据的字符串)
希望亲眼看到什么有效、什么失败会有所帮助。
您可能还想尝试使用 swaks(如果可用)——它可能是一个您可以安装的操作系统软件包。
它更容易一些,您可以例如:
swaks --to frodo@shire.net --from bilbo@shire.net --auth PLAIN --auth-user bilbo --auth-password ring --server smtp.mailgun.org:587 --tls
但您可以使用您的真实凭据。
该命令的输出可能也有助于揭示问题。
我尝试使用 swaks 得到了这个:
=== 正在尝试 smtp.mailgun.org:587...
=== 已连接到 smtp.mailgun.org。
*** 远程主机意外关闭连接。
这启发我去从我的另一个服务器上检查,swaks 显示“Great success”(大成功)——这个信息相当可爱!
<~ 250 Great success
~> QUIT
<~ 221 See you later. Yours truly, Mailgun
=== 与远程主机连接已关闭。
所以问题要么是 mailgun 阻止了我的服务器,要么是我的服务器配置有误。我会先和 mailgun 确认,如果不是,我就会销毁并重建我的服务器。
有道理;这本质上与以下内容是相同的错误:
正如你所怀疑的,最可能的原因是某些外部因素干扰了连接。
我怀疑您需要使用端口 2525 而不是 587
Hetzner 明确指出他们不屏蔽 587 端口。
另外,如果他们屏蔽了,可能会显示为连接建立失败。
这几乎排除了 Discourse 和 Mailgun 配置的问题。
此时最有用的诊断方法是尝试从受影响的服务器使用备用 Mailgun 提交端口:
openssl s_client -connect smtp.mailgun.org:2525 -starttls smtp
(或者使用 swaks 进行相同的测试)。
Mailgun 特别支持 2525 端口,以应对 587 端口受到防火墙、出口过滤或提供商级别网络规则干扰的环境。
如果:
- 2525 端口工作而 587 端口不工作 → 很可能是网络/IP/路由干扰
- 两个都失败 → 更有力的证据表明有外部因素正在阻止或终止连接
无论哪种情况,这种行为都比 Discourse 或 Sidekiq 的回归更符合“外部连接干扰”。
我还没有收到 Mailgun 的回复……如果他们帮不了我,我的计划是直接用一个新的 Hetzner 服务器重新开始。
我确实尝试了使用其他端口进行 swaks 测试,有趣的是,我在 2525 端口也收到了相同的错误,并且是立即、没有任何延迟地收到的。
=== 正在尝试 smtp.mailgun.org:2525...
=== 已连接到 smtp.mailgun.org。
*** 远程主机意外关闭了连接。
但是在 25 和 465 端口我收到了不同的错误,并且响应等待了几秒钟。
=== 正在尝试 smtp.mailgun.org:25...
*** 连接到 smtp.mailgun.org:25 时出错:
*** 连接超时
=== 正在尝试 smtp.mailgun.org:465...
*** 连接到 smtp.mailgun.org:465 时出错:
*** 连接超时
不确定该如何解释。也许是服务器上的防火墙配置错误,阻止了某些端口。
那是有意为之且是预期的。
Hetzner 默认会阻止这些端口。
说得通……但奇怪的是 25 和 465 端口比其他端口花费更长时间才失败。无论如何,这不紧急,我会等候 Mailgun 的回复。这是关于我的家庭网站,所以我只是鼓励大家登录并检查通知是否有更改,而不是只等邮件!
我明天要去德国探亲和参加葬礼……下周我会再来看这个问题,很可能会用一个新的服务器重新开始。
感谢所有的指导!我通过这个过程学到了很多。真的很喜欢那个 swaks 工具。
时间信息确实很有用。
当一个端口(更一般地说,是流量)被阻止时,它可以被丢弃(静默拒绝)或被拒绝(会向源发送一个“不可达”消息(例如,端口不可达))。
静默丢弃就是你在 25/465 端口上看到的情况——连接尝试发生后,直到超时才发生任何事情。
拒绝会导致出现诸如“连接被拒绝”或“端口不可达”的消息。
这表明是预期的行为——你建立了一个连接,然后该连接立即被关闭。
你更改了源地址,所以你可以尝试的另一件事是更改目标地址。尝试对例如 smtp.gmail.com 或 smtp.office365.com 运行相同的命令。你应该会收到身份验证失败的提示,这有力地表明是 Mailgun 在拒绝你。
@supermathie 的解释非常到位 ![]()
时间差异实际上是有用的信号,而不是噪音。
总结一下您看到的情况:
- 25 / 465 超时 → 静默丢弃(Hetzner 策略级阻止,预期之中)
- 2525 个连接后立即关闭 → TCP 路径没问题,但远程端终止了会话
最后这一点是关键细节。
因为:
- TCP 握手成功
- TLS 协商从未真正开始
- 并且是瞬间发生的
……这强烈表明是 Mailgun 提早拒绝了连接,而不是 Discourse、Sidekiq 或 Ruby。
这与我们最近看到的一些情况一致:
- IP 信誉/基于区域的过滤
- 新的 Hetzner IP 范围尚未受信任
- 或是在 SMTP 标语交换之前的 Mailgun 侧策略检查
Discourse 中没有任何东西会导致如此即时的远程套接字关闭——Sidekiq 只是将消息传递给 Net::SMTP 然后等待。
如果您想稍后获得另一个非常强有力的确认(完全不着急):
openssl s_client -connect smtp.gmail.com:587 -starttls smtp
您应该会收到一个正常的 SMTP 标语,然后是身份验证失败——这基本上可以证明出站 SMTP 本身没问题,只有 Mailgun 的行为不同。
完全理解暂停此事——尤其是在当前情况下。
我真的很抱歉您在处理所有其他事情的同时还要应对这个 ![]()
如果 Mailgun 回复了一些有用的信息,那很好——但老实说,重新开始或更换提供商(Brevo、Postmark 等)通常比等待 SMTP 信誉修复要快。
您已经以完全正确的方式调试了这个问题——这里没有任何迹象表明您遗漏了什么或错误配置了 Discourse。
祝您在德国旅途平安,多保重。