如何配置Discourse以接收来自Mailgun的电子邮件?

我有一个完全正常运行的 Discourse 安装(使用推荐的方法安装)在一台运行 Ubuntu 的服务器(Linode)上。我可以正常 发送 电子邮件,并且可以进行新用户注册。

我们正在使用此功能 https://meta.discourse.org/t/configuring-incoming-email-to-create-new-topics-or-group-messages/62977:Discourse 需要提供一个收件电子邮件地址。

在 Mailgun 中,我创建了一个 Catch All 路由,将电子邮件转发到一个 webhook,如这里所述:https://meta.discourse.org/t/discourse-mailgun-routes/210609,并且我已经安装了插件。

但是,查看 Mailgun 的日志显示失败了。有什么办法可以解决这个问题吗?

{
	"timestamp": 1737657789.428326,
	"recipient-domain": "forum.domain.com",
	"envelope": {
		"transport": "http",
		"targets": "https://forum.domain.com/mailgun/routes/receive_mime",
		"sender": "me@myemail.com"
	},
	"primary-dkim": "",
	"delivery-status": {
		"code": 406,
		"session-seconds": 0.277,
		"message": "Not Acceptable",
		"attempt-no": 1,
		"description": ""
	},
	"event": "failed",
	"id": "4uIIPrRRTQOwluJaE-QpRA",
	"campaigns": null,
	"log-level": "error",
	"tags": [],
	"message": {
		"size": 4089,
		"headers": {
			"message-id": "CA+riLLnyMLCruT2DmhFjTuyvy7OtQ8NrT0X0m5PZXfK3uzwCEg@mail.gmail.com",
			"to": "domain+support-12@forum.domain.com",
			"subject": "Test",
			"from": "Me Me <me@myemail.com>"
		},
		"attachments": []
	},
	"recipient": "https://forum.domain.com/mailgun/routes/receive_mime",
	"user-variables": {},
	"flags": {
		"is-test-mode": false,
		"is-authenticated": false,
		"is-routed": false,
		"is-system-test": false
	},
	"storage": {
		"region": "us-east4",
		"env": "production",
		"key": "BAABAAAVXB5iOt41fPtDZaekVDDH1beaZA",
		"url": "https://storage-us-east4.api.mailgun.net/v3/domains/forum.domain.com/messages/BAABAAAVXB5iOt41fPtDZaekVDDH1beaZA"
	},
	"severity": "permanent"
}

最简单且推荐的方式是 为自托管网站配置使用 Mail-Receiver 的直接投递入站电子邮件

2 个赞

如果启用 mailgun_log_rejections 并发送另一封电子邮件,您的 Sidekiq 日志中应该会有一个拒绝原因(Mailgun 不会保留响应正文,所以这基本上是唯一的方法),这将告诉您。

否则,如果您愿意,可以使用 mail-receiver 设置。

1 个赞

您好 @Wolftallemo,感谢您提供的优秀插件 :slight_smile:

我检查了 /logs,但没有看到与此问题相关的任何内容。我不确定这里是否是读取 sidekiq 日志的正确位置?

我更希望让插件正常工作,可能会再花几天时间尝试 mail-receiver。我的安装位于 traefik 反向代理之后,所以我确定这样会更困难一些。

此致,

Dan

是的,它们应该在那里,尽管这很不寻常。

我会先检查入站垃圾邮件过滤器。有可能它在 Mailgun 端没有进行过滤设置。

如果是这种情况,我会:

  • 在 Mailgun 端更改入站垃圾邮件过滤设置,添加垃圾邮件标题(在域设置中)
  • mailgun_spam_detection 设置为 none(但不推荐这样做)

不过,我认为将其设置为 none 也是一个相当容易的测试方法。

您好,

那些设置似乎已经到位了。这可能是我在做一些非常愚蠢的事情。我快速尝试了邮件接收器;唯一的问题是我运行在一个 Traefik 反向代理后面,所以我无疑需要几次尝试才能让它与所有必需的 docker compose 标签等一起工作。这就是我如此喜欢您的插件的原因!

请问您是否成功收到了来自 Mailgun 的退信?它被拒绝而没有任何日志的唯一两个原因可能是:您设置了错误的密钥(必须是 webhook 签名密钥)或者根本没有设置。

请仔细检查您是否意外地设置了除 webhook 签名密钥之外的其他内容(因为 Discourse 中的措辞有些可疑,应该更改)。

邮件接收器在 25 端口上运行,因此 traefik 无需了解它。

我已经更改了我的 MX 记录,所以为了避免再延迟 24 小时,我将继续使用邮件接收器方法。

这大大简化了事情。在这种情况下,我几乎可以直接运行示例脚本,而无需与 traefix/docker-compose 堆栈进行任何更改或集成?