Ryan_N
2020 年11 月 25 日 01:46
1
这是用于初次安装,我绝非 DNS 专家!目前的情况如下:
出站邮件测试运行正常。我使用的是 MailGun 推荐的 “mg” 子域名,通过 2525 端口发送邮件。我在设置的相关字段中已填入 MailGun 的 Webhook API(他们有三种 API——我填的是正确的那个吗?)。此外,我已在 DNS 设置中为 “mg” 子域名添加了 MX 记录。MailGun 的验证检查显示一切正常,mail-tester.com 也是如此。
入站邮件已配置为使用名为 “inbound” 的子域名。如果我从 Gmail 账户向 fake@inbound.[mydomain].org 发送邮件,我可以在 mail-receiver 日志中看到该邮件到达。但如果我从 Discourse 通过“设置 > 邮件”向同一地址发送测试邮件,该邮件似乎就消失了——“拒绝”文件夹中没有任何记录。其余部分我使用的是简单直接的入站邮件投递方式 。
由于安装过程中其他一些自己造成的失误,我决定从头开始:我删除了 Droplet,重新安装了 Discourse,并再次从头开始。不过,我没有 删除 MailGun 账户,实际上仍在沿用之前的同一个 API Webhook。这会不会是问题所在?我确实 使用了新的 Discourse 生成的 API 密钥(旧的密钥显然在删除 Droplet 时已失效)。
我能想到的唯一其他问题是 mail-receiver.yml 中的端点。我的配置如下:DISCOURSE_MAIL_ENDPOINT: 'https://inbound.[mydomain].org/admin/email/handle_mail'
关于问题出在哪里,大家有什么想法吗?(最让人头疼的是,不久前我明明已经让一切正常运行了——就在我删除 Droplet 之前。看来我学得有点慢:stuck_out_tongue_winking_eye:)。谢谢大家!
这应该是您论坛的域名,而不是您的邮箱域名。能否确认您的论坛地址并非 inbound.[mydomain].org?例如,如果 meta 使用此方法,URL 应如下所示:
DISCOURSE_MAIL_ENDPOINT: 'https://meta.discourse.org/admin/email/handle_mail'
此外,这与 Mailgun 无关,只需确保忽略 Mailgun 关于为域名添加 MX 记录的指示即可。正如以下说明:
注意:像 Mailgun 这样的出站邮件服务商可能会要求您添加指向其服务器的 MX 记录。您应当移除这些记录,确保您论坛的 MX 记录仅指向您论坛的域名。SPF 和 DKIM 记录仍需指向您的出站邮件服务商服务器,以便您能够发送邮件。
Ryan_N
2020 年11 月 25 日 02:54
4
@tobiaseigen 越来越接近了!我通过从端点中移除传入邮件的子域名进行了更改。保存后,我重新启动了邮件接收器(因为我不知道自己到底在做什么!)。测试后,仍然没有成功。随后我对应用进行了完整重建。接着,我用两个不同的邮箱地址创建了两个新账户。然后,我使用管理员账户向其中一个账户发送了私信。正如预期,系统生成了一封邮件。随后,我通过邮件回复了该私信。以下是邮件日志中的结果:
<22>Nov 25 02:38:20 postfix/pipe[89]: AB09913F5CB: to=<replies+da32f82583043bb63fee8be53f9bd3fd@inbound.[mydomain].org>, relay=discourse, delay=0.35, delays=0.19/0/0/0.15, dsn=4.3.0, status=deferred (temporary failure)
确实越来越接近了!不过,这个“临时失败”究竟是怎么回事呢?已经过了 13 分钟,邮件仍未成功投递到 Discourse,这很奇怪。
需要说明的是,我创建“inbound”子域名的原因是希望 admin@[mydomain].org 的邮箱地址由另一台邮件服务器处理。
我对您使用域名的方式有些困惑。在我的网站上,用于接收邮件的 DISCOURSE_MAIL_ENDPOINT 和 MX 记录指向的是同一个域名,并指向 Discourse 服务器,正如 Configure direct-delivery incoming email for self-hosted sites with Mail-Receiver 中原始帖所解释的那样。但您似乎试图使用不同的域名。
通常,您应该使用如 forum.mydomain.org 这样的子域名来部署 Discourse,以便将论坛与 mydomain.org 上的主网站和电子邮件分离开来。
Ryan_N
2020 年11 月 25 日 19:33
6
tobiaseigen:
我对您使用域名的方式有些困惑。
很高兴为您澄清 为了简单起见,我将假设我的域名是 thesite.org。我在邮件接收器日志中看到了一个 SSL 问题:
\u003c19\u003eNov 25 19:11:29 receive-mail[160]: Failed to POST the e-mail to https://inbound.thesite.org/admin/email/handle_mail: hostname "inbound.thesite.org" does not match the server certificate (OpenSSL::SSL::SSLError)
不过,回答您的问题,我有两个目标,我想这些目标非常普遍:
admin@thesite.org 成为用户联系管理员的地址
thesite.org 直接启动论坛(不使用子域名)
目前我的 Namecheap DNS 设置如下(TTL = 自动,优先级 = 10):
1 A 记录 @ (IP 地址)
2 A 记录 inbound. (IP 地址)
3 CNAME email.mg. mailgun.org.
4 CNAME inbound. thesite.org.
5 CNAME www. thesite.org.
6 TXT @ forward-email=(内容)
7 TXT mg v=spf1 include:mailgun.org ~all
8 TXT smtp._domainkey.mg. k=rsa; p=(内容)
9 MX @ mx1.forwardemail.net.
10 MX @ mx2.forwardemail.net.
11 MX inbound. thesite.org.
12 MX mg. mxa.mailgun.org.
13 MX mg. mxb.mailgun.org.
我的 containers/mail-receiver.yml 设置如下:
MAIL_DOMAIN: inbound.thesite.org
DISCOURSE_MAIL_ENDPOINT: 'https://thesite.org/admin/email/handle_mail'
DISCOURSE_API_KEY: (内容)
DISCOURSE_API_USERNAME: system \u003c-- 与 API 密钥相同
* 注意 —\u003e 我保留了 LetsEncrypt 的行(没有删除 “#”)
其他设置:
通过命令行将主机名更改为 inbound.thesite.org
联系邮箱 = admin@thesite.org
通知邮箱 = noreply@mg.thesite.org
回复邮箱 1 = replies+%{reply_key}@inbound.thesite.org
回复邮箱 2 = %{reply_key}@inbound.thesite.org
根据密钥查找相关帖子 = 开启
手动轮询 = 开启
Mailgun API 密钥 = 已输入 …但 这可能是个问题,因为它来自之前的安装尝试
设置 > 邮件 > 设置:地址 = smtp.mailgun.org
设置 > 邮件 > 设置:端口 = 2525
设置 > 邮件 > 设置:user_name = postmaster@mg.thesite.org
对于接下来该怎么做,您有什么建议吗?… 提前非常感谢!同时也提醒一下 @pfaffman ,他也曾非常友善地帮助我解决过去设置中遇到的困难。您的“直截了当”指南也极其实用。干杯!
pfaffman
(Jay Pfaffman)
2020 年11 月 25 日 19:45
7
你重新构建了邮件容器和应用容器吗?我认为简单的解决方案是移除那些试图为邮件接收器分配证书的配置。该证书在网站上是有效的吗?
如果 Discourse 站点不在 inbound.thesite.org,那就是问题所在。其核心思路是 Discourse 站点和邮件接收器的主机名必须保持一致。你需要参考 使用多个域名配置 Let’s Encrypt 来解决这个问题。
这已经超出了邮件接收器操作指南的预期范围。如果上述内容不足以帮助你解决问题,且你有预算,欢迎随时联系我。
Ryan_N
2020 年11 月 25 日 20:18
8
那么问题就变成了:我上面定义的两个 目标能否同时实现(它们看起来极其常见)?唯一的变通方案是否就是在 DNS 设置中,将输入 www.thesite.org 和/或 thesite.org 的访客重定向到 subdomain.thesite.org?如果确实如此,那我只能接受将对外显示的邮箱地址改为像 admin@subdomain.thesite.org 这样难看的地址。
如果万不得已,我可以接受更改管理员邮箱地址。感觉我们似乎忽略了某个显而易见的问题,但也可能完全是我多虑了(很可能就是如此!)。
pfaffman
(Jay Pfaffman)
2020 年11 月 25 日 20:21
9
如果您希望邮件接收器在不同于您 Discourse 域名的域名上接收邮件,我认为这是可行的。最简单的方法是不要在邮件接收器中使用 Let’s Encrypt 证书。
Ryan_N
2020 年11 月 25 日 20:55
10
@pfaffman 你真是个天才!成功了!! 按照《使用多个域名配置 Let’s Encrypt》的指南,重新构建 Discourse 后再重新构建 mail-receiver(这两步中可能有一步并非必要),问题就解决了。大功告成!
今晚晚些时候,我想把“简单直接的邮件接收”主题帖复制粘贴到 Google 文档中,并提出我的修改建议。这绝不是任何人的错,但对于像我这样不熟悉或不懂命令行操作的人来说,主题帖中的部分内容确实不够直观。我认为我之前提到的两个目标对许多安装场景来说都非常普遍,而我现在知道最终目标是可以实现的。
我还有其他关于整个设置教程的建议。我已经列出了一份待修改建议的清单,旨在让整个过程尽可能简单。
非常感谢你在此过程中给予我的帮助!真的非常感激!