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 添加一个发送别名。
1 个赞
pfaffman
(Jay Pfaffman)
3
如果您尝试向从 https://www.mail-tester.com/ 获取的地址发送测试邮件,会发生什么?
我看不出更改 ufw allow https 会如何影响接收邮件。
可能是 vultr 不允许连接到 25 端口。这可以解释为什么发送邮件不工作。
发送邮件和接收邮件在很大程度上是相互独立的。
我相信 Vultr(或者可能只是在存在 ufw 的情况下安装 Docker)有一些规则会阻止容器之间相互通信,这意味着邮件接收者无法连接到 Discourse。ufw allow https 可以解决这个问题。
1 个赞
在默认网络上,只有当容器通过本地 IP 地址直接连接到另一个容器时,才是容器本身的本地 IP 地址。
当邮件接收器查找您的 Discourse 域名时,它将无法获取该本地 IP 地址,因此它必须离开其 Docker 网络,并且至少会通过 ufw 一次才能到达 Discourse。
1 个赞
这是另一种情况,尽管有关联。那是来自外部的连接,Docker 会添加规则以允许暴露的端口通过。
我对 netfilter/iptables 链规则不太熟悉,但我认为上面的内容显示:
- 如果连接来自
docker0,即来自默认的 Docker 网络,则返回到上一个链(停止在该链中处理规则)。
- 否则,如果连接来自
docker0 以外的任何地方,如果它也是 https 或 http,则指定 DNAT,使其继续进入 FORWARD 链。
因此,在另一个主题中显示的安排中,如果 https 或 http 流量来自外部,它将被定向到 Docker。但是,如果流量来自 Docker 网络,它将被返回并被 INPUT 链拒绝或丢弃。
ufw allow https 的作用是在 INPUT 链中添加一条接受规则。这样,当连接按上述方式返回到 INPUT 链时,它将被接受并找到正在侦听的 Docker,最终被路由到容器。
1 个赞
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,因为他们目前的免费套餐相当慷慨。它应该能在一段时间内满足我们非营利性工作的需求。到目前为止,一切运行顺利 
5 个赞