Errore SMTP: è necessario prima inviare un comando STARTTLS

Sto cercando di configurare Discourse 2.7.0.beta4 con il servizio SMTP di MailerSend.

Dopo aver eseguito ./discourse-doctor, ho ricevuto il seguente errore:

Errore SMTP: è necessario emettere prima un comando STARTTLS

Questa è la mia attuale configurazione app.yml relativa a SMTP:

  DISCOURSE_SMTP_ADDRESS: 'smtp.mailersend.net'
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: username@subdomain.domain.org
  DISCOURSE_SMTP_PASSWORD: mypasswordhere
 #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opzionale, valore predefinito true)
 #DISCOURSE_SMTP_AUTHENTICATION: login
 #DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Ho già provato a decommentare e impostare esplicitamente DISCOURSE_SMTP_ENABLE_START_TLS su true, ma l’errore persiste. Lo stesso vale per DISCOURSE_SMTP_AUTHENTICATION: login.

Dopo ogni modifica al file YML, riavvio il sistema con questo comando:

./launcher destroy app; ./launcher start app

Qualsiasi suggerimento su cosa possa stare succedendo?

Grazie in anticipo!

Ho apportato alcune modifiche a discourse-setup di recente e anche una modifica al task rake che stai utilizzando (che credo non sia ancora stato unito).

Se vuoi darmi accesso al tuo server, darò un’occhiata.

2 Mi Piace

Come ho già menzionato tramite messaggio privato, non posso concedere l’accesso al server per motivi di sicurezza. Tuttavia, grazie mille a @pfaffman per il tuo aiuto e per aver cercato di risolvere questo problema.

Aggiungo un po’ di contesto: un amministratore precedente ha installato Discourse con il servizio SMTP di Mailgun, ma ha smesso di funzionare e non ho accesso a quell’account.

Come ho detto, sto cercando di configurarlo ora con Mailersend. Ho letto questo argomento [1] e altri riguardanti STARTTLS qui nel forum, ma non sono sicuro su come implementare le modifiche necessarie.

Ho provato anche questa impostazione qui sotto, ma l’errore persiste

DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Se è correlato a qualche aggiornamento recente, forse è meglio considerare un downgrade?

[1] Can't send email with certificate issue - #3 by supermathie

1 Mi Piace

Sei riuscito a farlo funzionare?

No, ho deciso di passare a un altro servizio di posta. Ora funziona perfettamente con Mailjet.

1 Mi Piace

Sto riscontrando un problema simile. Ieri ho eseguito il debug dell’invio di e-mail su una nuova istanza di Discourse per circa tre ore, senza alcun successo. Sto cercando di inviare e-mail tramite Fastmail con STARTTLS sulla porta 587. Altri servizi funzionano con le stesse credenziali.

Non ricevo l’errore “Must issue a STARTTLS command first” con queste impostazioni:

DISCOURSE_SMTP_ADDRESS: 'smtp.fastmail.com'
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: 'myuser@fastmail.fm'
DISCOURSE_SMTP_PASSWORD: 'mypass'
DISCOURSE_SMTP_ENABLE_START_TLS: true

…seguito da un ./launcher rebuild app, quando eseguo ./discourse-doctor e invio un’e-mail, ricevo un errore 500 5.5.1 Invalid command in risposta.

Oggi ho iniziato a tracciare la comunicazione con tcpdump e ho notato che Discourse non sembra utilizzare STARTTLS. Ecco cosa succede quando invio un’e-mail di recupero Grafana:

< 220 smtp.fastmail.com ESMTP ready
> EHLO 9b5ba1569f77
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> STARTTLS
< ...[encrypted]

Ma con Discourse, succede questo:

< 220 smtp.fastmail.com ESMTP ready
> EHLO localhost
< 250-smtp.fastmail.com
< 250-PIPELINING
< 250-SIZE 71000000
< 250-ENHANCEDSTATUSCODES
< 250-8BITMIME
< 250 STARTTLS
> AUTH PLAIN [redacted]
< 500 5.5.1 Invalid command

Quindi, sembra che Discourse stia inviando le mie credenziali su Internet in chiaro, anche se STARTTLS è abilitato nelle impostazioni? È un bug?

Ho anche notato che quando eseguo ./discourse-doctor, il riepilogo “YML SETTINGS” in alto elenca i seguenti elementi:

==================== YML SETTINGS ====================
DISCOURSE_HOSTNAME=forum.[redacted]
SMTP_ADDRESS=smtp.fastmail.com
DEVELOPER_EMAILS=sysadmin@[redacted]
SMTP_PASSWORD=[redacted]
SMTP_PORT=587
SMTP_USER_NAME=[redacted]@fastmail.fm
LETSENCRYPT_ACCOUNT_EMAIL=

Tuttavia, non c’è menzione di DISCOURSE_SMTP_ENABLE_START_TLS, anche se è impostato in app.yml. Non sono sicuro se questo problema sia correlato.

2 Mi Piace

Oh, questo è strano. Ho creato un account utente manualmente (tramite rake admin:create) e poi ho effettuato l’accesso, e improvvisamente le notifiche via e-mail hanno funzionato. Tuttavia, l’invio tramite discourse-doctor continua a fallire.

Forse discourse-doctor è rotto?

1 Mi Piace

Mi dispiace. So quanto possa essere frustrante.

È possibile. Fa alcune cose per cercare di diagnosticare qual è il problema, quindi potrebbe essere che la logica che sta usando sia rotta per il tuo caso…

C’è anche un rake task che probabilmente sarebbe stata una scommessa migliore per te.

    rake emails:test[x@y.com]

Stavi seguendo Risoluzione dei problemi di posta elettronica su una nuova installazione di Discourse?

2 Mi Piace

Non ero a conoscenza di quel comando, sembra davvero utile! Il risultato è comunque lo stesso:

root@app:/var/www/discourse# rake emails:test redacted@example.com
Testing sending to  using smtp.fastmail.com:587, username:myuser@fastmail.fm with plain auth.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR
500 5.5.1 Invalid command

====================================== SOLUTION =======================================
This is not a common error. No recommended solution exists!
Please report the exact error message above to https://meta.discourse.org/
(And a solution, if you find one!)
=======================================================================================

Quando guardo tcpdump, vedo di nuovo che sta inviando le credenziali AUTH PLAIN in testo chiaro senza crittografia STARTTLS.

Ho dato un’occhiata a quella pagina, sì.

Tuttavia, basandomi su tcpdump, questo mi sembra un bug negli strumenti di diagnostica perché STARTTLS non viene utilizzato anche se l’impostazione è abilitata in app.yml. (L’applicazione Discourse stessa utilizza STARTTLS. Presumo che molti provider di posta elettronica consentiranno anche l’invio di e-mail non crittografate, quindi questo problema si presenterà solo se qualcuno utilizza gli strumenti di diagnostica e utilizza un provider che non accetta l’invio non crittografato tramite SMTP.)

1 Mi Piace

Ah. Sembra che quel rake task sia lo stesso che chiama discourse-doctor. Mi dispiace per questo.

Forse qualcuno può dare un’occhiata a come rendere quel rake task più simile al processo effettivo, o almeno non arrendersi se i suoi tentativi di capire cosa sta succedendo sono goffi. Un buon primo passo sarebbe dire “Beh, XXX sembra rotto, ma ci proveremo comunque…”

1 Mi Piace