Google G Suite Relay SMTP가 작동하지 않음

안녕하세요, DigitalOcean Linux VPS에 discourse를 처음 설치하고 있습니다. 이 VPS는 Nginx를 통해 여러 사이트를 운영 중이며, discourse를 여러 사이트와 함께 설치하는 방법에 대한 튜토리얼을 따랐습니다: Run other websites on the same machine as Discourse - #182 by angus

discourse 설치 및 실행은 잘 되었습니다. 하지만 관리자 계정을 만들면 이메일이 전혀 도착하지 않습니다. 아래 튜토리얼을 따랐습니다: crunchify[dot]com/how-to-setup-email-for-discourse-forum-with-google-apps-smtp-relay-right-way/

제 서버는 postfix를 사용하여 이메일을 Google G Suite으로 중계하며, WordPress와 MyBB에서는 잘 작동합니다. 다만, 위의 튜토리얼에는 postfix에 대한 언급이 없으며, Google G Suite에 직접 연결하는 것으로 추정됩니다.

이메일 문제 해결을 위한 가이드를 따랐습니다: meta.discourse[dot]org/t/troubleshooting-email-on-a-new-discourse-install/16326

smtp relay로 telnet을 수행할 수 있습니다:

$ sudo telnet smtp-relay.gmail.com 587
Trying 2607:f8b0:400d:c04::1c...
Connected to smtp-relay.gmail.com.
Escape character is '^]'.
220 smtp-relay.gmail.com ESMTP n18sm708840ooi.26 - gsmtp

production 로그에는 다음과 같이 표시됩니다:

Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 32)
Delivered mail cf23dab4-3e43-421e-8e54-228489c58874@forums.neuronootropic.org (610.1ms)
Job exception: end of file reached

  Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.2ms | Allocations: 32)
Delivered mail a092f703-b590-4792-bd73-d9e4700c3e3c@forums.neuronootropic.org (261.1ms)
Job exception: end of file reached

해당 이메일이 정상적으로 작동한다는 것을 알기 때문에 app.yml 설정 파일의 이메일을 noreply@forums.neuronootropic.org으로 설정해 보았지만, 결과는 동일합니다. 여전히 숫자가 포함된 이메일을 보내고 있는데, 이것이某种 암호화라고 추정됩니다. 하지만 제 받은 편지함에는 도착하지 않습니다.


제 다른 문제는 nginx와 관련이 있습니다. 어제까지는 잘 작동했지만, 오늘 app.yml 설정 파일을 수정하여 URL을 서브도메인 대신 서브디렉토리로 설정했습니다.

현재 포럼인 MyBB는 서브디렉토리로 실행되고 있으며 이메일에 문제가 없으므로, 서브도메인이 이메일 작동 문제를 일으키는 것인지 확인해 보고 싶었습니다.

이 작업을 수행한 후 nginx가 깨진 것 같습니다. 어떤 이유에서인지, nginx 설정 파일에 명시되어 있지 않은데도 nginx가 discourse 디렉터리에서 SSL 인증서를 로드하려고 시도하고 있습니다. 에러 내용은 다음과 같습니다:

$ sudo nginx -t
nginx: [emerg] BIO_new_file("/var/discourse/shared/standalone/ssl/ssl.crt") failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/var/discourse/shared/standalone/ssl/ssl.crt','r') error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: configuration file /etc/nginx/nginx.conf test failed

SSL 인증서에는 Let’s Encrypt를 사용하고 있으며, 이는 정상적으로 작동하고 있습니다. discourse를 서브도메인 대신 서브디렉토리로 실행하려 하기 전인 어제까지 nginx에는 문제가 없었습니다.

도움 주시면 감사하겠습니다.

사실 저는 G-Suite Relay를 이메일용으로 설정하지 않았지만, G-Suite 관리자 계정에서 forum.neuronootropic.org를 발신 도메인으로 추가하고 인증해야 하는 것 같습니다. 만약 그렇다면, 구글 문서에 따르면 작동하지 않을 이유가 없습니다.

다만, G-Suite에서 neuronootr0pic.org를 인증했다면, noreply_forum@neuronootropic.org와 같은 주소를 사용하여 이메일을 보낼 수 있습니다.

제안해 주셔서 감사합니다.

다시 돌아가서 이메일을 테스트해 봤습니다. 결과적으로 noreply@forums.neuronootropic.org 주소에서는 수신만 가능하고 발신은 불가능한 것으로 나타났습니다. G Suite에서 이를 별도의 도메인으로 설정하고, 메인 도메인의 MX 레코드가 두 도메인 모두에 충분할 것이라고 생각했습니다.

하지만 그렇지 않았습니다. forums.neuronootropic.org에 MX 레코드를 추가한 후 이제 이메일을 보내고 받을 수 있게 되었습니다.

그러나 Discourse는 여전히 관리자 등록 시 활성화 이메일을 보내지 않습니다.

어떤 아이디어가 있을까요?

또한, 제가 명시적으로 지정하지 않았는데 nginx가 왜 discourse 디렉터리에서 SSL 인증서를 로드하려고 하는지 이유를 알 수 없습니다. 이 문제를 어떻게 접근해야 할지 아이디어가 있을까요?

수정: 알림 이메일 설정을 서브도메인이 아닌 메인 도메인에서 이메일을 보내도록 변경했습니다. Discourse를 다시 빌드했지만 여전히 서브도메인에서 이메일을 보내고 있습니다.

exec: rails r "SiteSetting.notification_email='noreply@neuronootropic.org'"

$ tail shared/standalone/log/rails/production.log
  Parameters: {"authenticity_token"=>"K6dxoAPvh8PEU6mLHjyFRhY/CcZFFIalhrX08AIh9EgGuOHrJos7i1w0dgdS7okeoSBTrmWJSsc77YpfTnMO4A=="}
  Rendering finish_installation/resend_email.html.erb within layouts/finish_installation
  Rendered finish_installation/resend_email.html.erb within layouts/finish_installation (Duration: 0.4ms | Allocations: 110)
  Rendered layouts/_head.html.erb (Duration: 0.4ms | Allocations: 145)
Completed 200 OK in 19ms (Views: 7.8ms | ActiveRecord: 0.0ms | Allocations: 3036)
  Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 32)
Delivered mail bce41ef8-2288-42cd-b7ae-e1eb990a4646@forums.neuronootropic.org (705.1ms)
Job exception: end of file reached

nginx 문제를 수정했습니다. 알고 보니 sites-enabled 디렉토리에 nginx 설정의 저장 파일이 있었습니다. sites-available의 파일을 sites-enabled로 링크하고 sites-enabled 디렉토리를 건드리지 않는 방식으로 관리하고 있는데, 어떻게 그런 파일이 그곳에 있게 되었는지 모르겠습니다.

G Suite Relay SMTP 문제는 여전히 남아 있습니다. 그 이유를 이해할 수 없습니다. Discourse의 production 로그에는 오류가 표시되지 않습니다.

Discourse doctor:

==================== MAIL TEST ====================
For a robust test, get an address from http://www.mail-tester.com/
Or just send a test message to yourself.
Email address for mail test? ('n' to skip) [forums@neuronootropic.org]: forums@neuronootropic.org
Sending mail to forums@neuronootropic.org. . .
Testing sending to forums@neuronootropic.org using smtp-relay.gmail.com:587.
======================================== ERROR ========================================
                                    UNEXPECTED ERROR

end of file reached

====================================== 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!)
=======================================================================================

이것이 무슨 뜻인가요?

저, 음… G Suite에서 릴레이를 설정할 때 저장 버튼을 누르지 않았네요, ㅋㅋ

이메일이 이제 잘 작동해요. :slight_smile: