Digital Ocean, SendGrid, Netlify - 관리자 계정 등록 이메일이 도착하지 않음

Digital Ocean(호스팅), SendGrid(SMTP), Netlify(도메인, DNS)를 사용하여 블로그용 오픈 포럼을 설정하고 있습니다.

도메인과 DNS 설정은 완료했고, 가입 페이지까지 접근할 수 있었습니다.

하지만 이메일이 개발자 이메일로 전달되지 않습니다.

nano containers/app.yml에서 아래 설정들을 시도해 보았습니다.
DISCOURSE_HOSTNAME: ‘discourse.myblog.com’
DISCOURSE_DEVELOPER_EMAILS: 'adminEmail@gmail.com’

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 2525
DISCOURSE_SMTP_USER_NAME: {myusername}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (선택 사항, 기본값 true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: {myusername}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (선택 사항, 기본값 true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: apiKey
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (선택 사항, 기본값 true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 25
DISCOURSE_SMTP_USER_NAME: {myusername}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (선택 사항, 기본값 true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 25
DISCOURSE_SMTP_USER_NAME: {myusername}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (선택 사항, 기본값 true)
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

./discourse-doctor를 실행하여 이메일 전송을 테스트하면 다음 오류가 발생합니다.
535 Authentication failed: Bad username / password

SendGrid에서 API 키를 사용자 이름으로 사용하고 있는 것 같습니다.

apiKey와 내 사용자 이름(admin과 teammate)을 모두 시도해 보았지만
아직도 작동하지 않습니다.

AFAIK, API 키를 사용하려면 사용자 이름으로 'apikey’를 사용하고 그에 해당하는 비밀번호를 입력해야 합니다. 대소문자 구분이 되는지에 대한 정보는 찾지 못했지만, 안전을 위해 주의하는 것이 좋습니다.

DigitalOcean 지원팀에 문의해 보시는 것이 좋을 수도 있습니다. 새 계정에서 제3자 서비스로의 아웃바운드 SMTP가 차단되는 경우가 종종 있기 때문입니다. 해당 호스트에서 해당 포트에 telnet으로 연결해 볼 수 있나요?

그렇지 않다면 2525 포트를 사용하세요. 티켓을 기다릴 필요가 없습니다. 저는 기본적으로 2525 포트를 사용합니다. 단점이 전혀 없습니다.

2525도 시도해 봤는데…

apikey로 시도해 보았지만 작동하지 않습니다…

네, 이 튜토리얼(How to send an Email with SMTP | SendGrid Docs | Twilio)에 따라 telnet으로 연결을 시도해 보았으며
성공적으로 연결되었습니다.

@Stephen 디지털 오션에 아웃바운드 SMTP를 차단해 달라고 요청하는 좋은 아이디어네요

그렇게 할 필요가 없습니다. 왜냐하면:

SendGrid 로그에 테스트 메시지가 표시되고 있나요?

그 방법을 알고 싶으시다면 SendGrid 측에 문의해 보시길 권해드립니다.

좋아요, 로그를 가져올게요!

포트 상태가 Filtered(필터링됨)인 것과 관련이 있을 것 같습니다

PORT     STATE    SERVICE
25/tcp   filtered smtp
587/tcp  filtered submission
2525/tcp filtered ms-v-worlds

Digital Ocean에서 받은 메시지입니다.
방화벽에서 포트 25가 열려 있는지 확인하십시오. 다음 명령어로 확인할 수 있습니다: nmap -p 25,465,587 “your Droplet’s IP address”

nmap 명령어 예시:

nmap -p 25,465,587 142.93.189.227

Starting Nmap 7.70 ( [https://nmap.org](https://nmap.org/) ) at 2019-10-08 11:10 IST
Nmap scan report for [unms.adastratechnology.com](http://unms.adastratechnology.com/) (142.93.189.227)
Host is up (0.56s latency).
PORT STATE SERVICE
25/tcp closed smtp
465/tcp closed smtps
587/tcp closed submission

Digital Ocean에서 받은 메시지입니다:

이것은 포트 25의 현재 상태를 파악하는 데 도움이 됩니다. 상태가 Filtered(필터링됨) 또는 closed(닫힘) 상태 중 하나인 경우, 포트 25에 대한 Cloud Firewall(클라우드 방화벽)을 열 수 있습니다.

일반적인 iptables 명령어에 대한 가이드는 다음과 같습니다: https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands#service-mail

문제는 서버의 25 포트(즉, 수신)가 아니라, 서버에서 원격 호스트의 587 포트로의 발신 트래픽입니다.

DigitalOcean은 악의적인 용도로 새 계정을 생성하는 경우가 있기 때문에 이 트래픽을 차단하는 이력이 있습니다.

네, 지원 티켓을 작성했고 답변을 기다리고 있습니다.

이것이 SendGrid와 관련이 있다고 생각하시나요?
@Stephen

거의 확실하지 않습니다. 신규 계정의 경우 아웃바운드 포트 관련 문제가 발생하는 신규 설치를 많이 확인하고 있으며, Sendgrid에 특화된 문제는 아닙니다.

Linux 또는 Mac 워크스테이션을 사용 중이라면, 다음과 같은 명령을 실행하여 Sendgrid에 대한 587 포트의 SMTP를 독립적으로 테스트할 수 있습니다:

openssl s_client -starttls smtp -connect smtp.sendgrid.com:587

VPS에서는 실패하지만 다른 곳에서 작동한다면, 문제는 DO(디지털오션)의 아웃바운드 트래픽에 있습니다.

저는 Mac에서 테스트해 보았으며, 성공적으로 연결되었습니다.

맥(Catalina)에서 이 코드를 실행했습니다.

openssl s_client -starttls smtp -connect smtp.sendgrid.net:587을 호출했습니다.

다음과 같은 반환값을 받았습니다.

CONNECTED(00000006)
depth=3 C = US, O = "The Go Daddy Group, Inc.", OU = Go Daddy Class 2 Certification Authority
verify return:1
depth=2 C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", CN = Go Daddy Root Certificate Authority - G2
verify return:1
depth=1 C = US, ST = Arizona, L = Scottsdale, O = "GoDaddy.com, Inc.", OU = http://certs.godaddy.com/repository/, CN = Go Daddy Secure Certificate Authority - G2
verify return:1
depth=0 OU = Domain Control Validated, CN = *.smtp.sendgrid.net
verify return:1
---
Certificate chain
 0 s:/OU=Domain Control Validated/CN=*.smtp.sendgrid.net
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
 1 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
   i:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
 2 s:/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./CN=Go Daddy Root Certificate Authority - G2
   i:/C=US/O=The Go Daddy Group, Inc./OU=Go Daddy Class 2 Certification Authority
---
Server certificate
-----BEGIN CERTIFICATE-----
MIIGvzCCBaegAwIBAgIIR8KHdm5J8J0wDQYJKoZIhvcNAQELBQAwgbQxCzAJBgNV
BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRow
GAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjEtMCsGA1UECxMkaHR0cDovL2NlcnRz
LmdvZGFkZHkuY29tL3JlcG9zaXRvcnkvMTMwMQYDVQQDEypHbyBEYWRkeSBTZWN1
cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IC0gRzIwHhcNMTgxMjI4MjAyMjIwWhcN
MjAxMjI4MjAyMjIwWjBBMSEwHwYDVQQLExhEb21haW4gQ29udHJvbCBWYWxpZGF0
ZWQxHDAaBgNVBAMMEyouc210cC5zZW5kZ3JpZC5uZXQwggEiMA0GCSqGSIb3DQEB
AQUAA4IBDwAwggEKAoIBAQC/xYdx1oyPHcE6EdH61RXJK9JYA9p9GOrYhJ6rVq2c
zpGR3/4EHwaZO/daZxvTn5p3LRBBW5KBBBNCLa0Vl84dLt6skUg3oWo17mim2ly1
AegTwN15/wxqq8Hf2G4Sr9g00zlBAEs2HeOyr3SxEvLCLscYtIKG7cD+CsUi0JT6
EeDXCVL04nJIheFh4h9TRcCook97yuqt7muySrarzekatOnpv4kuU8bk0uq4ym5K
NO4zRUiCRy7JXAC2KZ4+0qhSlPFACRvygdPxK5ICvQq8/ZPlRWVn3yrWnQ4kEekp
jDT4ucOpv8V/SxYmsBRqFD35ASDj6PZLYmJFb9XdzGCzAgMBAAGjggNFMIIDQTAM
BgNVHRMBAf8EAjAAMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAOBgNV
HQ8BAf8EBAMCBaAwNwYDVR0fBDAwLjAsoCqgKIYmaHR0cDovL2NybC5nb2RhZGR5
LmNvbS9nZGlnMnMxLTkwMS5jcmwwXQYDVR0gBFYwVDBIBgtghkgBhv1tAQcXATA5
MDcGCCsGAQUFBwIBFitodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHkuY29tL3Jl
cG9zaXRvcnkvMAgGBmeBDAECATB2BggrBgEFBQcBAQRqMGgwJAYIKwYBBQUHMAGG
GGh0dHA6Ly9vY3NwLmdvZGFkZHkuY29tLzBABggrBgEFBQcwAoY0aHR0cDovL2Nl
cnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBvc2l0b3J5L2dkaWcyLmNydDAfBgNV
HSMEGDAWgBRAwr0njsw0gzCiM9f7bLPwtCyAzjAxBgNVHREEKjAoghMqLnNtdHAu
c2VuZGdyaWQubmV0ghFzbXRwLnNlbmRncmlkLm5ldDAdBgNVHQ4EFgQUqLajl4xR
pZ1YZD2l6KsTfcmd8t4wggF9BgorBgEEAdZ5AgQCBIIBbQSCAWkBZwB2AKS5CZC0
GFgUh7sTosxncAo8NZgE+RvfuON3zQ7IDdwQAAABZ/Z7aIYAAAQDAEcwRQIhAOhF
95cuap1qIlSVtRzNkaUbNHxpgj+RoBfxcSFgqlBZAiBNsRnVaIwWMBoR9s+a9YwC
neLWWN777jRjew5mv2DVbwB2AO5Lvbd1zmC64UJpH6vhnmajD35fsHLYgwDEe4l6
qP3LAAABZ/Z7bY8AAAQDAEcwRQIgJZMibCSMJDwTwEp64XSQQXCuYtKJDvhT7FwK
rxoyH6oCIQCz1HVQbPLwMOXQPBRQFtpYEb18JCVdzlh8+f0hITgC5gB1AF6nc/nf
VsDntTZIfdBJ4DJ6kZoMhKESEoQYdZaBcUVYAAABZ/Z7cugAAAQDAEYwRAIgQoxF
Fak6Aq9tVDo5BjaSl+90pZ8928SmDpA3XrQ7BrQCIHdOuigFbYK96gJ/GPaVNGqc
w5FKxw9Z8TnpjZH1GEC/MA0GCSqGSIb3DQEBCwUAA4IBAQBbBTL603nJ9H7ClsKR
g/XmFpGwQ4C5OftGmZ/Z/CG9iqOkLB2TPqdJ9NZRruMpWjnOnvDFoQ3NMSfDYdsn
25fzh30fx2+zIWW2IdKa1yO4A9tr3cxn4iINy/+dcNmF6tciGJtdBhZZgpyqhymu
kjuMCQRL17uVkLyrYA/+Ti5N02fzRchprOydiasnhHSdDM3HVZQOqjOvoB5omtuf
D1aldjrgW+TcILlnZxYvaqDPeMvUIZxQPzealRniQ7tmMOAgJfjZXxzuXatqXqw0
zbvQOiY2pSDn7WPxLbGafLAOFWIWhHtkEZMRC2n3WpupiZuC0pacmQeUgVY6Vabs
KU8W
-----END CERTIFICATE-----
subject=/OU=Domain Control Validated/CN=*.smtp.sendgrid.net
issuer=/C=US/ST=Arizona/L=Scottsdale/O=GoDaddy.com, Inc./OU=http://certs.godaddy.com/repository//CN=Go Daddy Secure Certificate Authority - G2
---
No client certificate CA names sent
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 5002 bytes and written 357 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: F315CBBB90B16A8F85D95F0CD18C07135A128B5FE6CE53D50C7CF81310B28732
    Session-ID-ctx: 
    Master-Key: E4C09CCC8AECB9C596D608B79E9A5360B88E2C31EB98C770E96A5037177F7F5D92B9CFA449B8ECA7AEA5D4CB873601D4
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - f7 61 88 44 b6 0d 7c ce-0c 35 b3 ba 33 03 ce 33   .a.D..|..5..3..3
    0010 - 95 99 62 e9 f9 ea 5e e6-00 f8 09 66 47 bd 28 cf   ..b...^....fG.(.
    0020 - 51 64 c5 76 3a ac b2 e2-ff 2a be 29 63 8c a8 d2   Qd.v:....*.)c...
    0030 - 76 2e ba 08 32 74 4a 4b-24 c8 69 ef 71 8e da e6   v...2tJK$.i.q...
    0040 - e3 dd c3 a8 19 84 02 c9-9e e7 7a 7a b8 b7 78 f3   ..........zz..x.
    0050 - 02 8c e6 ff 85 0e f5 4d-f3 5a 49 b1 22 40 12 ee   .......M.ZI."@..
    0060 - 7d d5 8c f4 d9 50 57 0a-c2 82 06 52 9e 64 89 fd   }....PW....R.d..
    0070 - 21 7b e4 f0 f3 e8 2c 61-09 a7 99 1f c8 7e c5 1b   !{....,a.....~..
    0080 - 23 fc 11 bc a7 8d 21 d6-05 6f 86 66 5b e9 2e 87   #.....!..o.f[...
    0090 - d0 98 8f b2 2b 7d 18 90-50 62 67 8f 77 8b c2 37   ....+}..Pbg.w..7

    Start Time: 1584738375
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
---
250 AUTH=PLAIN LOGIN

네, 그리고 EHLO를 입력한 뒤 엔터를 누르면 다음과 같은 응답이 표시되어야 합니다:

250-smtp.sendgrid.net
250-8BITMIME
250-PIPELINING
250-SIZE 31457280
250-STARTTLS
250-AUTH PLAIN LOGIN
250 AUTH=PLAIN LOGIN

이는 SendGrid에 연결할 수 있음을 증명합니다. DO 드롭렛에서 이 작업이 실패한다면 원인을 찾은 것입니다.

연결이 제대로 된 것 같네요? 그러면 SendGrid는 문제없이 사용할 수 있을 것 같습니다.

EHLO
250-smtp.sendgrid.net
250-8BITMIME
250-PIPELINING
250-SIZE 31457280
250-STARTTLS
250-AUTH PLAIN LOGIN
250 AUTH=PLAIN LOGIN

@Stephen 디지털 오션에서 아웃바운드 이메일 차단 해제 방법에 대한 답변을 기다리고 있습니다.

알겠습니다. 그렇다면 드롭렛에서 SSH를 통해 그 내용을 반복하면 연결이 되는 건가요?

방금 DO의 드롭렛 중 하나에서 확인해 보니 포트 587이 열려 있는 것과 동일한 방식으로 동작합니다.

만약 제가 전에 말한 내용이 맞다면, 연결이 실패해야 합니다. 만약 실패한다면, 지금 기다리고 있는 것이 올바른 방향이라는 뜻입니다 — 문제를 다른 곳에 있는 것으로 오해하기 전에 확실하게 아는 것이 나으니까요!

Digital Ocean에서 아웃바운드 메일이 차단되지 않았음을 보여주는 두 가지 다른 방법을 이미 입증했습니다.

한발짝 더 나가서, 올바른 사용자 이름 또는 비밀번호를 사용하지 않고 계신다고 추측해 봅니다.