在自托管的 Discourse 上通过 Namecheap Private Email (SMTP) 发送邮件时遇到问题

大家好,

我一直在尝试配置自托管 Discourse 安装的传出邮件,但到目前为止还没有成功。即使有 Namecheap 支持的参与,我们也无法使其正常工作。希望这里有人能指出我遗漏了什么。

设置

  • 托管:DigitalOcean 虚拟机,通过官方 Docker 方法 (/var/discourse) 安装 Discourse。

  • 域名:通过 Cloudflare 管理(网站的代理 A 记录,MX/邮件记录的 DNS 仅限)。

  • 邮件提供商:Namecheap 私人邮件

  • Discourse 版本:最新的 tests-passed 分支。

有效的部分

  • 我可以在我的 hello@domain.com 收件箱中毫无问题地接收邮件。

  • MX、SPF、DKIM 和 DMARC DNS 记录已设置并验证。

  • 通过 Gmail → hello@domain.com 的入站邮件工作正常。

失败的部分

  • 传出邮件(激活邮件、Discourse 的测试邮件)从未送达。

  • Namecheap 支持已确认我的凭据和设置是正确的,但无法解释为什么从服务器发送会失败。

当前 app.yml 配置

DISCOURSE_SMTP_ADDRESS: mail dot privateemail dot com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: hello at domain dot com
DISCOURSE_SMTP_PASSWORD: “PASSWORD”
DISCOURSE_SMTP_ENABLE_START_TLS: true
DISCOURSE_SMTP_DOMAIN: domain dot com
DISCOURSE_NOTIFICATION_EMAIL: hello at domain dot com DISCOURSE_SMTP_AUTHENTICATION: login

我也尝试了端口 465,配置如下:

DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_SMTP_SSL: true

已采取的调试步骤

  • 在 Cloudflare 中验证 DNS 记录是否正确(MX、SPF、DKIM、DMARC)。

  • 确认本地 UFW/iptables 没有阻止端口 587 和 465。

  • 尝试在 /etc/gai.conf 中强制首选 IPv4。

  • 使用 ncopenssl 进行测试 → 仍然超时。

  • 即使是 Namecheap 自家的说明(587 STARTTLS 或 465 SSL)也导致服务器发送失败。

问题

有人成功将 Namecheap 私人邮件 与 Discourse SMTP 结合使用吗?

  • DigitalOcean 虚拟机连接 mail.privateemail.com 的 587/465 端口是否存在已知问题?

  • 我应该放弃 Namecheap SMTP,改用事务性邮件服务(Postmark、Mailgun、SendGrid)吗?

  • 此提供商是否需要特殊的 app.yml 标志?

感谢您的任何指导。我在这个设置上遇到了瓶颈。

您应该使用交易邮件服务,例如 Mailgun、Brevo 或 Amazon SES。这是从您的论坛发送电子邮件的最佳方式。

请参阅 discourse/docs/INSTALL-email.md at main · discourse/discourse · GitHub
您可能还想查看:
Troubleshoot email on a new Discourse install

1 个赞

失败消息是什么?

DigitalOcean 是否正在阻止传出邮件,许多其他人也报告了此问题?

您尝试过端口 2525 吗?

1 个赞

感谢各位的回复,我非常感激。

@pfaffman 我不知道 Digital Ocean 会阻止出站邮件。我没有尝试过 2525。

搜索后,我偶然发现了一篇文章,他们阻止了所有出站邮件 Why is SMTP blocked? | DigitalOcean Documentation

我用以下命令做了一个小测试:

nc -vz ``smtp.mailgun.org`` 2525 并通过了测试。587 和 465 失败。

我已提交工单请求打开这些端口。

如果他们不打开,我需要研究一下 mailgun,希望它是免费的。

如果您联系他们的支持以激活账户,在更改为计划类型设置后,您应该可以在免费计划上正常使用。

我一直认为这与 BT 邮箱或 Gmail 非常相似,不适合 Discourse。

您可以进行 POP3 轮询来接收邮件,但因为您有一个 x86 VPS,我推荐 #mail-receiver。

1 个赞

Digital Ocean 已回复,并回复了他们的邮件:

“我们很乐意让我们的安全团队仔细检查并为您解除 SMTP 端口的阻止。为了帮助我们更好地了解您的需求并推进您的请求,您能否分享以下有关您业务需求的详细信息:

  • 您将发送哪种类型的电子邮件(例如,交易邮件、新闻通讯等)?

  • 您是计划托管自己的电子邮件还是使用第三方发送服务?

  • 如果可能,请提供有关您的端口要求的背景信息,以及是否无法使用非标准端口或 API。

一旦我们收到您的回复,我们将把您的请求连同所有提供的详细信息转发给团队。”

在这种情况下,您应该切换到使用事务性邮件服务,例如 Mailgun(每天免费 100 封邮件)或 Brevo(每天免费 300 封邮件)。然后,您可以切换到在 app.yml 文件中使用端口 2525,因为该端口未被阻止。

2 个赞

来自 DigitalOcean 支持的问候!

我们理解您有应用程序需求或业务需求来启用端口 25、465 和 587。但是,根据我们目前的政策,我们无法满足解除此端口限制的请求。

我们建议在您的应用程序允许的情况下使用其他端口,例如端口 2525。您也可以使用 SendGrid 的 REST API,它允许您通过 HTTP 请求发送电子邮件,而不是传统的 SMTP 协议(如果适合您),或者使用另一个第三方发送服务。

如果您有任何其他疑问,请随时与我们联系。我们随时为您服务!

所以我会尝试 Mailgun

1 个赞

也许可以跟进一下,说你不需要 25 个?

@Ethsim2 谢谢,我认为这很清楚,就像 Linode 一样,他们关闭了所有端口以对抗垃圾邮件,只有 Linode 会根据要求开放端口,但没关系。

我将选择 MailGun。

2 个赞

我这辈子都没遇到过我的全新账户被封 LOL
“Mailgun:您的账户已被暂时禁用。”

有什么其他的 SMTP 服务我能用吗?

1 个赞