Problema persistente de tempo limite SMTP com Spacemail no Discourse (VPS, Docker)

Olá Suporte/Comunidade Discourse,

Tenho lutado por vários dias para resolver um problema com e-mails de saída da minha instância Discourse. Estou executando o Discourse em um contêiner Docker em um VPS Spaceship (Phoenix, EUA). Meu provedor de e-mail é o Spacemail (SMTP).

Problema:

  • O Discourse não consegue enviar e-mails. Toda tentativa de enviar um e-mail de teste resulta em um erro de tempo limite:

  • Net::ReadTimeout with #<TCPSocket:(closed)>

  • Ou: execution expired

  • O problema persiste, independentemente de eu usar mail.spacemail.com ou smtp.spacemail.com como servidor SMTP.

O que eu tentei:

  • Verifiquei todas as configurações SMTP (endereço, porta 465 para SSL, e-mail completo como nome de usuário, senha correta) com o suporte da Spaceship/Spacemail.

  • Redefini e reinseri a senha SMTP várias vezes.

  • Confirmei com o suporte do Spacemail que não há restrições ou bloqueios do lado deles.

  • O Telnet do VPS para mail.spacemail.com na porta 465 é bem-sucedido (conexão abre, sem problema de firewall).

  • Mudei o MTU da rede Docker para 1400, conforme sugerido nos fóruns do Discourse, e reiniciei o Docker e o contêiner do Discourse.

  • Tentei tanto destroy/start quanto rebuild completo do aplicativo Discourse.

  • Verifiquei que Redis, PostgreSQL e todos os outros serviços estão rodando corretamente no contêiner.

  • Verifiquei que todos os registros DNS (MX, SPF, DKIM) estão configurados e propagados.

  • Testei de vários navegadores e dispositivos para descartar problemas do lado do cliente.

  • Enviei e recebi e-mails com sucesso usando a mesma conta Spacemail no Gmail (SMTP funciona fora do Discourse).

Ambiente:

  • Discourse rodando em Docker em um VPS Ubuntu 22.04 (Spaceship, Phoenix, EUA)

  • Provedor SMTP: Spacemail

  • Configurações SMTP: SSL, porta 465, mail.spacemail.com (também tentei smtp.spacemail.com)

  • Todos os registros DNS estão corretos e propagados

Logs:

  • Nenhum erro nos logs do Discourse, exceto o tempo limite no envio de e-mail.

  • Redis e outros serviços estão rodando sem conflito.

  • Tempos limite do worker Unicorn coincidem com as tentativas de envio de e-mail.

Contexto adicional: Somente hoje, gastei cerca de 7 horas trabalhando com o suporte do Spacemail via chat ao vivo para solucionar este problema. Apesar dos esforços deles e da confirmação de que tudo está configurado corretamente do lado deles, o problema persiste.

O que eu preciso:

  • Algum conselho sobre o que mais verificar ou tentar?

  • Existe alguma maneira de obter logs de depuração SMTP mais detalhados do Discourse?

  • Alguém já encontrou um problema semelhante com Spacemail ou outro provedor?

Muito obrigado pelo seu tempo e suporte!

Você pode confirmar que seguiu a instalação oficial?

Sim, segui o guia oficial de instalação do Discourse para Docker. Se precisar, posso fornecer detalhes sobre minha configuração ou quaisquer ajustes que tive que fazer para o meu ambiente de VPS.

Detalhes do log de erro:

Ao tentar enviar e-mails do Discourse, recebo consistentemente um erro de tempo limite nos logs de jobs:

Job exception: Net::ReadTimeout
net-protocol-0.2.2/lib/net/protocol.rb:229:in `rbuf_fill'
net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
net-smtp-0.5.1/lib/net/smtp.rb:1017:in `recv_response'
net-smtp-0.5.1/lib/net/smtp.rb:676:in `block in do_start'
net-smtp-0.5.1/lib/net/smtp.rb:1027:in `critical'
net-smtp-0.5.1/lib/net/smtp.rb:676:in `do_start'
net-smtp-0.5.1/lib/net/smtp.rb:642:in `start'
mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
mail-2.8.1/lib/mail/message.rb:269:in `deliver!'
/usr/local/lib/ruby/3.3.0/delegate.rb:87:in `method_missing'
/var/www/discourse/lib/email/sender.rb:296:in `send'
/var/www/discourse/app/jobs/regular/user_email.rb:79:in `send_user_email'
/var/www/discourse/app/jobs/regular/user_email.rb:39:in `execute'
/var/www/discourse/app/jobs/base.rb:318:in `block (2 levels) in perform'
... (stacktrace completo disponível mediante solicitação)

Descrição: Este erro ocorre toda vez que o Discourse tenta enviar um e-mail. O Net::ReadTimeout indica que o Discourse está esperando uma resposta do servidor SMTP (Spacemail), mas não a recebe a tempo. Todos os testes de rede e TLS (openssl, telnet) são bem-sucedidos, e o SMTP funciona em clientes externos, portanto, o problema parece ser específico da comunicação ou autenticação SMTP do Discourse.

Se precisar do stacktrace completo ou de mais detalhes, posso fornecê-los.

Não tenho familiaridade alguma com esse vps. Se você está bem no início da sua configuração, pode tentar recomeçar com um novo servidor em vez de continuar batendo a cabeça contra a parede. Talvez tente um provedor diferente se isso ainda não funcionar.

Eu Tentei:

  1. Zap-Hosting
  2. Ultra-Host
  3. E agora spaceship, onde tenho todos os Registros DNS, domínio, caixa de correio.

Você já tentou Troubleshoot email on a new Discourse install?

Desculpe por essa dificuldade toda para você. Não deveria ser tão difícil!

Sim, eu fiz… Então criei a conta de administrador via comando SSH. Depois disso, vi o erro: ‘Exceção de trabalho: Net::ReadTimeout’

Resumo das etapas de solução de problemas realizadas:

  • Instalou o Discourse em um VPS Spaceship (Phoenix, EUA) usando o guia oficial de instalação do Docker.

  • Criou a conta de administrador via comando SSH.

  • Configurou o SMTP com Spacemail (mail.spacemail.com, porta 465, SSL, e-mail completo como nome de usuário, senha correta).

  • Redefiniu e reinseriu a senha SMTP várias vezes.

  • Tentou usar mail.spacemail.com e smtp.spacemail.com como servidores SMTP.

  • Verificou com o suporte da Spacemail que não há restrições ou bloqueios do lado deles.

  • Confirmou que todos os registros DNS (MX, SPF, DKIM) estão corretos e propagados.

  • Enviou e recebeu e-mails com sucesso usando a mesma conta Spacemail no Gmail (SMTP funciona fora do Discourse).

  • Testou a conexão SMTP do VPS usando telnet e openssl (handshake TLS e banner SMTP recebidos com sucesso).

  • Alterou o MTU da rede Docker para 1400 e reiniciou o Docker e o contêiner Discourse.

  • Verificou que Redis, PostgreSQL e todos os outros serviços estão rodando corretamente no contêiner.

  • Tentou tanto destroy/start quanto rebuild completo do aplicativo Discourse após cada alteração.

  • Verificou os logs: apenas erros Net::ReadTimeout ao enviar e-mails, nenhum outro erro.

  • Certificou-se de que “Enable SMTP” está habilitado na interface de administração do Discourse.

  • Passou vários dias e cerca de 7 horas em chat ao vivo com o suporte da Spaceship/Spacemail para solucionar este problema.

Apesar de todas essas etapas, o Discourse ainda não consegue enviar e-mails e sempre retorna um erro Net::ReadTimeout.

root@ubuntu-2vcpu-amd-2gb-us-7yr03:/var/discourse# telnet mail.spacemail.com 465
Tentando 198.177.121.32… Conectado a mail.spacemail.com.
Caractere de escape é ‘^\]’.


(app.yml) ENV:
env:LC_ALL: en_US.UTF-8LANG: en_US.UTF-8LANGUAGE: en_US.UTF-8

DISCOURSE_DEFAULT_LOCALE: en
UNICORN_WORKERS: 4
DISCOURSE_HOSTNAME: citygaming.icu
DISCOURSE_DEVELOPER_EMAILS: ‘info@citygaming.icu’
DISCOURSE_SMTP_ADDRESS: mail.spacemail.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: info@citygaming.icu
DISCOURSE_SMTP_PASSWORD: “” –> Estou usando caracteres especiais
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_SMTP_SSL: true
DISCOURSE_SMTP_DOMAIN: citygaming.icu
DISCOURSE_NOTIFICATION_EMAIL: forum@citygaming.icu

root@ubuntu-2vcpu-amd-2gb-us-7yr03:/var/discourse# openssl s_client -connect mail.spacemail.com:465
CONNECTED(00000003)
depth=2 C = GB, O = Sectigo Limited, CN = Sectigo Public Server Authentication Root R46
verify return:1
depth=1 C = GB, O = Sectigo Limited, CN = Sectigo Public Server Authentication CA DV R36
verify return:1
depth=0 CN = *.spacemail.com
verify return:1
---
Certificado de cadeia
0 s:CN = *.spacemail.com
i:C = GB, O = Sectigo Limited, CN = Sectigo Public Server Authentication CA DV R36
a:PKEY: rsaEncryption, 2048 (bit); sigalg: RSA-SHA384
v:NotBefore: Jun 11 00:00:00 2025 GMT; NotAfter: Jun 27 23:59:59 2026 GMT
1 s:C = GB, O = Sectigo Limited, CN = Sectigo Public Server Authentication CA DV R36
i:C = GB, O = Sectigo Limited, CN = Sectigo Public Server Authentication Root R46
a:PKEY: rsaEncryption, 3072 (bit); sigalg: RSA-SHA384
v:NotBefore: Mar 22 00:00:00 2021 GMT; NotAfter: Mar 21 23:59:59 2036 GMT
2 s:C = GB, O = Sectigo Limited, CN = Sectigo Public Server Authentication Root R46
i:C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA384
v:NotBefore: Mar 22 00:00:00 2021 GMT; NotAfter: Jan 18 23:59:59 2038 GMT
3 s:C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
i:C = US, ST = New Jersey, L = Jersey City, O = The USERTRUST Network, CN = USERTrust RSA Certification Authority
a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA384
v:NotBefore: Feb 1 00:00:00 2010 GMT; NotAfter: Jan 18 23:59:59 2038 GMT
---
Certificado do servidor
-----BEGIN CERTIFICATE-----
MIIGhzCCBO+gAwIBAgIRALFmOQOqKiGafcbqHk5JTvcwDQYJKoZIhvcNAQEMBQAw
YDELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1NlY3RpZ28gTGltaXRlZDE3MDUGA1UE
AxMuU2VjdGlnbyBQdWJsaWMgU2VydmVyIEF1dGhlbnRpY2F0aW9uIENBIERWIFIz
NjAeFw0yNTA2MTEwMDAwMDBaFw0yNjA2MjcyMzU5NTlaMBoxGDAWBgNVBAMMDyou
c3BhY2VtYWlsLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKKh
nzi9sR4SQlEzDG0OSThJ7rj+zNyhq9KTYZtLLxSPtcI6ggnjOa0AbahjA5UXxjkT
RTWZfStyGucwK/eTL8pjU8aXl64vUFZK/jF0xiKcWFZ0J15+iqrP5zcv+yoHA9LE
OwelNDUE+c2/EDEhLbIqaIeKKxsS5aQ0JiTENfux/JbzcoI7vUsqJUsFiLCk7ane
+wc0viVE5YPTqc96VVhiuJu2IHwVSK6IsUXndbDXRQbkbwxORiX15pY83u3+uiiB
b/ZRfRILOZ29uYPsx3GH7Vqm4yJ7Iev4ueZ6z6Vd+lznH9iv8TZIWkWfxJ0oCDLm
ZMRe+DojBpAk/00+UtcCAwEAAaOCAwAwggL8MB8GA1UdIwQYMBaAFGjAEhYYDq/O
9oemMlejRlFdywcnMB0GA1UdDgQWBBS0oqCQUczn3dZIyiDOM+8KV4WqfTAOBgNV
HQ8BAf8EBAMCBaAwDAYDVR0TAQH/BAIwADAdBgNVHSUEFjAUBggrBgEFBQcDAQYI
KwYBBQUHAwIwSQYDVR0gBEIwQDA0BgsrBgEEAbIxAQICBzAlMCMGCCsGAQUFBwIB
FhdodHRwczovL3NlY3RpZ28uY29tL0NQUzAIBgZngQwBAgEwgYQGCCsGAQUFBwEB
BHgwdjBPBggrBgEFBQcwAoZDaHR0cDovL2NydC5zZWN0aWdvLmNvbS9TZWN0aWdv
UHVibGljU2VydmVyQXV0aGVudGljYXRpb25DQURWUjM2LmNydDAjBggrBgEFBQcw
AYYXaHR0cDovL29jc3Auc2VjdGlnby5jb20wKQYDVR0RBCIwIIIPKi5zcGFjZW1h
aWwuY29tgg1zcGFjZW1haWwuY29tMIIBfgYKKwYBBAHWeQIEAgSCAW4EggFqAWgA
dvCWl2S/VViXrfdDh2g3CEJ36fA61fak8zZuRqQ/D8qpxgAAAZdghNBMAAAEAwBH
MEUCIFwL6ylPjJme/WFO/xYNOoHIa6Qsod+6aZhCwPI1LODMAiEA+ljJB2bm4c2f
iD3IyuNzzR5cwDrgofUQZJftzXwq7W0AdgAZhtTHKKpv/roDb3gqTQGRqs4tcjEP
rs5dcEEtJUzH1AAAAZdghM+2AAAEAwBHMEUCIQCwY+9LQ8itV7FcOB5tcj9JsbL/
8oVh8ksyJP9uDfevjQIgGN/Nix3skQI2nJm6hOZDptJzt2ZkBv22ebwoFHmoGPgA
dvAOV5S8866pPjMbLJkHs/eQ35vCPXEyJd0hqSWsYcVOIQAAAZdghM9yAAAEAwBH
MEUCIDIR5KyuY2IHnP8pnEUCIKAGNFcSvEjY0Z3NIExZTL9rAiEAoMphPacQ7X1D
KACpJ06ijnzmZ2siXehW9oVOJCsd5K8wDQYJKoZIhvcNAQEMBQADggGBACbbMQWM
wFCA6UdMsFyK/5oU9O5YT7Bpo0MvhOADjGZNe37DsEMfjc4asr0Sx8VaXoPJUlV5
HKoPr13lkpG6HI6TXfFzr/uUbn6aUjMoEqjuAKTWh5leggMwXqxw7fRA8NKEpI/d
VcRiZW/I3JXvYiE2PmJawcum7pU8RuuEFyOq/9i47WkLtPyCvuMk8wkzHbxOU4ie
MYFvTvlbYoaZm9x95xAtkch3xF5MBPK9TLdgawNYrdJ4uXVYBebvx2ZSX7qr/AY8
T6AEdRtiuANfCqC0vXShDqG3hE+yeonza1ntUCKzVHvQVZTlXa12GNaxbczrw3Hd
D0tk6Xkx8K7YTq3dXoYzKYt+Lg2OFTpV13m26O9FYI5cwqI0CasiBdCvd/DpHBv/
iaPWNxLa2iyR/TSQyLkvWZmqStwrgg+dykA/nsD1fUq7X0qCmqxL2iUE9+ZZ3Mi3
JtgSj9qKdUYBSpfCX3h+8bPG5j4pretcVh7Ve81jCu1n2NwY0b9stGWx2A==
-----END CERTIFICATE-----
subject=CN = *.spacemail.com
issuer=C = GB, O = Sectigo Limited, CN = Sectigo Public Server Authentication CA DV R36
---
Nenhum nome de autoridade certificadora do cliente enviado
Digest da assinatura do par: SHA256
Tipo de assinatura do par: RSA-PSS
Chave temporária do servidor: X25519, 253 bits
---
O handshake SSL leu 7057 bytes e escreveu 400 bytes
Verificação: OK
---
Novo, TLSv1.3, Cifra é TLS_AES_256_GCM_SHA384
Chave pública do servidor é de 2048 bits
Renegociação segura NÃO é suportada
Compressão: NENHUMA
Expansão: NENHUMA
Nenhum ALPN negociado
Dados antecipados não foram enviados
Código de retorno de verificação: 0 (ok)
---
---
Novo ticket de sessão pós-handshake recebido:
Sessão SSL:
Protocolo : TLSv1.3
Cifra : TLS_AES_256_GCM_SHA384
ID da Sessão : 8FACA20AB7071487B74738E7FA28813C1CA106651D80EB46D271486C67E4432B
ID da Sessão-ctx:
PSK de identidade : Nenhum
Dica de identidade PSK: Nenhum
Nome de usuário SRP: Nenhum
Dica de tempo de vida do ticket de sessão TLS: 7200 (segundos)
Ticket de sessão TLS:
0000 - 23 bd a5 51 88 3e 2e 7f-eb 8d 81 00 95 7a a7 8b #..Q...>.......z..
0010 - ce 97 c1 5e 12 02 2a 46-de d9 96 d7 06 f0 b1 47 ...^..*F.......G
0020 - 1d 79 69 7f 8e 9d f4 4a-6a cb ec 00 42 70 d6 6b .yi....Jj...Bp.k
0030 - a1 37 1b 9d 61 47 4a e1-16 13 bc bb e7 ee f8 de .7..aGJ.........
0040 - 26 fb c1 00 b0 15 76 f0-80 a3 14 8b 10 f2 c7 ab &.....v.........
0050 - 5c 54 cb b3 16 e2 d2 ab-36 97 c9 82 14 1d 45 d4 \T......6.....E.
0060 - d7 4d c0 fc 9e 77 e3 44-c8 87 16 13 3a 1f c2 02 .M...w.D....:...
0070 - 65 03 51 14 bf ab d0 0e-51 e5 9e 95 07 ef 33 f5 e.Q.....Q.....3.
0080 - 48 9c 89 8e d9 8e 1f ea-38 3a 21 2a c1 64 44 a8 H.......8:!*.dD.
0090 - b2 9a 69 f2 ca fa 9e 57-12 14 36 32 fb 40 b1 06 ..i....W..62.@..
00a0 - 9e a4 b8 21 19 90 65 f8-6d ce 2d 6f 53 e0 72 23 ...!..e.m.-oS.r#
00b0 - 5b ca b8 f8 79 bd 07 9e-97 95 d4 d3 d5 f6 25 93 [...y.........%.
00c0 - 33 02 71 1d 55 be 9c d3-14 32 bb 9b 4e 65 67 78 3.q.U....2..Negx

Tempo de Início: 1758479949
Tempo Limite: 7200 (seg)
Código de retorno de verificação: 0 (ok)
Segredo mestre estendido: não
Dados Antecipados Máximos: 0
---
ler R BLOCK
220 SpaceMail.com Mail Node

---
1 curtida

Tente as portas 587 ou 2525 (tente 587 primeiro), elas funcionam? 587 é a porta mencionada no guia de instalação.

1 curtida

Obrigado pela sua sugestão. Meu provedor de caixa de correio (Spacemail) suporta oficialmente apenas a porta 465 com SSL para SMTP. No entanto, também testei a porta 587 com STARTTLS como parte da solução de problemas (juntamente com o suporte), mas o problema de tempo limite ainda persiste.

Eu fiz a instalação padrão duas vezes na semana passada com 2 provedores de e-mail diferentes, e sei que funciona. Suspeito que o spacemail não é adequado para e-mails transacionais reais.

embora eu não tenha ideia se isso funciona

4 curtidas

Nada está bloqueado por parte do Spaceship ou Spacemail. Passei sete horas discutindo isso com o suporte deles ontem, e eles confirmaram que todas as portas necessárias estão abertas e o SMTP está funcionando do lado deles. Eles me enviaram para cá para mais solução de problemas. Além disso, a porta 2525 não é suportada pelo Spacemail, então não posso usá-la como alternativa.

root@ubuntu-2vcpu-amd-2gb-us-7yr03:/var/discourse# sudo ufw status
Status: active

To Action From

---

443/tcp ALLOW Anywhere
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
22022/tcp ALLOW Anywhere
465/tcp ALLOW Anywhere
443/tcp (v6) ALLOW Anywhere (v6)
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
22022/tcp (v6) ALLOW Anywhere (v6)
465/tcp (v6) ALLOW Anywhere (v6)

root@ubuntu-2vcpu-amd-2gb-us-7yr03:/var/discourse#

1 curtida

Não sei se isso ajuda, já que você já verificou o acesso à porta via telnet, mas você poderia tentar enviar um e-mail com Swaks (deve haver um pacote Ubuntu disponível para ele). Acho bastante útil para depurar problemas de e-mail.

Talvez tente um serviço de e-mail transacional como Brevo ou Mailgun? Se funcionar, talvez queira usá-lo em vez disso. Pelo que vejo, como disse Lilly, não vejo nenhuma indicação de que seja um serviço de e-mail transacional.

Acabei de perguntar ao suporte deles e eles disseram:

Embora o Spacemail não suporte diretamente e-mails transacionais, você pode usar o protocolo SMTP para conectar sua caixa de correio Spacemail ao seu formulário de contato ou a qualquer ferramenta que envie e-mails automaticamente.

1 curtida

O problema será no lado da nave espacial. Porque tentei o GOOGLE SMTP, e funcionou e recebi um e-mail de teste.
Hoje, encaminhei isso para os técnicos da nave espacial através do suporte da nave espacial. Avisarei se precisar de mais detalhes diretamente de você.

2 curtidas

Essa é (na minha opinião) uma abordagem equivocada por parte deles devido à bagunça absoluta em torno da porta 465.

A porta 465 (SMTPS) é MUITO frequentemente bloqueada em ambientes de VPS como uma medida anti-spam, pois é a porta histórica usada para comunicação TLS MTA-MTA. Atualmente, ela foi reclassificada para SUBMISSIONS (SUBMISSION + TLS implícito), mas não prevejo que os provedores de VPS a desbloqueiem devido ao fato de que sempre haverá MTAs ouvindo tráfego MTA-MTA nesta porta.

A porta 587 (SUBMISSION) é explicitamente a porta de submissão de e-mail MUA-MTA e é o que deve ser usado para submissão de e-mail autenticada em combinação com STARTTLS.

Mesmo assim, a porta 587 ainda é às vezes bloqueada por provedores de VPS mal informados.

Não obstante meu desabafo sobre isso, vejo que você consegue se conectar a essa porta, então o que acontece se você enviar e-mails manualmente do VPS e do contêiner pela porta 465?

2 curtidas

@errorexee você conseguiu resolver seu problema?

1 curtida

Este tópico foi automaticamente fechado 14 dias após a última resposta. Novas respostas não são mais permitidas.