ToddZ
1
嗯。我的 Vultr 设置与 @MathiasFoster 和 @jryans 在此处相同,并且遇到了相同的 (Net::OpenTimeout) 问题。ufw allow https 使我的入站电子邮件正常工作。
但现在网站无法发送任何邮件。在设置入站电子邮件之前,出站电子邮件一直运行正常。
我没有什么特别复杂的设置:
notification_email 是 admin@tasat.org。
出站邮件使用 Hostinger 的 smtp.titan.email。
mail_receiver.yml 包含:
`MAIL_DOMAIN` = forum.tasat.org
`DISCOURSE_MAIL_ENDPOINT` = https://forum.tasat.org/admin/email/handle_mail
`DISCOURSE_API_KEY` = [已隐藏]
在跳过的电子邮件中,我看到 \u003creplies+verp-14c9cc6eb915b08d4983c90c744ba4b4@forum.tasat.org\u003e: 发件人地址被拒绝:不属于用户 admin@tasat.org
我对电子邮件的配置不太熟悉。我应该从 mail_receiver.yml 字符串中删除“forum.”,并将“replies@tasat.org”设为“admin@tasat.org”的发送别名吗?
邮件接收器独立于 Discourse 和邮件发送,它仅充当一个简单的邮件服务器,配置为仅接收邮件,并使用 Discourse API 将这些邮件推送到 Discourse 中。
在设置过程中,唯一可能影响发送的是设置“回复邮件地址”,尽管这应该只会设置传出邮件的“Reply-To”字段,而不会影响发件人地址。
只是为了确认,听起来您在 app.yml 中有(除其他外)这些设置:
DISCOURSE_SMTP_USER_NAME: admin@tasat.org
DISCOURSE_NOTIFICATION_EMAIL: admin@tasat.org
并且在“回复邮件地址”中有这个设置:
replies+%{reply_key}@forum.tasat.org
是这样吗?
如果是这样,那些不接受回复的邮件通知是否仍然有效?我认为邮件验证就是一个例子,所以您可以尝试创建一个账户,看看该邮件是否发送成功。
在这种安排下,对于可以接受回复的邮件,应该发生的情况是,发送的邮件使用:
From: admin@tasat.org(也是发件人地址)
Reply-To: replies+abc123@forum.tasat.org
通常,Reply-To 不被视为发件人信息的一部分,它只是在人们回复时提供一个默认的收件人地址,但也许 Hostinger 会将其视为一部分。您可能可以为 replies@forum.tasat.org 添加一个发送别名。
pfaffman
(Jay Pfaffman)
3
如果您尝试向从 https://www.mail-tester.com/ 获取的地址发送测试邮件,会发生什么?
我看不出更改 ufw allow https 会如何影响接收邮件。
可能是 vultr 不允许连接到 25 端口。这可以解释为什么发送邮件不工作。
发送邮件和接收邮件在很大程度上是相互独立的。
我相信 Vultr(或者可能只是在存在 ufw 的情况下安装 Docker)有一些规则会阻止容器之间相互通信,这意味着邮件接收者无法连接到 Discourse。ufw allow https 可以解决这个问题。
在默认网络上,只有当容器通过本地 IP 地址直接连接到另一个容器时,才是容器本身的本地 IP 地址。
当邮件接收器查找您的 Discourse 域名时,它将无法获取该本地 IP 地址,因此它必须离开其 Docker 网络,并且至少会通过 ufw 一次才能到达 Discourse。
这是另一种情况,尽管有关联。那是来自外部的连接,Docker 会添加规则以允许暴露的端口通过。
我对 netfilter/iptables 链规则不太熟悉,但我认为上面的内容显示:
- 如果连接来自
docker0,即来自默认的 Docker 网络,则返回到上一个链(停止在该链中处理规则)。
- 否则,如果连接来自
docker0 以外的任何地方,如果它也是 https 或 http,则指定 DNAT,使其继续进入 FORWARD 链。
因此,在另一个主题中显示的安排中,如果 https 或 http 流量来自外部,它将被定向到 Docker。但是,如果流量来自 Docker 网络,它将被返回并被 INPUT 链拒绝或丢弃。
ufw allow https 的作用是在 INPUT 链中添加一条接受规则。这样,当连接按上述方式返回到 INPUT 链时,它将被接受并找到正在侦听的 Docker,最终被路由到容器。
ToddZ
9
@Simon_Manning @pfaffman –
编辑:请看消息末尾
感谢您的回复!我离开了一段时间,但现在又开始处理这个问题了……
是的,目前我就是这样设置的。
现在我尝试创建账户时,提交按钮没有任何反应。就好像它知道不会成功一样。(并且“已跳过”或其他地方也没有任何显示。)
编辑:我已经将“replies@tasat.org”设置为 admin@tasat.org 的发送别名,并确认它可以用于发送和接收。我还确认了从外部客户端发送到 replies+verp-174bc7d8411bc4ec2cfa84c55bd31425@forum.tasat.org 的电子邮件已送达。
为了尝试做些什么,我更改了“回复邮件地址”:
从 replies+%{reply_key}@forum.tasat.org
改为 replies+%{reply_key}@tasat.org
但这并没有改变结果。
邮件没有到达 mail-tester。所有出站尝试都显示在“已跳过”中,并附有各种此消息:
553 5.7.1 <replies+verp-8c79cd4e83023bda6df0624c2cacd36e@tasat.org>:
发件人地址被拒绝:不属于用户 admin@tasat.org
也许这很有趣?当我运行 discourse-doctor 时,出站邮件失败如下:
==================== MAIL TEST ====================
为了进行可靠的测试,请从 http://www.mail-tester.com/ 获取一个地址
正在发送邮件至 REDACTED . .
正在使用 smtp.titan.email:587,用户名:admin@tasat.org,使用纯文本身份验证测试发送到 admin@tasat.org。
SMTP 服务器连接成功。
正在发送到 admin@tasat.org . .
邮件未发送。
原因:553 5.7.1 <replies+verp-3cc19f7b135e6f56219e030999db9e29@tasat.org>:
发件人地址被拒绝:不属于用户 admin@tasat.org
直接从电子邮件客户端发送到 replies+ 地址(或 forum.tasat.org 地址)可以正常工作——它会通过“replies”别名并进入 admin 收件箱。拒绝来自哪里?
我查看了文章“防止出站主机电子邮件干扰”。我没有 /etc/postfix 路径——但这是我的 netstat 输出:
root@forum:/var/discourse# netstat -tulpn | grep :25
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1487576/docker-prox
tcp6 0 0 :::25 :::* LISTEN 1487581/docker-prox
重大编辑—— 我今晚收到了 Titan 支持的回应:“回复至地址和发件人地址必须相同,否则电子邮件将无法发送。”所以我想所有的故障排除都白费了,我必须寻找一个新的电子邮件主机,它不强制要求这个。
这当然不是详尽无遗的,但在安装文档中,有一些发送服务推荐,以及一些关于在 Discourse 中使用它们的が基本信息:discourse/docs/INSTALL-email.md at main · discourse/discourse · GitHub
以下主题(在该文档底部链接)也包含有关这些和其他服务的退信处理信息:
我个人使用 Mailgun 的 flex 计划(完全在免费额度内),但我知道他们的定价一直存在混淆,而且自加入以来,新用户的情况可能已经发生变化。我最后看到的情况(不知道现在是否仍然如此)是,试用期结束后可以转为 flex,只是非常不清楚。
pfaffman
(Jay Pfaffman)
11
对。
您可以切换到 mailgun flex,尽管他们很难弄清楚。大约每个月我都会给他们发邮件询问为什么这么难找到。
ToddZ
12
@Simon_Manning 和 @pfaffman – 再次感谢您的输入和提示,它们让我走上了正确的轨道。
我决定尝试 MailerSend,因为他们目前的免费套餐相当慷慨。它应该能在一段时间内满足我们非营利性工作的需求。到目前为止,一切运行顺利 