Impossibile inviare email utilizzando il server SMTP locale

Ho testato il server SMTP con Telnet:
Telnet si è connesso al server SMTP.
Telnet mi ha consentito di autenticarmi sul server SMTP.
Telnet mi ha permesso di inviare con successo un’email utilizzando il server SMTP, e ho utilizzato esattamente gli stessi valori in Telnet che sono presenti nel file /var/discourse/containers/app.yaml.

Discourse doctor afferma che Discourse si è connesso con successo al server SMTP.
Discourse doctor afferma che Discourse non è riuscito a inviare l’email di prova.

Di conseguenza, Discourse presenta dei bug che ne impediscono l’invio di email.

Suggerirei che il problema sia qualcosa di rotto nella tua configurazione, piuttosto che bug all’interno di Discourse. :wink:

2 Mi Piace

Per caso stai usando smtp-relay.gmail.com, magari da DigitalOcean? Sembra che si sia rotto di recente e nessuno è ancora sicuro del motivo.

No. Perché il server SMTP funziona perfettamente, come già descritto, e Discourse è installato correttamente e restituisce correttamente la schermata che richiede l’email di registrazione per l’amministratore. Tuttavia, quell’email non viene inviata.

Sto utilizzando un server SMTP locale situato sulla stessa macchina del contenitore Docker di Discourse.

Ho trovato un errore in /var/discourse/shared/standalone/log/rails/production.log:

Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Durata: 0.1ms | Allocazioni: 32)
Mail consegnata f915c15e-9c4d-4d4e-9527-81bc4984540c@forum.domain.com (63.7ms)
Eccezione del job: il nome host "mail.forum.domain.com" non corrisponde al certificato del server

Cosa significa questo errore?

3 Mi Piace

Sembra che il messaggio di errore sopra menzionato riguardi il certificato SSL del server.

Il certificato SSL sul server è corretto e ha il nome host appropriato.

Sembra che si tratti di un bug in Discourse, dove Discourse non riesce a rilevare correttamente il certificato SSL del server.

Questo non sembra un bug di Discourse. Sembra piuttosto un problema nella configurazione del resolver DNS dell’host o nel certificato SSL.

Dato che telnet non utilizza SSL, immagino sia per questo che hai riscontrato che funziona. Su Linux potresti riuscire a fare ulteriori test utilizzando OpenSSL per verificare la connessione ed esaminare i certificati.

Qui trovi alcune informazioni che potrebbero essere utili: https://docs.pingidentity.com/bundle/solution-guides/page/iqs1569423823079.html

L’HTTPS sul sito funziona perché mostra il lucchetto verde nella barra degli indirizzi. Non c’è nulla di sbagliato nel certificato SSL del sito. C’è un problema nel modo in cui Discourse rileva il certificato SSL.

Quell’errore non riguarda il certificato del sito, ma il certificato del servizio SMTP.

2 Mi Piace

Il certificato del servizio SMTP è semplicemente il certificato SSL del server, non quello del sito web. Il certificato SSL del server è corretto e funziona.

Per configurare un server SMTP locale sulla stessa macchina del contenitore Discourse, Discourse non specifica esattamente quali siano i valori corretti per le impostazioni SMTP in app.yml. Ciò genera molta confusione e numerosi errori.

Nelle impostazioni di app.yml, Discourse non chiarisce in modo esplicito cosa debba essere DISCOURSE_SMTP_ADDRESS.

In realtà, il valore corretto è subdominio.dominio.com e non mail.subdominio.dominio.com.

Valori corretti:
DISCOURSE_SMTP_ADDRESS: forum.dominio.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@forum.dominio.com
DISCOURSE_SMTP_PASSWORD: "password"
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opzionale, valore predefinito true)

Discourse non chiarisce in modo esplicito cosa si intenda per “certificato del server” in questo messaggio di errore che appare dopo il fallimento dell’invio della prima email di registrazione. Il messaggio di errore si trova in:
/discourse/shared/standalone/log/rails/production.log
“Eccezione del job: l’hostname “mail.forum.dominio.com” non corrisponde al certificato del server”.

Tuttavia, in realtà, il “certificato del server” è semplicemente il certificato SSL del server.
Inoltre, nel messaggio di errore, Discourse menziona erroneamente “hostname”, mentre in realtà ci si riferisce a DISCOURSE_SMTP_ADDRESS.

Si è verificata una difficoltà a causa dell’ambiguità di Discourse.

La soluzione è stata semplicemente impostare il certificato SSL del server sul certificato SSL corretto.

Quando il problema è stato pubblicato sul forum di Discourse, sono state fornite molte risposte fuorvianti e poco chiare.

Discourse dovrebbe risolvere questi problemi.

2 Mi Piace

Ora Discourse Doctor conferma che l’email è stata inviata:

Invio della posta a admin@email.com. . . 
Test dell'invio a admin@email.com utilizzando forum.domain.com:587.
Connessione al server SMTP riuscita.
Invio a admin@email.com. . . 
Posta accettata dal server SMTP.

Tuttavia, non c’è nessuna email nella casella di posta in arrivo o nello spam.

Come si può risolvere questo problema?

Esamina i log del tuo server SMTP locale. Se Discourse lo ha consegnato correttamente al server SMTP, non è più sotto il controllo di Discourse.

Nei log di Exim4 è presente un messaggio di errore, cosa significa?

2021-01-21 00:39:39 H=(localhost.localdomain) [172.17.0.2] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=no F=<noreply@forum.domain.com> A=dovecot_plain:postmaster@forum.domain.com rejected RCPT <admin@email.com>: Verifica del mittente fallita