Digital Ocean, SendGrid, Netlify: el correo de registro de la cuenta de administrador no llega

Estoy utilizando Digital Ocean (alojamiento), SendGrid (SMTP) y Netlify (dominio, DNS) para configurar mi foro abierto para mi blog.

Ya configuré la parte de dominio y DNS y pude acceder a la página de registro.

Sin embargo, el correo electrónico nunca llega al correo del desarrollador.

Probé las siguientes configuraciones en 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: {miusuario}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, valor predeterminado true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: {miusuario}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, valor predeterminado 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, valor predeterminado true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 25
DISCOURSE_SMTP_USER_NAME: {miusuario}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (opcional, valor predeterminado true)

DISCOURSE_SMTP_ADDRESS: smtp.sendgrid.net
DISCOURSE_SMTP_PORT: 25
DISCOURSE_SMTP_USER_NAME: {miusuario}
DISCOURSE_SMTP_PASSWORD: XX.xxxx.xxxxxxxxx
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (opcional, valor predeterminado true)
DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: none

Cuando ejecuto ./discourse-doctor y pruevo el envío de un correo electrónico, obtengo:
535 Authentication failed: Bad username / password

Parece que estás usando una clave de API como nombre de usuario para SendGrid.

Probé tanto la apiKey como mi nombre de usuario (admin y teammate), pero aún no logro que funcione.

Por lo que sé, si quieres usar una clave de API, debes usar el nombre de usuario ‘apikey’ con la contraseña correspondiente. No he encontrado información sobre si distingue entre mayúsculas y minúsculas, pero es mejor prevenir.

Podrías contactar al soporte de DigitalOcean; se sabe que bloquean el tráfico SMTP saliente hacia servicios de terceros en cuentas nuevas. ¿Puedes hacer telnet a ese puerto desde el host?

Si no, usa el puerto 2525. No tendrás que esperar por un ticket. Yo simplemente uso el puerto 2525 por defecto. No hay inconvenientes.

También lo intenté con 2525…

También acabo de probar con apikey pero no funciona…

Sí, intenté conectarme con telnet siguiendo este tutorial (How to send an Email with SMTP | SendGrid Docs | Twilio)
y pude conectarme con éxito.

@Stephen, buena idea. Contactaré a DigitalOcean para bloquear el SMTP saliente.

No es necesario hacer eso porque:

¿Aparecen los mensajes de prueba en tus registros de SendGrid?

Para saber cómo hacerlo, deberías consultar con el equipo de SendGrid.

¡Vale, voy a obtener el registro!

Creo que podría haber un problema con el puerto en estado filtrado:

PUERTO     ESTADO    SERVICIO
25/tcp   filtrado smtp
587/tcp  filtrado submission
2525/tcp filtrado ms-v-worlds

Aquí está el mensaje de Digital Ocean:
Verifique si ha abierto el puerto 25 en el firewall. Puede comprobarlo con el siguiente comando: nmap -p 25,465,587 “dirección IP de su Droplet”

Ejemplo de comando nmap:

nmap -p 25,465,587 142.93.189.227

Iniciando Nmap 7.70 ( [https://nmap.org](https://nmap.org/) ) el 2019-10-08 11:10 IST
Informe de escaneo Nmap para [unms.adastratechnology.com](http://unms.adastratechnology.com/) (142.93.189.227)
El host está activo (latencia de 0.56 s).
PUERTO ESTADO SERVICIO
25/tcp cerrado smtp
465/tcp cerrado smtps
587/tcp cerrado submission

Aquí está el mensaje de Digital Ocean:

Esto le dará una idea del estado actual del PUERTO 25. Si está en estado filtrado o cerrado, puede abrir el Firewall en la nube para el PUERTO 25.

Aquí está nuestra guía con comandos iptables comunes: https://www.digitalocean.com/community/tutorials/iptables-essentials-common-firewall-rules-and-commands#service-mail

El problema no es el puerto 25 de tu servidor (es decir, entrante), sino el tráfico saliente desde tu servidor hacia un host remoto en el puerto 587.

DigitalOcean tiene antecedentes de bloquear esto, ya que a veces las personas crean cuentas nuevas para hacer Cosas Malas.

Sí, he abierto un ticket de soporte y estoy esperando su respuesta.

¿Crees que tenga algo que ver con SendGrid?
@Stephen

Casi con total seguridad no. Vemos muchos nuevos instalaciones con problemas en puertos de salida en cuentas nuevas; no hay nada específico de Sendgrid.

Si tienes una estación de trabajo con Linux o Mac, puedes probar SMTP por el puerto 587 hacia Sendgrid de forma independiente haciendo algo como:

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

Si falla desde tu VPS pero funciona desde cualquier otro lugar, el problema es el tráfico de salida de DO.

Acabo de probarlo desde mi Mac y se conecta correctamente.

Ejecuté este código en mi Mac (Catalina)

Llamé a openssl s_client -starttls smtp -connect smtp.sendgrid.net:587

Obtuve la siguiente respuesta

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

Bien, y si escribes EHLO y pulsas Enter, la respuesta debería ser:

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

Esto demuestra que puedes conectarte a SendGrid. Si eso falla desde el droplet de DO, entonces ya tienes tu respuesta.

Creo que lo conecté, ¿verdad? Así que creo que estamos bien con SendGrid.

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

@Stephen, sigo esperando una respuesta de Digital Ocean sobre cómo desbloquear el correo saliente.

Vale, ¿así que si repites eso desde el droplet vía SSH se conecta?

Acabo de comprobarlo desde uno de mis droplets en DO y se comporta igual: el puerto 587 está abierto.

Si tenía razón antes, la conexión debería fallar. Si falla, entonces estás esperando lo correcto: es mejor saberlo con certeza que esperar solo para descubrir que el problema estaba en otro lugar.

Has demostrado al menos dos formas diferentes en que el correo saliente no está bloqueado por Digital Ocean.

Me arriesgaré a sugerir que no estás utilizando el nombre de usuario y/o la contraseña correctos.