Falha no teste de email no discourse-doctor

Estou tentando solucionar problemas de SMTP usando ./discourse-doctor

O problema relacionado mais próximo que encontrei foi Yet other SMTP 587 port email various errors.
Antes de implementar as sugestões, obtive um timeout consistente.

Após configurar:

DISCOURSE_SMTP_FORCE_TLS: true
DISCOURSE_SMTP_ENABLE_START_TLS: false

Obtenho o seguinte de discourse-doctor:

==================== TESTE DE EMAIL ====================
Para um teste robusto, obtenha um endereço de http://www.mail-tester.com/
Ou apenas envie uma mensagem de teste para você mesmo.
Endereço de email para teste de email? ('n' para pular) [admin@burlyqna.org]:
Enviando email para admin@burlyqna.org. . .
Testando o envio para admin@burlyqna.org usando smtp.mailfence.com:465, usuário:philion@mailfence.com com autenticação simples.
Conexão com o servidor SMTP bem-sucedida.
Enviando para admin@burlyqna.org. . .
Falha no envio de email.
fim do arquivo alcançado

Veja: http://talk.burlyqna.org/NjdhMDAwYTk4NmM3MmM1.txt

Consigo validar externamente a configuração do servidor SMTP com:

swaks --to philion@gmail.com --from admin@burlyqna.org --server smtp.mailfence.com:465 --auth LOGIN --tlsc --auth-user philion@mailfence.com

Alguma pista de como Conexão com o servidor SMTP bem-sucedida. mas Falha no envio de email.?

Muito obrigado,
Paul

1 curtida

Para TLS, você deve usar a porta 587?

Eu tentaria adicionar puts error.backtrace (ou similar) depois de

e executar discourse-doctor novamente.

1 curtida

Esta é a resposta que nosso respondedor automático gerou, acho que tentar o domínio smtp vale a pena.

1 curtida

Thomas,

Há muita discussão sobre a porta 465 nos fóruns de suporte. Com base na minha leitura, parece que o Discourse faz muitas suposições sobre SSL e TLS sobre SMTP, e há algumas variáveis de ambiente que controlam os comportamentos detalhados.

NO ENTANTO, dado o número de erros relatados e perguntas relacionadas nesses fóruns, tenho a forte impressão de que essas configurações são mal documentadas e difíceis de usar. E vendo problemas semelhantes que remontam a 2017, este tem sido um problema por anos.

Pesquisas por “porta 465” ou “Net::ReadTimeout smtp” podem revelar uma longa lista de problemas semelhantes.

Vou tentar isso. Obrigado!

Thomas,

Estou tentando encontrar este arquivo na compilação do Docker e não consigo. Vejo que ele está encapsulado em um contêiner, mas clonei discourse/discourse_docker e não discourse/discourse.

Quando tento entrar no aplicativo com launcher enter app, não há como editar esse arquivo ou instalar o vi.

Não consigo encontrar nenhuma documentação ou sinalizador para executar ./discourse-doctor com logs de depuração ativados.

Falha da mesma forma: Não é possível enviar e-mail, ./discourse-doctor relata o mesmo erro.

Atualizei o app.yml conforme sugerido, reconstruí o aplicativo (sem e-mail), tentei o ./discourse-doctor e recebi a mesma mensagem de erro.

./launcher enter  app
sudo apt update && sudo apt install neovim -y

deve ajudar.

Obrigado! Estou ficando velho quando não consigo “sudo apt install vi”. Tenho que lembrar que agora se chama neovim.

Dada a alteração sugerida para despejar o rastreamento da pilha, ofereço: http://talk.burlyqna.org/ODgyZjg5Y2QyMTU1ZmEx.txt

O trecho relevante:

/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:237:in `rbuf_fill'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1017:in `recv_response'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1008:in `block in getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1027:in `critical'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1006:in `getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:986:in `quit'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:732:in `do_finish'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `ensure in start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/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'

Parece que o outro lado encerrou a conexão.

A propósito: http://talk.burlyqna.org/NjdhMDAwYTk4NmM3MmM1.txt não está mais disponível

1 curtida

Esses arquivos de log são retidos quando eu reconstruo?

Atualizei senhas para remover símbolos, esperei o atraso na propagação da autenticação SMTP (tempo suficiente para fazer o almoço), confirmei as credenciais corretas para enviar e-mail com swaks e…

Mesmo erro.

Notei que reconstruir remove o despejo do stacktrace, então vou adicioná-lo de volta e tentar ./launcher destroy app && ./launcher start app

1 curtida

Instalado rastreamento de depuração, executado doctor:
http://talk.burlyqna.org/NWQ5MjBlMTIwN2JiNGNl.txt

==================== TESTE DE E-MAIL ====================
Para um teste robusto, obtenha um endereço de http://www.mail-tester.com/
Ou apenas envie uma mensagem de teste para você mesmo.
Endereço de e-mail para o teste de e-mail? ('n' para pular) [admin@burlyqna.org]:
Enviando e-mail para admin@burlyqna.org. . .
Testando o envio para admin@burlyqna.org usando smtp.mailfence.com:465, nome de usuário: philion com autenticação simples.
Conexão com o servidor SMTP bem-sucedida.
Enviando para admin@burlyqna.org. . .
Falha ao enviar e-mail.
fim do arquivo alcançado
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:237:in `rbuf_fill'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:199:in `readuntil'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-protocol-0.2.2/lib/net/protocol.rb:209:in `readline'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1017:in `recv_response'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1008:in `block in getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1027:in `critical'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:1006:in `getok'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:986:in `quit'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:732:in `do_finish'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `ensure in start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/net-smtp-0.5.1/lib/net/smtp.rb:645:in `start'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:109:in `start_smtp_session'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb:100:in `deliver!'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/mail-2.8.1/lib/mail/message.rb:269:in `deliver!'

Você tentou usar seu e-mail completo como nome de login?

Atualizado app.yml para usar o e-mail completo como usuário, reimplantado com ./launcher destroy app && ./launcher start app.

Mesmo erro: http://talk.burlyqna.org/ZDg1YWE1YTA2YWU1Zjhj.txt

Destruir e iniciar também apagou o debug, mas vou assumir que o mesmo problema:

case rv = @io.read_nonblock(BUFSIZE, tmp, exception: false)

retorna um nil, e isso resulta em uma resposta EOF e não/erro.

Após muitos testes e com a ajuda de @thoka, apresento o seguinte resumo:

Consigo executar testes SMTP usando as mesmas credenciais que forneci em container/app.yml, que funcionam tanto com swaks (Swaks - Swiss Army Knife for SMTP) quanto com o código Ruby de exemplo fornecido por @thoka (veja abaixo).

Estes funcionam de forma consistente. No entanto, tentar configurar um servidor Discourse (que não consegue enviar o e-mail inicial para o usuário administrador) ou usar o bot discourse-doctor resulta em falhas de e-mail:

==================== TESTE DE E-MAIL ====================
Para um teste robusto, obtenha um endereço em http://www.mail-tester.com/
Ou simplesmente envie uma mensagem de teste para você mesmo.
Endereço de e-mail para teste de e-mail? ('n' para pular) [admin@burlyqna.org]:
Enviando e-mail para admin@burlyqna.org. . .
Testando o envio para admin@burlyqna.org usando smtp.mailfence.com:465, nome de usuário:xxx@mailfence.com com autenticação plain.
Conexão com o servidor SMTP bem-sucedida.
Enviando para admin@burlyqna.org. . .
Falha ao enviar e-mail.
fim do arquivo alcançado

Isso parece ser uma falha de configuração de protocolo, pois consigo enviar e-mails de teste usando ferramentas Ruby padrão:

require 'mail'

SMTP_SERVER = 'smtp.mailfence.com'
SMTP_PORT = 465
USERNAME = 'xyz'
PASSWORD = '...'

FROM = 'admin@burlyqna.org'
TO = 'testing@gmail.com'
SUBJECT = 'Teste do Ruby'

BODY = "Olá,\n\nEste é um e-mail de teste enviado do Ruby através de uma conexão protegida por SSL.\n\nAtenciosamente!"

Mail.defaults do
  delivery_method :smtp, {
    address: SMTP_SERVER,
    port: SMTP_PORT,
    user_name: USERNAME,
    password: PASSWORD,
    domain: "burlyqna.org",
    enable_starttls_auto: :false,
    authentication: :plain,
    ssl: true,
  }
end

begin
  puts 'Enviando e-mail...'
  puts "SMTP_SERVER: #{SMTP_SERVER}"
  puts "SMTP_PORT: #{SMTP_PORT}"
  puts "USERNAME: #{USERNAME}"
  puts "PASSWORD: #{PASSWORD}"
  puts "FROM: #{FROM}"
  puts "TO: #{TO}"

  mail = Mail.new do
    to TO
    from FROM
    subject SUBJECT
    body BODY
  end

  mail.deliver!
end

As configurações SMTP atuais em meu app.yml são:

DISCOURSE_SMTP_ADDRESS: smtp.mailfence.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: xxx@mailfence.com
DISCOURSE_SMTP_PASSWORD: '...'
DISCOURSE_SMTP_FORCE_TLS: true                   # https://meta.discourse.org/t/cannot-send-email-problem-with-port-465/246004/8
DISCOURSE_SMTP_ENABLE_START_TLS: false           # (opcional, padrão true)
DISCOURSE_SMTP_DOMAIN: burlyqna.org              # (requerido por alguns provedores)
DISCOURSE_NOTIFICATION_EMAIL: noreply@talk.burlyqna.org
1 curtida

Último acompanhamento: o e-mail está funcionando!

Os problemas que tive ao longo do caminho:

  • DISCOURSE_SMTP_PASSWORD tinha símbolos, mas não estava entre aspas
  • DISCOURSE_SMTP_FORCE_TLS: true para fazer o SSL funcionar
  • DISCOURSE_SMTP_ENABLE_START_TLS: false para interromper o handshake TLS
  • DISCOURSE_NOTIFICATION_EMAIL configurado para um endereço de e-mail inexistente
DISCOURSE_SMTP_ADDRESS: smtp.mailfence.com
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: example@mailfence.com
DISCOURSE_SMTP_PASSWORD: 'passwd'
DISCOURSE_SMTP_FORCE_TLS: true                  
DISCOURSE_SMTP_ENABLE_START_TLS: false
DISCOURSE_NOTIFICATION_EMAIL: admin@example.org
1 curtida

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.