Aggiunta del certificato TLS insieme alla configurazione SMTP

Sto cercando di utilizzare il mio server in sola trasmissione per inviare email. Sto eseguendo questo gateway SMTP per utilizzare TLS, motivo per cui il client che uso per inviare email richiede un certificato. Sto utilizzando un certificato autofirmato, che è molto semplice da configurare se uso postfix/ssmtp per l’invio di email, ma non sono sicuro di come possa utilizzare un certificato personalizzato nel client di posta di Discourse.

Per avere una breve panoramica:

Scenario semplice:
Discourse —invia-email—> mailgun —invia-email—> utente

Il mio scenario:
Discourse —invia-email—> il mio server in esecuzione con gateway SMTP —inoltra-email-utilizzando-API-AWS-SES—> utente

Grazie.

Vorrei correggere la mia domanda. Quindi in realtà non ho bisogno di aggiungere alcun certificato per far funzionare, ma comunque non riesce a comunicare tramite TLS. Se lo test con swaks funziona correttamente. Esempio di comando:

swaks --to user@example.com --from me@example.com --auth PLAIN --auth-user myusername -tls -s smtp.somehost.com:2525

Puoi utilizzare direttamente l’SMTP di AWS SES per ottenere questo risultato. Perché vuoi avere un relay locale?

@itsbhanusharma AWS SES offre 60.000 email al mese gratuitamente e, per quanto ne so, queste chiamate email devono essere richieste da un’istanza EC2 per funzionare correttamente, altrimenti vengono addebitate come normali. La mia istanza Discourse è ospitata su un droplet Digital Ocean. Potrei sbagliarmi, ma questa è la mia comprensione e il ragionamento alla base.

Quindi, anche se la tua API SES riceve email da un indirizzo IP di DigitalOcean, questo la renderebbe a pagamento. Potresti decidere di utilizzare un altro servizio o avviare Exim su un’istanza EC2 per fungere da ponte tra il tuo droplet DO e AWS SES. Non credo che funzionerà, ma puoi provare.

Dovrebbe (in teoria, comunque) funzionare così:

  1. Discourse (su DO) invia le email all’indirizzo IP di Exim su EC2
  2. EC2 inoltra le email ricevute da DO a SES
  3. SES consegna le email all’utente finale.

Ho già risolto il problema di relay avviando un server SMTP locale su EC2 che inoltra le richieste SMTP a SES. Il problema è che Discourse fallisce durante l’handshake TLS con questo server SMTP, mentre applicazioni come Postfix e Swaks funzionano correttamente.

Risolvere il problema dovrebbe essere semplice come usare la porta 25 (senza crittografia)

C’è un modo per vedere dove viene gestito questo handshake SMTP? Ad esempio, qualche libreria che Discourse utilizza in Ruby dietro le quinte? Non voglio disabilitare TLS qui.

Quindi usa un certificato SSL valido (anche Let’s Encrypt dovrebbe funzionare bene)

Per qualche motivo, l’uso di un certificato valido di Let’s Encrypt non ha aiutato. Non so perché.
Ma dopo aver impostato questo in app.yaml, le email funzionano ora.

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Qualcuno con più conoscenze su SMTP potrebbe spiegare perché questo funziona, ma per ora penso di essere a posto.

Alla fine, risulta più economico rispetto allo spostare semplicemente l’istanza di Discourse su S3?

Ho un’istanza EC2 da 5$ in esecuzione su AWS che sto utilizzando per inoltrare più domini. Spostare Discourse su EC2 sarebbe un po’ costoso rispetto a Digital Ocean, anche se non di molto (pochi dollari in totale).

Il punto è che, anche se spostassi Discourse su EC2, avrei comunque bisogno di quel servizio di inoltro per supportare il resto dei droplet che ho su DO per gli altri domini di mia proprietà. Quindi perché non risolvere semplicemente il problema con Discourse :slight_smile:

Beh, ammettendo tu stesso che Discourse non è rotto, funziona perfettamente con SES.

Lo stai facendo per aggirare una restrizione di SES che impedisce l’invio gratuito di e-mail tramite relay.

È vero, ma Discourse non c’entra nulla con il SES in questo caso. Discourse comunica con un server SMTP, che potrebbe essere qualsiasi cosa (attualmente è un servizio di relay). Mi chiedevo come mai Postfix, swaks e simili funzionino perfettamente con questo server SMTP (dalla stessa VPC di DigitalOcean) mentre Discourse no. Dopo aver impostato quella variabile, però, funziona. Vorrei comunque sapere quale libreria utilizza Discourse per l’handshake SMTP, così da poter verificare personalmente se c’è qualcosa che possiamo migliorare in Discourse.