我已将一个可正常工作的测试环境从 DigitalOcean 迁移到一个家庭 Linux 服务器(Ubuntu),但一直无法让入站邮件正常工作。我已在路由器上设置了端口转发 25,并且可以通过查看邮件日志(能在日志中看到发件人和收件人)来发现邮件已到达。邮件接收器尝试将电子邮件 POST 到 Discourse 时似乎出现了故障,并且我收到了超时错误。我怀疑这是因为我的 ISP 不允许通过路由器进行回送,因此如果 Discourse 实例的公共域名在 POST 命令中使用,它将挂起,因为根本没有响应,路由器会丢弃数据包。
这也导致我无法在运行 Discourse 的机器上查看 Discourse 网站……直到我意识到可以在 /etc/hosts 文件中添加一行,将公共域名指向内部网络 IP 地址,从那时起我就可以在 Firefox 中查看 Discourse 实例了。
我推测可能有一些方法可以让 mail-receiver 容器知道要做类似的事情。根据我的研究,它不使用 /etc/hosts 文件,这可能是问题的根源。我尝试在 mail-receiver.yml 文件中添加行以允许 extra_hosts:,但似乎无法使其生效。如果我进入 mail-receiver 应用程序并尝试向 /etc/hosts 添加另一行(使用 cat >>),尽管我能看到该行出现,但问题依然存在。
这是日志中显示 POST 失败的行(注意:此示例中的域名是虚构的):
<23>Feb 23 01:00:31 receive-mail[133]: Recipient: abc@example-discourse.org.uk<19>Feb 23 01:01:31 receive-mail[133]: Failed to POST the e-mail to https://example-discourse.org.uk/admin/email/handle_mail: execution expired (Net::OpenTimeout)<19>Feb 23 01:01:31 receive-mail[133]: /usr/lib/ruby/2.7.0/net/http.rb:960:in `initialize’
有什么想法吗?