Discourse上的邮件问题与反向代理

我在 app.yml 中将邮件配置为如下所示:

  DISCOURSE_SMTP_ADDRESS: mail.mysecrect.tld
  DISCOURSE_SMTP_PORT: 465
  DISCOURSE_SMTP_USER_NAME: minegenix@mysecret.tld
  DISCOURSE_SMTP_PASSWORD: <secret>

还在日志中发现了这个:

fail
Delivered mail 3ff63fed-4142-4042-ab33-29493b32b3a6@beta2.mysecret.tld (30001.9ms)
Job exception: execution expired

您可能需要在 app.yml 中添加此项

DISCOURSE_SMTP_ENABLE_START_TLS: false

好的,顺便说一句,我使用 mailcow!

服务器正在运行 discourse beta2.mysecret.tld - 而不是 mysecret.tld?

请尝试以下选项:

DISCOURSE_SMTP_ADDRESS: 172.17.0.1 # 在此处使用内部 IP - 邮件服务器域名可能无法正确解析
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: "您的 SMTP 用户名"
DISCOURSE_SMTP_PASSWORD: "您的 SMTP 密码"
#DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none
DISCOURSE_SMTP_DOMAIN: mysecret.tld

mysecret.tld 只是一个占位符,隐藏了我的真实域名,因为我不想透露我的论坛地址 :slight_smile:

您是否正在发送发件人电子邮件地址为“…\@ beta2. mysecret.tld”的邮件 - 但您的 mailcow 帐户是为“…\@mysecret.tld”设置的?

我正在从…@ mysecret.tld 发送电子邮件,并且该网站运行于 beta2.mysecret.tld

@Sprisa 添加我发布的设置并重新构建。
看看是否有帮助。
@rrit 你没明白我的意思 :man_facepalming:

1 个赞

是的,我目前正在这样做

1 个赞

顺便问一下,每次重建后都需要引导吗?

好的,我已经添加了设置,但没有帮助。

如何调试与 SMTP 服务器的首次连接问题

1. 进入你的容器:

./launcher enter app

2. 通过 getent hosts 检查你的 SMTP 服务器名称的 DNS 解析:

(容器内未安装 dignslookupping 等命令。)

getent hosts your.smtp.server

成功时的结果:

# IPv4
123.123.123.123 your.smtp.server

# IPv6
2001:db8:0:0:0:ff00:42:8329 your.smtp.server

3. 尝试通过 openssl 连接到你的 SMTP 服务器:

(容器内未安装 telnetnc 等命令。)

尝试不同的设置,直到成功连接。

openssl s_client -connect your.smtp.server:465
openssl s_client -connect your.smtp.server:587 -starttls smtp

# IPv4
openssl s_client -connect 172.17.0.123:465
openssl s_client -connect 172.17.0.123:587 -starttls smtp

# IPv6
openssl s_client -6 -connect "[2001:db8:0:0:0:ff00:42:8329]:465"
openssl s_client -6 -connect "[2001:db8:0:0:0:ff00:42:8329]:587" -starttls smtp

参见:如何检查 SMTP 连接 –> 步骤 3:使用 Openssl 检查 TLS 上的 SMTP 连接

4. 在 Discourse 中使用你找到的有效连接设置。

:rocket:

奖励:显示 Docker 容器内的 Discourse IP

(容器内未安装 ifconfigip 等命令。)

hostname -I

结果类似:

172.17.0.2

我无法通过 openssl 建立连接,并且我只得到这个:来自 getent

2606:4700:3032::ac43:d2f1 mail.secret.tdl
2606:4700:3033::6815:4db8 mail.secret.tld

(secret.tld 替换了我的实际域名)

瞎猜一下:这是一个公共 IP 吗?您的 mailcow 配置为在此公共 IP 上侦听 smtp 连接,还是仅在内部网络上侦听?

在 Discourse 容器内部,您可以通过以下方式获取容器的 IP:

hostname -I

您的 mailcow 也在同一个内部(docker-)网络上吗?

172.17.0.2 是我从 hostname -I 获取的。

你能进入你的 mailcow 容器并运行 hostname -I 吗?Mailcow 和 Discourse 是同一主机上的两个独立 docker 容器吗?

如何进入 mailcow 容器?没有启动脚本。

我也不知道 mailcow。也许最好再咨询一下 mailcow 社区:https://community.mailcow.email/

我应该使用什么来收发邮件,或者我可以在 Ubuntu 上设置什么软件作为论坛的邮件服务?