首次注册邮件返回码丢失

首次注册邮件使用最新 Docker 镜像安装时,我的 SMTP 服务器返回了以下响应:

意外返回代码 554(期望 250):
“访问被拒绝:用户 `arn:aws:iam::[acct]:user/[user]' 无权对资源 `arn:aws:ses:us-west-1:[acct]:identity/[identity]' 执行 `ses:SendRawEmail' 操作”。

然而,Discourse 日志文件 production.log 显示如下内容:

Started PUT "/finish-installation/resend-email" for [ip] at 2020-11-16 20:58:10 +0000
Processing by FinishInstallationController#resend_email as HTML
  Parameters: ...
Completed 200 OK in 23ms (Views: 6.4ms | ActiveRecord: 0.0ms | Allocations: 6023)
...
Delivered mail [randid]@[hostname] (191.3ms)

在我看来,网站或至少日志应该返回错误信息,而不是成功消息。

谢谢,
Jeff

1 个赞

通常情况下,邮件是在后台队列中发送的,因此对用户来说是不可见的。

不过,我也可以接受让向导在出现失败时更加醒目和突出,但这需要轮询服务器来检测状态。这可能是一个较大的改动,我也不太确定。

2 个赞

对于向导:向导不显示失败是可以的,但也不应表明邮件已成功发送。更接近事实的提示会更有帮助。如果显示返回状态过于困难,不如改为:“注册邮件已成功加入队列。请检查 /path/to/log 以查看状态。”

对于日志:工作线程应记录状态,尤其是在发生错误时。我不熟悉该架构,但在“unicorn.stderr.log”或其他任何地方都看不到有用的信息。一定有什么东西在吞没返回码和错误消息……

1 个赞

如果您有冒险精神,我非常乐意看到能改进此内容的 PR。

2 个赞

感谢你对这一变更持开放态度。我会将其加入待办事项清单,但如果有人抢先处理,我也完全不会介意 :slight_smile:

1 个赞

管理员登录后,管理员控制台会显示邮件错误,表明这些错误已存储在数据库中,并且在首次管理员注册完成之前,本应可以通过数据库访问。

skipped_email_logs 包含了我正在寻找的信息。

如果您以用户 discourse 登录到 Discourse 容器,可以运行以下命令:

psql discourse -c "select * from skipped_email_logs"