Impossível enviar e-mails usando o servidor SMTP local

Testei o servidor SMTP com Telnet:
O Telnet conectou-se ao servidor SMTP.
O Telnet permitiu que eu me autenticasse no servidor SMTP.
O Telnet permitiu que eu enviasse um e-mail com sucesso usando o servidor SMTP, e utilizei exatamente os mesmos valores no Telnet que estão presentes no arquivo /var/discourse/containers/app.yaml.

O Discourse doctor indica que o Discourse conectou-se com sucesso ao servidor SMTP.
O Discourse doctor indica que o Discourse falhou ao enviar o e-mail de teste.

Portanto, o Discourse possui bugs que impedem o envio de e-mails.

Eu sugiro que seja algo relacionado à sua configuração que está com defeito, e não bugs dentro do Discourse. :wink:

2 curtidas

Por acaso você está usando smtp-relay.gmail.com, talvez do DigitalOcean? Isso parece ter quebrado recentemente e ninguém ainda sabe exatamente o porquê.

Não. Porque o servidor SMTP está funcionando perfeitamente, conforme já descrito, e o Discourse está instalado corretamente e exibe a tela que solicita o e-mail de registro do administrador. No entanto, esse e-mail não é enviado.

Estou usando um servidor SMTP local localizado na mesma máquina que o contêiner Docker do Discourse.

Encontrei um erro em /var/discourse/shared/standalone/log/rails/production.log:

Rendering layouts/email_template.html.erb
  Rendered layouts/email_template.html.erb (Duration: 0.1ms | Allocations: 32)
Delivered mail f915c15e-9c4d-4d4e-9527-81bc4984540c@forum.domain.com (63.7ms)
Job exception: hostname "mail.forum.domain.com" does not match the server certificate

O que significa esse erro?

3 curtidas

Parece que a mensagem de erro acima está se referindo ao certificado SSL do servidor.

O certificado SSL no servidor está correto e possui o nome de host adequado.

Parece ser um bug no Discourse, onde o Discourse não consegue detectar corretamente o certificado SSL do servidor.

Isso não parece ser um bug no Discourse. Parece ser um problema na configuração do resolvedor DNS do host ou no certificado SSL.

Como o telnet não usa SSL, imagino que seja por isso que você descobriu que funcionava. No Linux, você pode achar que consegue avançar um pouco mais nos testes usando o OpenSSL para testar a conexão e examinar os certificados.

Há algumas informações aqui que podem ajudar: https://docs.pingidentity.com/bundle/solution-guides/page/iqs1569423823079.html

O HTTPS no site está funcionando, pois o cadeado verde aparece na barra de endereços. Não há nada de errado com o certificado SSL do site. O problema está na maneira como o Discourse detecta o certificado SSL.

Esse erro não é sobre o certificado do site, mas sobre o certificado do seu serviço SMTP.

2 curtidas

O certificado do serviço SMTP é apenas o certificado SSL do servidor, não o certificado SSL do site. O certificado SSL do servidor está correto e funcionando.

Para configurar um servidor SMTP local na mesma máquina que o contêiner do Discourse, o Discourse não especifica exatamente quais são os valores corretos para as configurações SMTP no arquivo app.yml. Isso gera muita confusão e erros.

Nas configurações do app.yml, o Discourse não deixa claro o que deve ser o DISCOURSE_SMTP_ADDRESS.

Na realidade, ele é subdomínio.domínio.com, e não mail.subdomínio.domínio.com.

Valores corretos:
DISCOURSE_SMTP_ADDRESS: forum.domain.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: postmaster@forum.domain.com
DISCOURSE_SMTP_PASSWORD: "senha"
DISCOURSE_SMTP_ENABLE_START_TLS: true           # (opcional, padrão true)

O Discourse não especifica claramente o que é o “certificado do servidor” na mensagem de erro que aparece após a falha no envio do e-mail de registro inicial. A mensagem de erro está localizada em:
/discourse/shared/standalone/log/rails/production.log
“Job exception: hostname “mail.forum.domain.com” does not match the server certificate”.

No entanto, na realidade, o “certificado do servidor” é simplesmente o certificado SSL do servidor.
Além disso, na mensagem de erro, o Discourse menciona incorretamente “hostname”, quando, na verdade, o que está sendo referido é o DISCOURSE_SMTP_ADDRESS.

Houve dificuldades devido à ambiguidade do Discourse.

A solução foi simplesmente configurar o certificado SSL do servidor para o certificado SSL correto.

Quando o problema foi postado no fórum do Discourse, houve muitas respostas enganosas e pouco claras.

O Discourse deveria corrigir esses problemas.

2 curtidas

Agora o Discourse Doctor está dizendo que o e-mail foi enviado:

Enviando e-mail para admin@email.com. . . 
Testando o envio para admin@email.com usando forum.domain.com:587.
Conexão com o servidor SMTP bem-sucedida.
Enviando para admin@email.com. . . 
E-mail aceito pelo servidor SMTP.

No entanto, não há nenhum e-mail na caixa de entrada ou na pasta de spam do destinatário.

Como esse problema pode ser resolvido?

Verifique os logs do seu servidor SMTP local. Se o Discourse entregou corretamente ao servidor SMTP, isso já está fora do controle do Discourse.

Nos logs do Exim4 há uma mensagem de erro. O que ela significa?

2021-01-21 00:39:39 H=(localhost.localdomain) [172.17.0.2] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=no F=<noreply@forum.domain.com> A=dovecot_plain:postmaster@forum.domain.com rejected RCPT <admin@email.com>: Falha na verificação do remetente