尝试通过 Mailjet 进行验证,需要 TXT 文件或 DNS 记录

好的,我正在使用 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 的根目录下放置一个文本文件,就像这样……” :frowning:

您是否知道您的域名注册商或 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。

搞定……

(我回头编辑了这条回答,以提高可读性等,因为我已将其标记为我的解决方案)

在 Docker 中创建一个可公开访问的文件相比,创建一条 TXT 记录简直易如反掌。