Impossibile inviare email - problema con la porta 465

Vorrei cambiare il provider SMTP, ma non sembra funzionare anche se sono certo che il server possa inviare email.

Ho questo in app.yml:

  DISCOURSE_SMTP_ADDRESS: <<SMTP SERVER>>
  DISCOURSE_SMTP_PORT: 465
  DISCOURSE_SMTP_USER_NAME: <<USER>>
  DISCOURSE_SMTP_PASSWORD: <<PASSWORD>>

Usando telnet <<SMTP SERVER>> 465 si connette OK, ma quando provo a inviare email, Discourse restituisce:

ERROR - Net::ReadTimeout with #<Socket:(closed)>

Qualcuno ha qualche suggerimento su cosa devo impostare?

Ho controllato il server basandomi su questo topic: Troubleshoot email on a new Discourse install

Sembra connettersi al server e inviare un’email di prova correttamente se lo faccio manualmente:

> sudo ./launcher enter app
root@support-app:/var/www/discourse# openssl s_client -connect mail.xxxxxxxx.com:465
  :
  :
  enorme quantità di spazzatura
  :
  :
220 xxxxxxx.com Anti-spam GT for Coremail System (mispb-6da2110f-64b0-4d67-acf1-2d302bd594f9-xxxxxxx.com[20220915])
EHLO mail.xxxxxxxxx.com
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrUDI0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrpDiNKUCa0xDrUUUUj
250-STARTTLS
250-SMTPUTF8
250 8BITMIME
AUTH PLAIN xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
235 Authentication successful
mail from: <xxx@xxxxxx.com>
250 Mail OK
rcpt to: <xxxx@xxxxxxx.com>
250 Mail OK
data
354 End data with <CR><LF>.
content

.
250 Mail OK queued as AQAAfwBXr9nSGHdj3hEgAA--.7073S2

Quanto tempo ci vuole perché l’output appaia?

Quasi immediatamente dopo aver inviato un comando.

MODIFICA: C’è un modo per ottenere registri più dettagliati per scoprire quale passaggio sta causando l’errore?

È probabile che la porta in uscita sia bloccata dal tuo provider di hosting. Se utilizzi un servizio come Mailgun (o quasi qualsiasi altro) allora la porta 2525 dovrebbe funzionare. Se si tratta di un server di posta che gestisci tu, puoi farlo ascoltare su un’altra porta (come la 2525).

Oppure (probabilmente la cosa più difficile) puoi aprire una segnalazione con chiunque ospiti il tuo server e chiedere loro di aprire la porta.

Beh, considerando che posso eseguire ./launcher enter app e poi openssl connettersi al server di posta, accedere tramite SMTP e inviare con successo un’e-mail dal container di discourse, dubito che sia la porta a non funzionare…

2 Mi Piace

Ho analizzato il codice e sembra che EHLO non sia stato nemmeno raggiunto. Il server SMTP è connesso ma sembra mancare l’handshake SSL, quindi il server si disconnette e Discourse non riceve alcuna risposta, da qui l’errore.

Quindi, ho sospettato che il supporto per la porta 465 sembri avere un bug (predefinito su SSL, ma non credo che Discourse lo riconosca), quindi probabilmente la connessione SSL non viene mai stabilita.

Passare alla porta 25 sembra almeno eliminare l’errore, anche se non sto ancora ricevendo alcuna email inviata…

EDIT: Posso confermare che la porta 25 funziona correttamente (come dovrebbe anche la 587, ma sfortunatamente il mio server smtp non espone la 587).

Non ho ricevuto email prima a causa del fatto che l’indirizzo IP del server Discourse è stato temporaneamente inserito nella blacklist dal server smtp a causa di troppi tentativi falliti.

1 Mi Piace

Penso che tu abbia ragione.

E a quanto pare non sei il primo… cercando DISCOURSE_SMTP_PORT 465 ho trovato un bel po’ di problemi simili.

L’ultimo contiene un link alla (possibile?) soluzione.

Con questa patch, è possibile impostare
DISCOURSE_SMTP_FORCE_TLS=true per utilizzare TLS implicito sulla porta 465
3 Mi Piace

Ho anche visto diversi argomenti sul “problema 465”. Tuttavia, il mio debug via email per tutto ciò che non è ovvio non è eccezionale, quindi ho citato la guida alla risoluzione dei problemi:

C’è qualcosa che possiamo aggiungere a questo per aiutare le persone?

2 Mi Piace

Bene, se @schungx è in grado di confermare che DISCOURSE_SMTP_FORCE_TLS=true è effettivamente una soluzione, possiamo aggiungerla.

5 Mi Piace

Proverò subito!

MODIFICA: @RGJ Posso confermare che DISCOURSE_SMTP_FORCE_TLS: true in app.yml risolve con successo il problema! :champagne:

Suggerisco un avviso in grassetto che dica Se si utilizza la porta 465, impostare DISCOURSE_SMTP_FORCE_TLS: true, o Discourse non dovrebbe essere abbastanza intelligente da rilevarlo?

4 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.