无法发送电子邮件

我创建账户时没有收到电子邮件,我想知道是不是我做错了什么……SMTP地址和SMTP域有什么区别?

SMTP 地址:user@example.com
SMTP 域名:example.com

1 个赞

您能帮帮我吗?我在线上使用了一个 SMTP 工具,一切运行正常,但 Discourse 在我注册时似乎不发送电子邮件。

你好,欢迎你 @ethhaqn :slight_smile:

你是否查看过故障排除指南?

3 个赞

我使用了 telnet mail.theapi.tech 25,它返回了 220 myhelper.tech ESMTP Postfix,这是我过去用于测试此系统的一个旧域。您认为这会影响电子邮件发送吗?如果是,我可以在哪里更改该域?再说一遍,这是一个旧域,但我不知道我在哪里输入了它,以至于当我运行 telnet mail.theapi.tech 25 时会返回它。

另外,值得一提的是 ./discourse-doctor 告诉我有一个不常见的错误,似乎无法解决我的问题。

此外,我没有使用 ./discourse-setup 来设置 Discourse,因为 80 端口已被占用。相反,我手动编辑了 containers/app.yml 并运行了 ./launcher rebuild app

我使用了 tail shared/standalone/log/rails/production.log,日志显示:

Processing by FinishInstallationController#confirm_email as HTML
  Rendered finish_installation/confirm_email.html.erb within layouts/finish_installation (Duration: 0.7ms | Allocations: 255)
  Rendered layout layouts/finish_installation.html.erb (Duration: 6.7ms | Allocations: 2103)
Completed 200 OK in 8ms (Views: 7.4ms | ActiveRecord: 0.0ms | Allocations: 2735)
start
  Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 34)
Delivered mail 0e5b023a-90f9-4c23-ae2b-488b4d70d907@theapi.tech (39.6ms)
Job exception: hostname "mail.theapi.tech" does not match the server certificate

fail

openssl s_client -connect mail.theapi.tech:25 -starttls smtp -showcerts

Verification error: self signed certificate

因此,您需要在 app.yml 中设置 DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

2 个赞

那不就意味着您不需要验证您的电子邮件了吗?

不。它将使 Discourse 跳过当前正在失败的验证。

好的,搞定了。我该如何获取 SSL 证书?顺便说一下,这在我的 app.yml 中:

image

我认为设置自己的邮件服务器部分超出了本论坛的讨论范围。

1 个赞

不,不是在我的邮件服务器上。是在我的 Discourse 网站上。

请参考 https://meta.discourse.org/t/running-other-websites-on-the-same-machine-as-discourse/17247,如果仍然失败,请开启新主题。

1 个赞

您好,我已将我的 Discourse 本地实例升级到 2.9.0.beta4,即使在 containers/app.yml 文件中添加了 DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: "none"(并重建了应用程序)后,我仍然收到此类错误:

  Rendered layouts/email_template.html.erb (Duration: 0.2ms | Allocations: 34)
Delivered mail 31c5b9eb-1077-4155-b040-314c4a8566cb@taverne.colorfulminis.com (11.3ms)
Job exception: SSL_connect returned=1 errno=0 state=error: certificate verify failed (self signed certificate)

这显然导致我的 Discourse 实例无法再发送电子邮件。
关于此问题是否有任何已知问题?

供您参考:我正在运行一个预生产实例,版本为 2.8.0.beta9,配置完全相同,电子邮件发送得非常顺利。

感谢您的帮助。

1 个赞

您好 Alexis,

我遇到了完全相同的问题,是在虚拟机(Ubuntu 22.04,使用基于 docker 的 2.9.0.beta4 Discourse 实例)上。即使在 container/app.yml 中设置了 DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none(并且 docker 环境中的 $DISCOURSE_SMTP_OPENSSL_VERIFY_MODE 也设置为 none),仍然会报 certificate verify failed (self signed certificate) 错误。

编辑:供您参考,稳定版(2.8.3)工作正常。

供参考:启用 DISCOURSE_SMTP_ENABLE_START_TLS: true 解决了我的问题。

对于所有在此主题中搜索答案但未成功的人:
我刚刚发现我的 VPS 托管提供商要求我在新安装的服务器上先启用出站邮件端口。我知道这一点,但在睡了一晚后才想起来 :wink:
祝您托管愉快! :smiley: