# 设置路由器端口转发以接收邮件

**URL:** <https://meta.discourse.org/t/getting-incoming-mail-to-work-when-port-forwarding-from-a-router/219128>\
**Category:** Self-hosting\
**Created:** [2022年二月23日 01:19 UTC](https://meta.discourse.org/t/getting-incoming-mail-to-work-when-port-forwarding-from-a-router/219128 "2022-02-23T01:19:17Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![markcoley](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/markcoley/32/242366_2.png) [@markcoley](https://meta.discourse.org/u/markcoley)\
**Post date:** [2022年二月23日 01:19 UTC](https://meta.discourse.org/t/getting-incoming-mail-to-work-when-port-forwarding-from-a-router/219128/1 "2022-02-23T01:19:17Z")

</div>

我已将一个可正常工作的测试环境从 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](mailto: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:](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’

有什么想法吗？

---

<div class="post-metadata">

**Author:** ![markcoley](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/markcoley/32/242366_2.png) [@markcoley](https://meta.discourse.org/u/markcoley)\
**Post date:** [2022年二月23日 15:13 UTC](https://meta.discourse.org/t/getting-incoming-mail-to-work-when-port-forwarding-from-a-router/219128/2 "2022-02-23T15:13:43Z")

</div>

在又试了一次并意识到我把 IP 地址/主机名在 /etc/hosts 文件中放反了之后，我认为我已经搞定了。但是，如果 mail-receiver 容器被重启，它会丢失我添加到容器的 /etc/hosts 文件中的额外行。有什么方法可以让 mail-receiver.yml 文件自动添加额外行吗？

---

<div class="post-metadata">

**Author:** ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)\
**Post date:** [2022年十一月19日 20:10 UTC](https://meta.discourse.org/t/getting-incoming-mail-to-work-when-port-forwarding-from-a-router/219128/3 "2022-11-19T20:10:40Z")

</div>

> [@markcoley](#):
>
> 有没有办法自动添加额外的行到 mail-receiver.yml 文件？

您可以查看其他修改文件的模板。例如，Web 模板就是这样做的。
