Post-installazione, Curl può inviare email, ma Discourse no. Aiuto per risolvere?

Ciao!

Nel testo qui sotto, sostituisci <DOT> con . - poiché sono un nuovo utente, Discourse non mi permette di pubblicare link.

Ho installato Discourse su un nuovo server cloud di Hetzner, e l’URL si risolve correttamente: forum.thewizardofosc.com

Tuttavia, l’email con cui mi sono registrato non viene mai inviata. Nel file di log, il messaggio di Discourse è “Net::ReadTimeout”, se ciò dice qualcosa.

Telnet si connette: digitando "telnet mail.thewizardofosc.com 465" ottengo "Connected to thewizardofosc.com".

Inoltre, Curl invia con successo un’email!

Digitando quanto segue:
curl --ssl smtps://mail.thewizardofosc.com --mail-from discourse@thewizardofosc.com --mail-rcpt <VARIE FUNZIONANTI> --upload-file email.txt --user 'discourse@thewizardofosc.com:<PASSWORD>'

L’invio ha successo.

Ma allora perché Discourse non funziona?

Di seguito riportiamo le sezioni che ritengo rilevanti del mio file di configurazione dell’app:

## all'iscrizione iniziale, ad esempio 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'iliasb@thewizardofosc.com'

## TODO: Il server SMTP utilizzato per validare i nuovi account e inviare notifiche
# Indirizzo SMTP, nome utente e password sono obbligatori
# ATTENZIONE: il carattere '#' nella password SMTP può causare problemi!
DISCOURSE_SMTP_ADDRESS: mail.thewizardofosc.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: discourse@thewizardofosc.com
DISCOURSE_SMTP_PASSWORD: <PASSWORD>
#DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opzionale, valore predefinito true)

## Se hai aggiunto il modello Lets Encrypt, decommenta qui sotto per ottenere un certificato SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

Bisognerebbe vedere il registro degli errori per capire cosa sta succedendo con la configurazione della tua posta.

Ho seguito i passaggi indicati qui: Troubleshoot email on a new Discourse install - #2

Ma senza molto successo. L’esecuzione di discourse-doctor mi restituisce lo stesso output: Net::ReadTimeout,
che vedo anche in shared/standalone/log/rails/production.log

Ciao!

Intendi shared/standalone/log/rails/production.log?

Lì ottengo:

Messaggio inviato 5208d56b-b84b-4de6-a13e-76b60179af46@forum.thewizardofosc.com (60142.6ms)
Eccezione del job: Net::ReadTimeout

Strano. Se riesci a connetterti dall’esterno del contenitore, puoi verificare se quel comando curl funziona all’interno del contenitore. La mia unica ipotesi è che tu abbia un problema di rete con Docker.

Jay ha ragione.

Il passo logico successivo, @onar3d, è provare il tuo test curl dall’interno del contenitore.

Ho appena verificato per te e curl è già installato nel contenitore, quindi almeno non hai bisogno di installarlo.

docker exec -it app bash
root@hostname-app/# curl --version
curl 7.64.0 (x86_64-pc-linux-gnu) libcurl/7.64.0 OpenSSL/1.1.1d zlib/1.2.11 libidn2/2.0.5 libpsl/0.20.2 (+libidn2/2.0.5) libssh2/1.8.0 nghttp2/1.36.0 librtmp/2.3
Data di rilascio: 2019-02-06
Protocolli: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp 
Funzionalità: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL 

Spero che questo ti sia d’aiuto.

Suggerimento interessante!

Ma sono entrato in Docker con “docker exec -it DOCKERID bash” e ho usato lo stesso comando curl, che ha funzionato anch’esso.

Grazie, l’ho appena provato e ha funzionato perfettamente!

Quindi non può essere che Docker sia bloccato…

Ciao @onar3d

È un tuffo nel buio, ma dato che stai usando la porta 465 invece della 587, potresti provare ad aggiungere questo al tuo file yml del contenitore:

DISCOURSE_SMTP_ENABLE_START_TLS: false

poi ricrea il contenitore e vediamo se abbiamo fortuna :slight_smile:

Riferimento:

GMail (ad esempio, per confronto) espone le seguenti porte e metodi di autenticazione.

  • TLS/STARTTLS (a volte chiamato TLS esplicito): utilizza la porta 587
  • SSL (a volte chiamato TLS implicito): utilizza la porta 465

… proviamo a tirare i dadi su questa… :slight_smile: ma forse avremo fortuna

Se non funziona, puoi sempre tornare indietro.

Grazie!

Ho appena provato, ma l’email non è stata inviata da Discourse :confused:

Sì, era una speranza remota… scusa per il tempo che ti ho fatto perdere!

L’unica altra mia “idea pazza” al momento è vedere se puoi accedere al tuo server di posta (qualunque esso sia) e impostare la porta su 587 (molti provider SMTP offrono questa opzione) e “tornare a giocare i dadi” con DISCOURSE_SMTP_ENABLE_START_TLS: true, naturalmente.

A dire il vero, di solito non sono un “giocatore d’azzardo” e mi affido più ai fatti; quindi se non vuoi provare, lo capisco perfettamente @onar3d!!

Grazie! Purtroppo non ho i permessi per modificarlo; è uno di quei servizi “chiavi in mano” configurati dal mio provider.

Ciao @onar3d

Ho capito. Al momento ho finito le “idee pazze” ed è ora che io mi rilassi per la notte; buona fortuna e speriamo che uno dei membri più intelligenti del team qui abbia delle idee migliori da provare.

Tanti auguri.

Dopo ulteriori tentativi (grazie mille a @IAmGav!), la configurazione del mio Discourse è stata confermata funzionante con un server email diverso, il che esclude diverse possibilità da provare.

Il mio provider di servizi email mi ha risposto con un messaggio di log di errore dal loro lato e un suggerimento:

L’ingegnere ha controllato i log e l’errore rilevato dal loro IP è legato alle impostazioni SSL. Molto probabilmente vengono utilizzate una versione o impostazioni di connessione obsolete.

Prova:
Errore TLS durante la connessione da [95.216.139.49]:33568 SSL_accept: connessione TCP chiusa dal peer

Prova a disattivare la modalità SSL solo per vedere se funziona.

Ho provato impostando DISCOURSE_SMTP_ENABLE_START_TLS su false come suggerito sopra, sia sulla porta 465 che sulla porta 26 (indicata dal mio provider come porta per connessioni non SSL), ma nessuna delle due ha funzionato.

Potrebbe essere perché non ho ancora acquistato un certificato SSL per il dominio thewizardofosc.com? Me ne sono reso conto solo dopo aver letto un po’ di più.

Se non funziona con l’opzione non SSL, allora non funzionerebbe nemmeno con un SSL a pagamento. Il tuo host di posta dovrebbe fornirti un SSL gratuito di Let’s Encrypt.

Caro @onar3d,

Potresti considerare di eseguire i tuoi test curl con l’opzione verbose -v abilitata, per poter analizzare completamente l’handshake riuscito; e poi procedere a ritroso partendo da tale analisi.

Puoi utilizzare questa opzione verbose per capire al contrario cosa funziona :slight_smile:

Spero ti sia utile.