Digital Ocean, SendGrid, Netlify - E-mail de registro da conta de administrador não está chegando

Estou usando o Digital Ocean (hospedagem), SendGrid (SMTP) e Netlify (Domínio, DNS) para configurar meu fórum aberto para o meu blog.

Já configurei a parte de Domínio e DNS e consegui acessar a página de registro.

Mas o e-mail nunca chega ao e-mail do Desenvolvedor.

Tentei as configurações abaixo em 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           # (opcional, padrão 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           # (opcional, padrão 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           # (opcional, padrão 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           # (opcional, padrão 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           # (opcional, padrão true)
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Quando executo ./discourse-doctor e testo o envio de um e-mail, recebo:
535 Falha na autenticação: nome de usuário/senha inválidos

Parece que você está usando uma chave de API como nome de usuário para o SendGrid?

Tentei tanto a apiKey quanto meu nome de usuário (admin e colega de equipe), mas ainda não consegui fazer funcionar.

Pelo que sei, se quiser usar uma chave de API, precisa usar o nome de usuário ‘apikey’ com a senha correspondente. Não consigo ver nada sobre se é sensível a maiúsculas e minúsculas, mas é melhor prevenir.

Talvez queira entrar em contato com o suporte da DigitalOcean; eles são conhecidos por bloquear o SMTP de saída para serviços de terceiros em contas novas. Você consegue fazer telnet nessa porta a partir do host?

Se não, use a porta 2525. Você não precisará esperar por um chamado. Eu uso a porta 2525 por padrão. Não há nenhuma desvantagem.

Tentei com 2525 também…

Eu também tentei com apikey, mas não funcionou…

Sim, tentei me conectar via telnet seguindo este tutorial (How to send an Email with SMTP | SendGrid Docs | Twilio) e consegui conectar com sucesso.

@Stephen, boa ideia. Vou entrar em contato com a Digital Ocean para bloquear o SMTP de saída.

Não há necessidade disso porque:

As mensagens de teste estão aparecendo nos seus logs do SendGrid?

Para saber como fazer isso, você deve perguntar às pessoas do SendGrid.

Certo, vou pegar o log!

Acho que pode haver um problema com a porta no estado “Filtered” (filtrada):

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

Aqui está a mensagem recebida da Digital Ocean:
Verifique se você abriu a porta 25 no firewall. Você pode verificar com o seguinte comando: nmap -p 25,465,587 “IP do seu Droplet”

Comando nmap de exemplo:

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

Aqui está a mensagem da Digital Ocean:

Isso dará uma ideia do status atual da PORTA 25. Se estiver no estado Filtered (filtrada) ou closed (fechada), você pode abrir o Cloud Firewall para a PORTA 25.

Aqui está nosso guia com comandos iptables comuns: https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands#service-mail

O problema não é a porta 25 do seu servidor (ou seja, entrada), mas sim o tráfego de saída do seu servidor para um host remoto na porta 587.

A DigitalOcean tem histórico de bloquear isso, pois às vezes pessoas criam novas contas para fazer Coisas Ruins.

Sim, abri um chamado de suporte e estou aguardando a resposta deles.

Você acha que tem algo a ver com o SendGrid?
@Stephen

Quase certamente não. Vemos muitos novos installs com problemas de porta de saída em contas novas; não há nada específico da Sendgrid.

Se você tiver uma estação de trabalho Linux ou Mac, pode testar o SMTP pela porta 587 para a Sendgrid independentemente, fazendo algo como:

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

Se falhar no seu VPS e funcionar em qualquer outro lugar, o problema é o tráfego de saída da DO.

Acabei de testar no meu Mac e a conexão foi bem-sucedida.

Executei este código no meu Mac (Catalina)

Chamei openssl s_client -starttls smtp -connect smtp.sendgrid.net:587

e obtive o seguinte retorno

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

Certo, e se você digitar EHLO e pressionar Enter, a resposta deve ser:

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

Isso comprova que você pode se conectar ao SendGrid. Se isso falhar a partir do droplet DO, você terá sua resposta.

Acho que consegui conectar? Então acho que estamos bem com o SendGrid

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

@Stephen, ainda estou aguardando uma resposta da Digital Ocean sobre como desbloquear o envio de e-mails.

Ok, então, se você repetir isso a partir do droplet via SSH, ele conecta?

Acabei de verificar em um dos meus droplets na DO e ele se comporta da mesma forma: a porta 587 está aberta.

Se eu estava correto antes, a conexão deveria falhar. Se falhar, então você está esperando pelo que é certo — é melhor ter certeza do que esperar apenas para descobrir que o problema estava em outro lugar!

Você demonstrou pelo menos duas maneiras diferentes de que o envio de e-mails não está bloqueado pela Digital Ocean.

Vou arriscar uma suposição e sugerir que você não está usando o nome de usuário e/ou senha corretos.