onar3d
(Ilias Bergstrom)
8월 5, 2020, 11:17오전
1
안녕하세요!
아래 텍스트에서 <DOT>를 .(마침표)로 치환해 주세요. 저는 신규 사용자라 디스코스가 링크 게시를 허용하지 않아서요.
새로 생성한 Hetzner 클라우드 컴퓨터에 Discourse를 설치했는데, 해당 URL은 잘 해석됩니다: forum<DOT>thewizardofosc<DOT>com
그러나 제가 등록한 이메일은 절대 발송되지 않습니다. 로그 파일에서 Discourse의 로그 메시지가 Net::ReadTimeout으로 표시되는데, 이것이 어떤 의미를 갖는지 궁금합니다.
telnet으로 연결은 됩니다 - "telnet mail<DOT>thewizardofosc<DOT>com 465"를 입력하면 "Connected to thewizardofosc<DOT>com".이라는 응답이 나옵니다.
또한 Curl을 사용하면 이메일을 성공적으로 보낼 수 있습니다!
아래를 입력하면:
curl --ssl smtps://mail<DOT>thewizardofosc<DOT>com --mail-from discourse@thewizardofosc<DOT>com --mail-rcpt <VARIOUS WORKED> --upload-file email.txt --user 'discourse@thewizardofosc<DOT>com:<PASSWORD>'
성공적으로 전송됩니다.
그렇다면 왜 Discourse는 이메일을 보내지 못하는 걸까요?
아래는 제 앱 파일에서 관련이 있다고 생각하는 부분들입니다:
## 초기 가입 시 예시 'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'iliasb@thewizardofosc<DOT>com'
## TODO: 새 계정 검증 및 알림 전송에 사용되는 SMTP 메일 서버
# SMTP 주소, 사용자 이름, 비밀번호는 필수입니다
# 경고: SMTP 비밀번호에 '#' 문자가 포함되면 문제가 발생할 수 있습니다!
DISCOURSE_SMTP_ADDRESS: mail<DOT>thewizardofosc<DOT>com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: discourse@thewizardofosc<DOT>com
DISCOURSE_SMTP_PASSWORD: <PASSWORD>
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (선택 사항, 기본값 true)
## Lets Encrypt 템플릿을 추가했다면, 무료 SSL 인증서를 얻기 위해 아래 주석을 해제하세요
LETSENCRYPT_ACCOUNT_EMAIL: me@example<DOT>com
IAmGav
(Gavin Perch)
8월 5, 2020, 11:25오전
2
메일 설정에서 어떤 일이 일어나고 있는지 확인하려면 에러 로그를 확인해야 합니다
onar3d
(Ilias Bergstrom)
8월 5, 2020, 11:42오전
4
여기 있는 단계를 따라 해 보았습니다: Troubleshoot email on a new Discourse install - #2
큰 성과는 없었습니다. discourse-doctor를 실행해도 shared/standalone/log/rails/production.log에서 확인되는 것과 동일한 Net::ReadTimeout 오류가 출력됩니다.
onar3d
(Ilias Bergstrom)
8월 5, 2020, 11:42오전
5
안녕하세요!
shared/standalone/log/rails/production.log 파일을 말씀하시는 건가요?
거기서 다음 내용을 확인했습니다:
Delivered mail 5208d56b-b84b-4de6-a13e-76b60179af46@forum.thewizardofosc.com (60142.6ms)
Job exception: Net::ReadTimeout
pfaffman
(Jay Pfaffman)
8월 5, 2020, 12:30오후
6
이상하네요. 컨테이너 외부에서 연결할 수 있다면, 컨테이너 내부에서 해당 curl 명령이 정상적으로 작동하는지 확인할 수 있습니다. 제 추측으로는 도커 관련 네트워크 문제인 것 같습니다.
neounix
(Dark Matter)
8월 5, 2020, 1:24오후
7
Jay의 말이 맞습니다.
@onar3d 님, 다음 논리적 단계는 컨테이너 내부에서 curl 테스트를 실행해 보는 것입니다.
확인해 본 결과 컨테이너에 이미 curl이 설치되어 있으므로, 설치할 필요는 없습니다.
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
Release-Date: 2019-02-06
Protocols: dict file ftp ftps gopher http https imap imaps ldap ldaps pop3 pop3s rtmp rtsp scp sftp smb smbs smtp smtps telnet tftp
Features: AsynchDNS IDN IPv6 Largefile GSS-API Kerberos SPNEGO NTLM NTLM_WB SSL libz TLS-SRP HTTP2 UnixSockets HTTPS-proxy PSL
도움이 되길 바랍니다.
onar3d
(Ilias Bergstrom)
8월 5, 2020, 1:25오후
8
흥미로운 제안이네요!
하지만 저는 docker exec -it DOCKERID bash를 사용하여 도커에 진입했고, 동일한 curl 명령을 실행했는데 이 역시 정상적으로 작동했습니다.
onar3d
(Ilias Bergstrom)
8월 5, 2020, 1:26오후
9
감사합니다. 방금 시도해 봤는데 잘 작동했어요!
그러면 Docker가 차단된 건 아닐 텐데…
neounix
(Dark Matter)
8월 5, 2020, 1:31오후
10
@onar3d 님 안녕하세요
기대하기는 어렵지만, 587 포트 대신 465 포트를 사용하고 계시므로 컨테이너의 yml 파일에서 다음 설정을 시도해 보시는 건 어떨까요:
DISCOURSE_SMTP_ENABLE_START_TLS: false
그리고 컨테이너를 다시 빌드해서 운이 좋게 해결되는지 확인해 보세요
참고:
GMail(예를 들어 비교를 위해)은 다음 포트와 인증 방법을 제공합니다.
TLS/STARTTLS(때로는 Explicit TLS라고도 함): 587 포트 사용
SSL(때로는 Implicit TLS라고도 함): 465 포트 사용
…이건 좀 운을 거는 셈이네요 하지만 운이 좋으면 될지도 모릅니다
안 되면 언제든 되돌릴 수 있습니다.
onar3d
(Ilias Bergstrom)
8월 5, 2020, 1:48오후
11
감사합니다!
방금 시도해 봤는데, Discourse에서 이메일이 전송되지 않았습니다
neounix
(Dark Matter)
8월 5, 2020, 1:52오후
12
네, 가능성이 낮긴 했죠…… 그 문제로 시간을 낭비하게 해서 죄송합니다!
현재 제가 가진 또 다른 "미친 아이디어"는 메일 서버(누구인지에 따라 다릅니다) 설정에 들어가서 포트를 587로 설정해 보고(많은 SMTP 제공업체가 선택지를 제공합니다), 물론 다시 DISCOURSE_SMTP_ENABLE_START_TLS: true로 “운을 한번 더 시험해 보는” 것입니다.
솔직히 저는 보통 “운에 맡기는” 스타일이 아니라 사실에 기반한 접근을 선호합니다. 그래서 시도하고 싶지 않으시면 완전히 이해합니다 @onar3d !!
onar3d
(Ilias Bergstrom)
8월 5, 2020, 1:54오후
14
감사합니다! unfortunately 저는 그 부분을 변경할 권한이 없어서요. 제 프로바이더가 설정해준 ‘턴키’ 방식 중 하나거든요.
neounix
(Dark Matter)
8월 5, 2020, 1:56오후
15
안녕하세요 @onar3d
알겠습니다. 지금은 제 머릿속에 ‘미친 아이디어’가 하나도 남아 있지 않고, 여기서 밤을 보내기 위해 마무리할 시간입니다. 행운을 빕니다. 여기 있는 똑똑한 팀원 중 누군가 더 좋은 아이디어를 내주기를 바랍니다.
좋은 하루 보내세요.
onar3d
(Ilias Bergstrom)
8월 6, 2020, 11:22오전
16
몇 번 더 시도해 본 후(정말 감사드립니다 @IAmGav !), 제 Discourse 설정이 다른 이메일 서버에서는 정상적으로 작동하는 것으로 확인되었습니다. 이는 여러 가지 가능성을 배제할 수 있게 해줍니다.
제 이메일 서버 제공업체로부터 그들의 측에서 발생한 오류 로그 메시지와 제안 사항을 받았습니다:
엔지니어가 로그를 확인한 결과, 해당 IP에서 확인된 오류는 SSL 설정과 관련이 있습니다. 아마도 구버전 또는 연결 설정을 사용하고 있는 것으로 보입니다.
증거:
[95.216.139.49]:33568에서 발생한 TLS 오류: SSL_accept: TCP 연결이 피어에 의해 닫힘
작동하는지 확인하기 위해 SSL 모드를 꺼 두고 시도해 보세요.
위와 같이 DISCOURSE_SMTP_ENABLE_START_TLS를 false로 설정하고, 포트 465와 26(제 제공업체에서 비-SSL 연결용 포트라고 명시한 것)를 모두 시도해 보았지만, 어느 쪽도 작동하지 않았습니다.
더 자세히 읽어본 후 이제야 깨달았지만, 도메인 thewizardofosc.com에 대해 SSL 인증서를 구매하지 않았기 때문일까요?
IAmGav
(Gavin Perch)
8월 6, 2020, 11:28오전
17
SSL이 없는 옵션으로 작동하지 않는다면, 유료 SSL을 사용해도 작동하지 않을 것입니다. 이메일 호스트 제공업체가 Let’s Encrypt 무료 SSL을 제공해야 합니다.
neounix
(Dark Matter)
8월 6, 2020, 11:51오전
18
안녕하세요, @onar3d님
-v 옵션(즉시 떠올린 것이라 정확하지는 않지만)을 활성화하여 curl 테스트를 실행해 보시는 것도 좋습니다. 이렇게 하면 성공적인 핸드셰이크를 완전히 분석할 수 있고, 그 분석 결과를 바탕으로 역추적하여 문제를 해결해 나갈 수 있습니다.
이 verbose 옵션을 사용하면 어떤 부분이 정상 작동하는지 역설계할 수 있습니다
도움이 되셨길 바랍니다.