Como configurar Discourse para receber e-mails do Mailgun?

Tenho uma instalação Discourse totalmente funcional (instalada usando a abordagem recomendada) em um servidor (Linode) executando Ubuntu. Consigo enviar e-mails sem problemas e realizar o cadastro de novos usuários.

Estamos usando este recurso Configuring incoming email to create new topics or group messages : o Discourse precisa fornecer um endereço de e-mail de entrada.

No Mailgun, criei uma rota “Catch All” que encaminha e-mails para um webhook, como descrito aqui: Discourse Mailgun Routes e instalei o plugin.

No entanto, olhando os logs do Mailgun, isso falha. Alguma ideia de como fazer isso?

{
	"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"
}

A maneira mais fácil e recomendada é Configurar e-mail de entrada de entrega direta para sites auto-hospedados com Mail-Receiver

2 curtidas

Se você habilitar mailgun_log_rejections e enviar outro e-mail, deverá haver um motivo de rejeição nos seus logs do Sidekiq (o Mailgun não retém o corpo da resposta, então este é basicamente o único jeito) e isso deve te informar.

Caso contrário, você pode usar a configuração do mail-receiver se preferir fazer isso.

1 curtida

Olá @Wolftallemo, obrigado pelo excelente plugin :slight_smile:

Eu verifiquei /logs, mas não consegui ver nada relacionado a este problema. Não tenho certeza se este é o lugar correto para ler os logs do sidekiq ou não?

Eu prefiro fazer o plugin funcionar, talvez dê mais alguns dias antes de tentar o mail-receiver. Minha instalação está atrás de um proxy reverso traefik, então tenho certeza de que será um pouco mais difícil dessa forma.

Atenciosamente,

Dan

Sim, é aí que eles estariam, embora seja incomum.

Eu começaria verificando o filtro de spam de entrada. É possível que ele esteja configurado para não filtrar no final do Mailgun.

Se for esse o caso, eu faria uma das seguintes opções:

  • Alteraria a filtragem de spam de entrada no Mailgun para adicionar os cabeçalhos de spam (que estão nas configurações do domínio)
  • Definiria mailgun_spam_detection como none (mas não recomendo isso)

Mas suponho que defini-lo como none também possa ser um teste bastante fácil aqui.

Olá,

Essas configurações já parecem estar implementadas. Provavelmente é algo muito simples que estou fazendo. Dei uma rápida olhada no mail-receiver; o único problema é que estou rodando atrás de um proxy reverso Traefik, então sem dúvida precisarei de algumas tentativas para fazer isso funcionar com todos os rótulos docker compose necessários, etc. É por isso que gostei tanto do seu plugin!

Por acaso você está recebendo bounces do Mailgun com sucesso? As únicas duas razões pelas quais ele seria rejeitado sem um log seriam: você tem a chave errada definida (tem que ser especificamente a chave de assinatura do webhook) ou você não a definiu.

Eu verificaria novamente se você acidentalmente definiu algo diferente da chave de assinatura do webhook (porque a redação dentro do Discourse é questionável e provavelmente deveria ser alterada).

O receptor de e-mail funciona na porta 25, portanto, o traefik não precisa saber sobre isso.

Já alterei meus registros MX agora, então para evitar outro atraso de 24 horas, vou persistir com a abordagem do receptor de e-mail.

Isso simplifica muito as coisas. Neste caso, posso mais ou menos apenas executar o script de exemplo sem nenhuma alteração ou integração com a pilha traefix/docker-compose?