안녕하세요! 이 문제가 이미 명확한 해결책이 있는 것이라면 죄송합니다. 정말로 여기저기 찾아봤는데 제 문제에 대한 명확한 해결책을 찾지 못했습니다.
제가 직접 호스팅한 discord 인스턴스에서 몇 가지 설정을调整后 SMTP 설정을 올바르게 맞췄지만, 신규 사용자에게 이메일이 발송되지 않습니다 (초기 관리자 사용자에게도 발송되지 않았습니다. 결국 컨테이너 내부에서 rake 명령을 사용하여 관리자를 하나 생성했습니다).
처음에는 DNS 관련 문제 때문에 SMTP에 연결하지 못하는 줄 알았습니다. ./discourse-doctor를 실행하다가 결국 컨테이너 셸에 진입했을 때 다음과 같은 메시지가 반환되었기 때문입니다:
Testing sending to xxxx@gmail.com using smtp-relay.brevo.com:587, username:xxxxxxx@smtp-brevo.com with plain auth.
======================================== ERROR ========================================
Connection to port 587 failed.
====================================== SOLUTION =======================================
The most likely problem is that your server has outgoing SMTP traffic blocked.
If you are using a service like Mailgun or Sendgrid, try using port 2525.
=======================================================================================
그러나 SMTP 문제 해결 가이드에서 권장하는 openssl 명령을 실행했을 때 실제로 연결이 이루어졌을 뿐만 아니라, EHLO, AUTH LOGIN 및 기타 명령(지금까지 존재하는지 몰랐던 명령들, 헷 ^^')을 사용하여 컨테이너 내부에서 제 자신에게 테스트 이메일을 보내는 데 성공했습니다. 따라서 문제가 컨테이너가 SMTP 서버에 연결할 수 없는 것이 아니라고 생각합니다.
명확성을 위한 수정 사항
이것은 컨테이너 내부에서 수행했습니다: ./launcher enter container 명령을 사용하여 컨테이너에 로그인했습니다. 그 프롬프트에서 aforementioned 명령들을 실행했습니다.
도움이 될지 모르겠지만 제 SMTP 설정은 다음과 같습니다. 물론 로그인 정보는 편집했습니다.
shared/standalone/log/rails/production.log에서 관련 로그 줄을 찾았습니다:
Started POST "/admin/email/test" for 192.168.0.206 at 2024-10-18 23:49:02 +0000
Processing by Admin::EmailController#test as */*
Parameters: {"email_address"=>"jggalindez@gmail.com"}
Completed 422 Unprocessable Entity in 5201ms (Views: 0.4ms | ActiveRecord: 0.0ms | Allocations: 12487)
드디어 해결했습니다. DNS 문제인 것 같습니다. (getent와 openssl 명령을 사용할 때는 URL을 정상적으로 해석할 수 있었기 때문입니다.) 그래서 getent를 실행하여 SMTP 릴레이의 호스트 IP를 확인한 후, 컨테이너를 실행하면서 서버 주소를 해당 IP로 변경했습니다. 그랬더니 다른 오류가 발생했는데, 바로 이 스레드에 있는 오류였습니다. 거기에 제시된 해결책인 yaml 파일에 DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none 줄을 추가하는 것이 결국 문제를 해결해 주었습니다.
DNS 문제가 나중에 또 문제를 일으킬지는 모르겠네요. 안 그랬으면 좋겠어요 ㅋㅋ 하지만 도움 주셔서 감사합니다!
네, 그렇게 생각해서 결국 설정 파일에 docker_args yaml 태그를 추가하고 dns 서버를 직접 지정했습니다.
docker_args 태그가 어디에 들어가는지 궁금하신 분들을 위해 (저도 찾아봐야 했거든요), app.yml 파일의 일부입니다:
*******Omitted lines above*********
## BE *VERY* CAREFUL WHEN EDITING!
## YAML FILES ARE SUPER SUPER SENSITIVE TO MISTAKES IN WHITESPACE OR ALIGNMENT!
## visit http://www.yamllint.com/ to validate this file as needed
docker_args: "--dns 1.1.1.1 --dns 8.8.4.4 --dns 8.8.8.8"
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
## Uncomment the next line to enable the IPv6 listener
#- "templates/web.ipv6.template.yml"
- "templates/web.ratelimited.template.yml"
*******Omitted rest of file below*********