Come configurare Discourse per ricevere email da Mailgun?

Ho un’installazione Discourse completamente funzionante (installata utilizzando l’approccio consigliato) su un server (Linode) che esegue Ubuntu. Posso inviare email senza problemi e gestire le nuove registrazioni degli utenti.

Stiamo utilizzando questa funzionalità Configuring incoming email to create new topics or group messages : Discourse deve fornire un indirizzo email in entrata.

In Mailgun ho creato una route Catch All che inoltra le email a un webhook come descritto qui: Discourse Mailgun Routes e ho installato il plugin.

Tuttavia, guardando i log di Mailgun, questo fallisce. Avete qualche idea su come fare?

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

Il modo più semplice e consigliato è Configurare l’email in arrivo a consegna diretta per siti self-hosted con Mail-Receiver

2 Mi Piace

Se abiliti mailgun_log_rejections e invii un’altra email, dovresti trovare un motivo di rifiuto nei tuoi log di sidekiq (mailgun non conserva il corpo della risposta, quindi questo è fondamentalmente l’unico modo) e questo dovrebbe dirtelo.

Altrimenti puoi usare la configurazione di mail-receiver se preferisci farlo.

1 Mi Piace

Ciao @Wolftallemo grazie per l’ottimo plugin :slight_smile:

Ho controllato /logs ma non ho visto nulla relativo a questo problema. Non sono sicuro se questo sia il posto giusto per leggere i log di sidekiq o meno?

Preferirei far funzionare il plugin, potrei dedicargli qualche altro giorno prima di tentare con il mail-receiver. La mia installazione è dietro un proxy inverso traefik quindi sono sicuro che sarà un po’ più difficile in quel modo.

Saluti,

Dan

Sì, è lì che si troverebbero, anche se è insolito.

Inizierei controllando il filtro antispam in entrata. È possibile che non sia impostato per filtrare da parte di Mailgun.

In tal caso, potrei:

  • Modificare il filtro antispam in entrata da parte di Mailgun per aggiungere gli header di spam (che si trovano nelle impostazioni del dominio)
  • Impostare mailgun_spam_detection su none (ma non lo consiglio)

Ma suppongo che impostarlo su none potrebbe essere anche un test piuttosto semplice qui.

Ciao,

Quelle impostazioni sembrano già essere state applicate. Probabilmente sto facendo qualcosa di molto stupido. Ho provato rapidamente il mail-receiver; l’unico problema è che sto operando dietro un proxy inverso Traefik, quindi senza dubbio avrò bisogno di alcuni tentativi per farlo funzionare con tutte le etichette docker compose richieste, ecc. Ecco perché mi è piaciuto così tanto il tuo plugin!

Per caso stai ricevendo correttamente i bounce da Mailgun? Le uniche due ragioni per cui verrebbe rifiutato senza un log sono: o hai impostato la chiave sbagliata (deve essere specificamente la chiave di firma del webhook) o non l’hai impostata affatto.

Verificherei ulteriormente se hai impostato accidentalmente qualcos’altro oltre alla chiave di firma del webhook (perché la dicitura all’interno di Discourse è alquanto discutibile e dovrebbe probabilmente essere modificata).

Il ricevitore di posta funziona sulla porta 25, quindi traefik non ha bisogno di saperne nulla.

Ho già modificato i miei record MX, quindi per evitare un altro ritardo di 24 ore, continuerò con l’approccio del ricevitore di posta.

Questo semplifica molto le cose. In questo caso, posso più o meno eseguire lo script di esempio senza alcuna modifica o integrazione con lo stack traefik/docker-compose?