Configuração SMTP não funciona com smtp-relay do GMail

Não consigo fazer a configuração SMTP funcionar com o Discourse e o SMTP do GMail.

Ativei o SMTP Relay nas configurações do Google, permiti o envio do meu domínio (sem whitelist de IP), usando autenticação SMTP + criptografia.

O Discourse está hospedado em forum.example.com

DISCOURSE_SMTP_ADDRESS: smtp-relay.gmail.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: noreply@example.com
DISCOURSE_SMTP_PASSWORD: password
DISCOURSE_SMTP_AUTHENTICATION: login
DISCOURSE_SMTP_DOMAIN: mydomain.io
DISCOURSE_NOTIFICATION_EMAIL: noreply@example.com
DISCOURSE_SMTP_ENABLE_START_TLS: true

Tive o erro genérico Job exception: end of file reached. Quando adicionei as variáveis de ambiente NOTIFICATION_EMAIL e SMTP_DOMAIN, agora estou vendo:

503 5.5.1 bad sequence of commands x20sm63393lfr.126 - gsmtp

ao executar o doctor e tentar enviar um e-mail para mim mesmo.

Mudei DISCOURSE_SMTP_DOMAIN para corresponder a forum.mydomain.io e ainda tenho o mesmo erro.

Como devo depurar isso além de alterar variáveis de ambiente, reconstruir e torcer para que funcione?

Obrigado antecipadamente.

Em vez de reconstruir, você pode

./launcher destroy app
./launcher start app

Há alguns tópicos sobre como fazer o Google funcionar, seja lá o que for. É possível, mas não é fácil. E provavelmente muda a cada mês. :wink:

3 curtidas

Embora eu acredite que o erro de @kvsf já foi corrigido ou que algumas coisas fundamentais em sua configuração foram alteradas, gostaria de continuar esta thread postando minha própria configuração, minha abordagem adicional e minha busca por ajuda dentro do mesmo domínio de problema.

Configuração Básica

  • Google Workspace Business Starter
  • Configurar Gmail-Routing > SMTP-Relay com i) apenas usuários registrados de dentro do domínio, ii) lista de permissões de IP com o IP do meu servidor de hospedagem de fórum e imposição de autenticação SMTP, iii) imposição de TLS
  • Instalação do Docker do Discourse de acordo com a documentação do Discourse
  • Configuração do app.yml de acordo com
expose:
  - "80:80"   # http
  - "443:443" # https

env:
  DISCOURSE_HOSTNAME: "forum.mydomain.com"
  DISCOURSE_DEVELOPER_EMAILS: 'dev@mydomain.com'

  DISCOURSE_SMTP_ADDRESS: "smtp-relay.gmail.com"
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: "user@mydomain.com"
  DISCOURSE_SMTP_PASSWORD: "mypass"
  DISCOURSE_SMTP_ENABLE_START_TLS: true 
  DISCOURSE_SMTP_AUTHENTICATION: login
  DISCOURSE_SMTP_OPEN_TIMEOUT: 25
  DISCOURSE_SMTP_READ_TIMEOUT: 25
  DISCOURSE_SMTP_DOMAIN: "mydomain.com"
  DISCOURSE_NOTIFICATION_EMAIL: "noreply@mydomain.com"
  LETSENCRYPT_ACCOUNT_EMAIL: dev@mydomain.com

Meus Testes

Ao executar ./discourse-doctor, esta configuração leva ao erro

Testing sending to ...
SMTP server connection successful.
Sending to artificial.testadress@gmail.com. . .
Sending mail failed.
end of file reached

Eu então primeiro verifiquei os diferentes logs do Discourse e de e-mail
Testando manualmente o mesmo processo de dentro do Docker (conectando usando docker exec -it <CONTAINER_ID> bash) via

openssl s_client -starttls smtp -crlf -connect smtp.gmail.com:587

não encontra problemas e funciona bem. Então, acredito que ou minha configuração de parâmetros no app.yml está estranha OU o Discourse internamente tem alguma falha de comunicação de script OU… tantas possibilidades. ^^
Para não ter que sempre executar ./launcher rebuild app após alterar app.yml para testar diferentes configurações, comecei a editar diretamente /var/www/discourse/vendor/bundle/ruby/3.2.0/gems/mail-2.8.1/lib/mail/network/delivery_methods/smtp.rb alterando o código existente para:

class SMTP
  attr_accessor :settings

  DEFAULTS = {
    :address              => 'smtp-relay.gmail.com',
    :port                 => 587,
    :domain               => 'mydomain.com',
    :user_name            => 'user@mydomain.com',
    :password             => 'mypass',
    :authentication       => 'login',
    :enable_starttls      => nil,
    :enable_starttls_auto => true,
    :openssl_verify_mode  => 'peer',
    :ssl                  => nil,
    :tls                  => nil,
    :open_timeout         => 25,
    :read_timeout         => 25
  }

  def initialize(values)
    self.settings = DEFAULTS #.merge(values)
  end

o que leva ao mesmo comportamento acima (dadas as configurações personalizadas do app.yml).

Busca por ajuda

E agora estou preso. Claro, eu poderia brincar mais com as configurações restantes (e até mesmo voltar a usar apenas SSL, embora isso seja depreciado pelo Discourse), mas eu gostaria de:

  1. aprender como analisar este problema mais profundamente
  2. assim entender o que realmente está acontecendo e qual é o problema
  3. corrigi-lo e ser capaz de usar tudo sem problemas (+ finalmente fazer o fórum funcionar corretamente)

Obrigado antecipadamente pela sua ajuda.

push*
Alguma ideia/sugestão?

Isso foi resolvido? Estou querendo fazer exatamente isso e encontrei esta postagem que está me deixando nervoso.

Não tenho certeza sobre o Gmail, mas o Zoho não funciona e o Outlook parou de funcionar em um site de comércio eletrônico do qual eu fazia parte da administração.

Há algum tempo, a melhor prática tem sido usar um serviço de e-mail transacional como o Mailersend, mas isso está se tornando cada vez mais um requisito à medida que o tempo passa.

Edição para esclarecer: é um bloqueio do lado do provedor de e-mail e não algo que possa ser corrigido no Discourse ou no lado do servidor. A maioria dos provedores não oferece mais suporte, se é que alguma vez ofereceram oficialmente, ao uso de SMTP para enviar e-mails transacionais.

2 curtidas