Repositório: Plugin Discourse Priority Action Mailer
O que este plugin faz?
Este plugin adiciona dois novos “canais” SMTP além do canal SMTP padrão do Discourse. Um canal é para e-mails de “alta prioridade”, que são (subjetivamente) e-mails de notificação quando um usuário solicita login por e-mail, se cadastra ou solicita redefinição de senha. O outro canal é para e-mails de resumo (digests). Se nenhum desses novos canais SMTP for configurado (mais sobre isso depois), os novos canais usarão o canal SMTP padrão do Discourse.
Por que alguém deveria se importar ou instalar este plugin?
Ter um único canal SMTP onde e-mails de “alta prioridade” para usuários, como solicitações de login por e-mail, estejam no mesmo canal SMTP que os resumos (digests), por exemplo, cria um potencial problema de “disponibilidade”Nota 1, especialmente se o canal SMTP padrão tiver limites definidos.
Nós enfrentamos esse problema diretamente quando migramos para o Discourse a partir do nosso fórum legado e usamos uma conta do Google Workspace (antigamente conhecida como G Suite). Como o Google limita essa conta, aquela conta de e-mail específica foi “bloqueada” por alguns dias. Isso não foi realmente um problema grave, pois simplesmente criamos outra conta e desativamos os resumos; mas, por um curto período, os membros não puderam fazer login por e-mail ou se cadastrar.
Minha experiência em cibersegurança e engenharia de sistemas em geral identificou esse único canal de e-mail como um “ponto único de falha”, e por isso tomei nota para corrigir isso; e este plugin faz exatamente isso, movendo todos os e-mails de resumo para um canal SMTP diferente.
Na verdade, é bastante fácil fazer isso, como você pode ver pela simplicidade do código deste plugin.
Como instalar este plugin?
É simples instalar este plugin.
- Instale o plugin da mesma forma que você instalaria qualquer plugin do Discourse.
- Defina suas credenciais SMTP adicionais nos arquivos de construção do seu container (seus arquivo(s)
.yml)
As seguintes variáveis de ambiente adicionais do container do Discourse são usadas, a menos que você queira os valores padrão. Essas variáveis de ambiente SMTP são basicamente as mesmas que as variáveis de ambiente SMTP padrão do Discourse, com _PRIORITY e _DIGEST adicionados a cada uma:
VARIÁVEIS DE AMBIENTE DO CANAL DE PRIORIDADE
env:
DISCOURSE_SMTP_ADDRESS_PRIORITY:
DISCOURSE_SMTP_PORT_PRIORITY:
DISCOURSE_SMTP_USER_NAME_PRIORITY:
DISCOURSE_SMTP_PASSWORD_PRIORITY:
DISCOURSE_SMTP_AUTHENTICATION_PRIORITY: # normalmente definido como plain
DISCOURSE_SMTP_ENABLE_START_TLS_PRIORITY: # normalmente definido como true
VARIÁVEIS DE AMBIENTE DO CANAL DE RESUMO (DIGEST)
env:
DISCOURSE_SMTP_ADDRESS_DIGEST:
DISCOURSE_SMTP_PORT_DIGEST:
DISCOURSE_SMTP_USER_NAME_DIGEST:
DISCOURSE_SMTP_PASSWORD_DIGEST:
DISCOURSE_SMTP_AUTHENTICATION_DIGEST: # normalmente definido como plain
DISCOURSE_SMTP_ENABLE_START_TLS_DIGEST: # normalmente definido como true
O plugin usará o canal padrão do Discourse para cada um dos canais acima se você não especificar um.
Notas para Desenvolvedores
Este plugin do Discourse cria um novo canal SMTP de “alta prioridade” para mensagens SMTP de “maior prioridade” e um novo canal de “resumo” apenas para resumos enviados aos usuários, incluindo o AdminConfirmationMailer e os seguintes métodos no mailer UserNotifications:
AÇÕES DO CANAL DE PRIORIDADE
- :email_login,
- :signup,
- :forgot_password,
- :admin_login
AÇÃO DO CANAL DE RESUMO (DIGEST)
- :digest
Esse novo canal SMTP de “alta prioridade” deve ser diferente do seu canal padrão, onde o Discourse envia resumos, etc.
As escolhas acima para “alta prioridade” foram completamente subjetivas (da minha parte) e podem ser facilmente alteradas modificando o plugin.
Você pode verificar facilmente sua configuração no container usando o console do Rails. Por exemplo, para mostrar suas configurações SMTP para o seu “canal de prioridade”, você pode:
rails c
Rails.application.config.priority_smtp_settings
O mesmo vale para os canais de “resumo”:
rails c
Rails.application.config.digest_smtp_settings
E também para as configurações SMTP padrão “out-of-the-box” (OOTB):
rails c
Rails.application.config.action_mailer.smtp_settings
Se você instalar o plugin e não definir as variáveis de ambiente no arquivo de construção do container, pode verificar facilmente que todas elas estão configuradas como padrão para Rails.application.config.action_mailer.smtp_settings
Além disso, você pode verificar facilmente os painéis de administração do Discourse:
- /admin/email/sent
- /sidekiq
e confirmar que tudo está funcionando bem.
TESTES
Esta versão (v0.1) foi testada em produção por vários dias e, até agora, funciona perfeitamente.
PARA ADMINISTRADORES DE SISTEMA: NOSSA CONFIGURAÇÃO
Em nossa configuração, atualmente estamos configurados da seguinte forma:
- CANAL DE RESUMO: sendgrid, “api: blah_blah_blah_11111_blah_bla”
- CANAL PADRÃO: sendgrid, “api: blah_blah_blah_2222_blah_blah”
- CANAL DE PRIORIDADE: Conta do Google Workspace
A razão para isso é que obtemos muitas estatísticas importantes com o Sendgrid e estamos no plano básico (não gratuito) por cerca de 15 USD por mês, o que nos permite enviar até 40.000 mensagens por mês. Gerenciamos isso ligando e desligando os resumos para garantir que permaneçamos abaixo do limite de 40 mil.
Usamos duas APIs diferentes do Sendgrid para fins de rastreamento. Eu ia configurar o “CANAL PADRÃO” para outro provedor como o MailGun, só por diversão, mas ainda não fiz isso.
Usamos nossa conta do Google Workspace porque nosso fórum Discourse não recebe muitos usuários fazendo login por e-mail e o volume de cadastros é baixo o suficiente para que o Google não reclame; assim, podemos ver facilmente o que está acontecendo com as notificações de e-mail de “alta prioridade”:
Recomendo que sites com muitos cadastros, solicitações de login por e-mail e outro “tráfego de notificação por e-mail prioritário” NÃO usem o Google Workspace (ou qualquer conta do Google) e usem outros provedores de e-mail em massa, como Sendgrid, MailGun, etc. Como mencionado, estamos no plano básico (não gratuito) do Sendgrid.
Dito isso, sua configuração SMTP é “por sua conta e risco”, não “por minha conta”
então configure como achar “melhor para você”.
MELHORIAS FUTURAS
Também há coisas divertidas que podemos fazer, como adicionar um “round robin” usando um gerador de números aleatórios para balancear a carga de e-mails de resumo (por exemplo) entre vários provedores. Ao modificar facilmente este plugin, podemos ter 3 ou até 30 canais de e-mail, permitindo muita criatividade!
Além disso, poderíamos examinar as exceções de Jobs para nossos mailers e, se houver um problema, poderíamos sinalizar esse mailer (canal) e parar de enviar e-mails para qualquer canal “sinalizado”, etc.
O céu é o limite, realmente; mas por enquanto, não tenho planos imediatos de adicionar recursos de “round robin” ou “desativação de canal com falha” a este plugin, pois estou ocupado com outras tarefas.
Francamente (minha culpa), não gosto de programação em EmberJS (em 2020, não tenho certeza sobre 2021, mas duvido…), então não adicionei nenhuma nova funcionalidade de interface do usuário nesta versão, desculpe por isso. Sou mais focado em programação do lado do servidor, administração de sistemas e recursos relacionados à cibersegurança (lado do servidor), como regra geral; mas isso é apenas comigo. Sinta-se à vontade para enviar um PR com novo código de interface Ember ou fazer um fork e modificar! Se decidir adicionar uma nova rota para exibir esses novos canais SMTP, provavelmente o farei usando Bootstrap e jQuery, já que (como mencionado), não estou muito entusiasmado com programação em EmberJS no momento.
ALTERANDO OU ADICIONANDO MÉTODOS ADICIONAIS
A configuração atual do plugin para “canais de prioridade” é completamente subjetiva, e estou aberto a alterá-las adicionando outros métodos de classe de mailer aos “canais de prioridade”. Sou fácil de encontrar na internet ![]()
VEJA TAMBÉM
NOTAS DE RODAPÉ
-
Os três domínios principais da cibersegurança são os seguintes:
- Disponibilidade
- Confidencialidade
- Integridade
Este plugin foi projetado para melhorar o domínio de “disponibilidade” da cibersegurança do Discourse, movendo o tráfego SMTP de resumos de baixa prioridade para fora do canal SMTP padrão; e movendo o tráfego SMTP de “maior prioridade” para um canal SMTP com baixo tráfego (sem resumos, sem notificações de usuários casuais).
SUPORTE AO PLUGIN
A melhor maneira de entrar em contato comigo sobre suporte ou solicitações de recursos é postar neste tópico complementar:

