安装后邮件发送失败

我已安装 Discourse 并获得了管理员权限,但当我尝试发送邀请或测试邮件时,完全失败。

我有一台邮件服务器(mail.mydomain.com),账号为 postmaster@mydomain.com。在查阅了一些支持问答后,似乎 mydomain.com 可能需要配置 SPF 和 DKIM DNS 记录。我在安装说明中是否遗漏了这一步?

我找到并测试了 SPF 记录,看起来没问题。
我可以从个人邮箱向 postmaster@mydomain.com 发送邮件,并且能正常接收。

但如果我从 Discourse 发送测试邮件,则无法收到。是否需要配置 DKIM?如果需要,该如何安装 DKIM?我是否再次遗漏了某个步骤?

先谢过…

SPF 和 DKIM 不应阻止从 Discourse 发出的邮件到达您的邮件服务器。请检查论坛的 /logs 以及邮件服务器的日志,查看是否有任何错误信息。

关于这些记录的文档应由您的电子邮件服务提供商提供,因为设置方法并非只有一种。但正如前面所述,这极不可能是导致您邮件投递失败的原因。

感谢大家。抱歉回复晚了。看来发出的邮件测试都掉进了黑洞。我现在明白了,SPF 和 DKIM 记录并不是必需的。以下是我以管理员身份登录后看到的情况:

在 /emails/settings 中,我输入任意邮箱地址(无论是我的还是已邀请用户的,是否属于主机域名均可),都会出现以下错误信息:

发送测试邮件时出现问题。请仔细检查您的邮件设置,确认主机未阻止邮件连接,然后重试。

根据我对 Discourse 邮件设置的理解,我认为配置是正确的,但我也没有看到明确的定义。主机域名并未阻止邮件,因为我可以从我的个人邮箱发送邮件。我检查了 Discourse droplet 的 UFW,显示为禁用状态。

/logs/error 日志为空。虽然有一个明显的错误(如上所述),但它并未被记录!“记录所有邮件处理失败到 [/logs]”选项已启用(已勾选)。我在主机域名上也找不到任何错误。

此外,我还有一个安装了 WP Discourse 插件但未激活的 WordPress 站点。这个插件是否可能在某种程度上有所帮助?

提前感谢!

编辑……
我返回到仪表盘,看到了以下内容:

有 7 封邮件任务失败。请检查您的 app.yml 文件,确保邮件服务器设置正确。[查看 Sidekiq 中的失败任务](https://talk.thesturdytree.com/sidekiq/retries)

我点击了 Sidekiq,看到了 7 条重复的条目,内容如下:

[3 小时后](https://talk.thesturdytree.com/sidekiq/retries/1585096899.6700559-58d9041788be7dd98d743894) 15 [default](https://talk.thesturdytree.com/sidekiq/queues/default) Jobs::InviteEmail {"invite_id"=>2, "current_site_id"=>"default"} Jobs::HandledExceptionWrapper: Wrapped Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>

[3 小时后](https://talk.thesturdytree.com/sidekiq/retries/1585097052.665957-fc6f06d948e7d37ec15354cc) 15 [critical](https://talk.thesturdytree.com/sidekiq/queues/critical) Jobs::CriticalUserEmail {"type"=>"email_login", "user_id"=>1, "email_token"=>"da467ec8590f0ecb0220d3aed5b33c61", "current_site_id"=>"default"} Jobs::HandledExceptionWrapper: Wrapped Net::ReadTimeout: Net::ReadTimeout with #<TCPSocket:(closed)>

该管理员仪表盘页面还显示“您已是最新版本!”,但当我通过 SSH 登录到 droplet 时,系统提示“有 55 个软件包可更新”。这是否需要采取某些操作?

这是两个独立的问题。管理仪表板提示的是 Discourse 本身已是最新版本。而登录 Droplet 时收到的消息则表明有系统软件可以更新。您应该研究一下如何为该系统集成自动更新功能。

这听起来像是您的 Discourse 实例无法连接到指定邮件服务器的指定端口。请确保您的配置正确,并确认 DigitalOcean 没有阻止您尝试使用的端口的出站连接。

https://github.com/discourse/discourse/blob/master@{2020-03-24}/docs/INSTALL-cloud.md#post-install-maintenance

在 Ubuntu 中,请使用 dpkg-reconfigure -plow unattended-upgrades 命令。

建议按以下逻辑顺序执行:

  1. 验证您的 Droplet 是否可以通过 telnet 连接到邮件服务器
  2. 验证 SMTP 凭据是否在独立于 Droplet 的情况下正常工作

如果步骤 1 失败,则说明存在网络问题。DigitalOcean 已知会阻止某些出站端口,这种情况占问题的 85%。

如果步骤 1 和 2 都成功,请检查您的 app.yml 文件。很可能是密码中包含某些字符导致无法正确解析(约占 5%),或者您输入有误。

关于邮件服务器,如果您自行托管邮件服务器而非使用推荐的邮件提供商,那么 SPF 和 DKIM 确实有助于提高邮件送达率,但您很可能会面临更多邮件相关问题的挑战。

感谢大家的帮助。
我想问题出在我使用的 GoDaddy 邮件服务器上。我始终未能确定问题的具体原因。看来 GoDaddy 在共享账户方面存在不少问题。最终,我认为不值得为此费心,于是搜索了推荐的邮件服务提供商,并选择了 mailjet.com。我注册了一个免费的 Mailjet 账户,并相应地修改了 app.yml 文件。此外,还需要进行一些额外的 Mailjet 配置。再次尝试 Discourse 邮件测试:成功。我的 Discourse 社区规模较小,因此 Mailjet 免费邮件数量的限制应该不会造成问题。目前一切看起来都很顺利,但我明白前方仍有许多配置工作要做。
再次感谢…