Bem, para começar, isso é produção e não consigo enviar o primeiro e-mail de registro.
Tenho certeza de que minhas configurações SMTP estão corretas.
Consigo fazer ping e telnet no meu servidor de e-mail com a porta usada, mas assim que executo “EHLO mailserver”, a conexão é encerrada pelo host remoto.
E tentei garantir que minhas configurações SMTP estivessem corretas, então executei /var/discourse/discourse-doctor, mas ele não consegue validar minhas configurações. Ele diz:
==================== YML SETTINGS ====================
awk: not an option: --field-separator=:
DISCOURSE_HOSTNAME=
awk: not an option: --field-separator=:
SMTP_ADDRESS=
awk: not an option: --field-separator=:
DEVELOPER_EMAILS=
awk: not an option: --field-separator=:
SMTP_PASSWORD=
awk: not an option: --field-separator=:
SMTP_PORT=
awk: not an option: --field-separator=:
SMTP_USER_NAME=
awk: not an option: --field-separator=:
LETSENCRYPT_ACCOUNT_EMAIL=
Mas meu YAML (./containers/app.yml) parece perfeitamente formatado.
## TODO: O servidor de e-mail SMTP usado para validar novas contas e enviar notificações
# Endereço, nome de usuário e senha SMTP são obrigatórios
# AVISO: o caractere '#' na senha SMTP pode causar problemas!
DISCOURSE_SMTP_ADDRESS: mail.redacted.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: redacted@redacted.com
DISCOURSE_SMTP_PASSWORD: "redacted"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (opcional, padrão true)
## Se você adicionou o modelo Lets Encrypt, descomente abaixo para obter um certificado SSL gratuito
LETSENCRYPT_ACCOUNT_EMAIL: redacted@redacted.com
@irwinstar, removi o servidor de e-mail real para evitar expô-lo em um fórum público. Mas posso garantir que está correto, pois copiei as configurações do meu cliente de e-mail (que está funcionando) e também as comparei com as configurações SMTP do meu servidor de e-mail real.
Obrigado pela sua oferta de ajuda. Acredito que o problema esteja nos registros SPF/DKIM, então estou tentando corrigi-los.
Mesmo assim, o discourse-doctor ainda deveria estar analisando-o corretamente. Não tenho certeza do que está acontecendo ali, já que não editei o arquivo manualmente no vim/nano. Para deixar claro, o YAML foi gerado usando o discourse-setup.
E eu acho que o Discourse não suporta mais o protocolo na porta 465. Se o seu servidor de e-mail suportar a porta 587, você pode alterá-la para 587 em vez disso.
Infelizmente, meu servidor de e-mail não pode usar a porta 587, então adicionei um proxy de e-mail fora do Discourse.
@irwinstar, Esta é uma informação extremamente importante, caso esteja correta, e explicaria por que minha configuração de e-mail não está funcionando. Você tem uma fonte para essa informação?
Não tenho certeza sobre isso, mas tentei várias vezes na porta 465.
Finalmente, usei a imagem Docker “hieulq/mailproxy” como proxy de e-mail.
E utilizei esta configuração em app.yml para o Discourse.
Essa abordagem pode não ser ideal, mas funciona.
Tentei encontrar um plugin de e-mail hoje, mas não encontrei nenhum.
Estou tentando evitar a compra de servidores de e-mail em nuvem ou o uso de proxies (porque, se eu quisesse uma solução problemática, já teria criado uma conta de administrador neste ponto), já que possuo um servidor de e-mail na HostGator.
Tenho certeza de que os registros SPF estão configurados para o IP do meu servidor Discourse. Agora, estou apenas tentando validar os registros DKIM.
Se alguém puder confirmar que a porta 465 não é permitida, seria uma ótima notícia, pois me impediria de seguir muito fundo em um problema que não existe. A porta 465 foi um problema, conforme mencionado na postagem abaixo.
Usando a porta 587, consegui fazer telnet com sucesso em um e-mail completo e autenticar corretamente. Então, mudei.
Agora, quando o e-mail é enviado, recebo o seguinte erro:
Delivered mail d86b48cc-b0f4-4df3-8960-ab5ff96613a0@discourse.imbleau.com (251.0ms)
Job exception: hostname "mail.redacted.com" does not match the server certificate
Mas o que notei é que isso não é mais um timeout de conexão (disparado após 60 segundos inteiros), mas sim uma exceção diferente recebida em 250ms.
PROBLEMA DO EMAIL RESOLVIDO! (o discourse-doctor ainda analisa incorretamente)
Pesquisei um pouco mais sobre Ruby e o motivo pelo qual esse erro estava acontecendo nos bastidores, o que me levou a essa questão no Stack Overflow.
Esse era o culpado. A solução envolveu alterar a negociação SSL, o que me deu a intuição de desativar essa configuração no arquivo app.yml: DISCOURSE_SMTP_ENABLE_START_TLS: false # (opcional, padrão verdadeiro)
Isso desativará a criptografia TLS, enquanto o único problema é que você está usando um nome de host incorreto, ou seja, o servidor de e-mail está apresentando um certificado que diz algo diferente de mail.redacted.com. Muitos servidores de e-mail tendem a ser conhecidos por vários nomes de host diferentes; você só precisa descobrir qual deles está sendo usado para o certificado.
Você pode tentar descobrir qual nome de host ele declara ser e ajustar sua configuração de acordo.
Obrigado, @RGJ! Estranhamente, está dizendo que o CN é um dos meus subdomínios, totalmente desconectado do e-mail. Vale a pena investigar. Obrigado pela orientação.