나도 비슷한 문제를 겪고 있습니다. 어제 새 Discourse 인스턴스에서 이메일 전송을 약 3시간 동안 디버깅했지만 아무런 성과가 없었습니다. 포트 587에서 STARTTLS를 사용하여 Fastmail을 통해 이메일을 보내려고 하고 있습니다. 다른 서비스들은 동일한 자격 증명으로 정상 작동합니다.
아래 설정을 사용할 때 “Must issue a STARTTLS command first” 오류 응답을 받지 않습니다:
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
…이후 ./launcher rebuild app를 실행하고 ./discourse-doctor를 실행한 뒤 이메일을 보내면 500 5.5.1 Invalid command 오류 응답을 받습니다.
오늘 tcpdump를 사용하여 통신을 추적하기 시작했는데, Discourse가 실제로 STARTTLS를 사용하지 않는 것 같다는 것을 알게 되었습니다. 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]
하지만 Discourse의 경우 다음과 같은 일이 발생합니다:
< 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
즉, 설정에서 STARTTLS가 활성화되어 있음에도 불구하고 Discourse가 제 자격 증명을 인터넷을 통해 평문으로 전송하고 있는 것처럼 보입니다. 이것은 버그인가요?
또한 ./discourse-doctor를 실행할 때 상단의 “YML SETTINGS” 요약에 다음 항목들이 나열되는 것도 확인했습니다:
==================== 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=
하지만 app.yml에 설정되어 있음에도 DISCOURSE_SMTP_ENABLE_START_TLS에 대한 언급은 없습니다. 이 문제가 관련이 있는지 확실하지 않습니다.