好的,我正在使用 Mailjet 作为 SMTP,但在验证过程中遇到了问题。首先,我无法轻松验证单个邮箱地址 noreply@discourse.example.com。
我更倾向于验证整个域名 discourse.example.com,但这里又遇到了两个问题。我本可以用一个特殊名称的文本文件来完成,但似乎 Discourse 不允许这样做(尽管此时我确实有点想配置 nginx 配置文件,让该 URL 返回一些内容)。好吧,也许可以使用 DNS TXT 记录?但这里又遇到了麻烦,因为我管理的是 example.com 的 DNS,而 Mailjet 要求我为 essentially mailjet.discourse.example.com 添加一条记录,这是一个子域名,我不太清楚该如何添加。我使用的是 Ubuntu 16.04 上的 BIND 9.3 版本,希望能得到一些指点?我可以找到如何为 discourse.example.com 添加 TXT 记录的信息,但 Mailjet 却说“不行,必须是 mailjet_xxxxx.discourse.example.com”,也就是说这是一个子域,我认为这意味着需要额外的区域(zone)。我并不是 DNS 专家,不过安装复杂的东西还算拿手。
但现在,由于尝试了各种方法,我已经完全搞糊涂了……所以,能帮帮我吗?我的意思是,最好的消息莫过于有人告诉我:“当然可以,只需在 Discourse 的根目录下放置一个文本文件,就像这样……” 
您是否知道您的域名注册商或 DNS 管理器?
您需要在注册商提供的 DNS 管理器中创建 DNS 条目,或者如果您使用像 Cloudflare 这样的服务,则需要在其中创建 DNS 记录。
好的,我终于让 TXT 验证方法生效了,即使有 Discourse 的“限制”也是如此。所以,如果你也想这样做以避免折腾 DNS 相关设置(毕竟,呃……对我来说,这比折腾 Web 服务器可怕多了,当然,具体情况因人而异)。
你需要能够编辑 Discourse 安装的 Nginx 配置文件。具体位置取决于你安装 Discourse 的位置和方式。在我的情况下,我是在裸机上直接安装的,没有使用 Docker。我可以在 /etc/nginx/conf.d/discourse.conf 找到它——你的情况可能有所不同。
在该文件中,会有一个类似这样的 location 块:
location / {
....
}
其中还会包含一些内部嵌套的 location 指令。
在这里再创建一个新的 location 块(同样要嵌套在这里,但不要嵌套在其他 location 块内部!):
location /stupidfilename.txt {
alias /var/www/stupidfilename.txt;
}
其中 stupidfilename.txt 是对方要求你添加的特殊文件名,而路径(/var/www)位于 Discourse 内容之外,但服务器上的 URL 可以普遍访问。之所以能生效,是因为 / 是 Discourse 的根路径,因此 URL 看起来就像在你的 Discourse 站点下:http://discourse.example.com/stupidfilename.txt(此处添加了空格以禁用自动生成的链接)。
所以……把文件放在 Discourse 目录之外,配置 location 块将其别名指向该文件,然后重启 Nginx。
搞定……
(我回头编辑了这条回答,以提高可读性等,因为我已将其标记为我的解决方案)
dandv
(Dan Dascalescu)
6
与在 Docker 中创建一个可公开访问的文件相比,创建一条 TXT 记录简直易如反掌。