Meu fórum tem muitos usuários importados com um domínio de e-mail específico que não funciona mais. Alguns milhares de usuários possuem esse endereço de e-mail.
Isso não era um problema até agora, mas aumentei o valor de suprimir e-mail de resumo após X dias, e meu fórum enviou muitos e-mails de resumo, inclusive para muitos usuários com domínios de e-mail não funcionais.
Isso resultou em muitas devoluções de e-mail (bounces) e o Mailgun desativou meu domínio.
O que devo fazer com essas contas para prevenir isso e resolver meu problema? Muitas dessas contas pertencem a usuários legítimos que ainda não retornaram ao fórum. Não são necessariamente contas abandonadas.
Por causa desse problema, os usuários não podem se registrar no fórum até que isso seja corrigido.
conforme descrito em Replace a string in all posts. Isso fará com que todos esses endereços de e-mail sejam tratados de modo que o Discourse não envie e-mails para eles. Outra boa solução seria algo como
bad=User.find_by_email
<alguma busca que os encontre todos>
bad.update_all(active: false)
e desativar todos os usuários com os endereços de e-mail falsos conhecidos. Não tenho certeza de como fazer a primeira parte de cabeça, mas deve ser fácil o suficiente para descobrir.
Sim, pensei em fazer isso para me livrar desses domínios de e-mail.
Notei que um método do Discourse cria e-mails com @no-email.invalid:
E na base do importador, ele usa @email.invalid, que é ligeiramente diferente:
Esses dois “domínios fictícios” diferentes são ambos ignorados quando o Discourse precisa enviar e-mails?
Devo substituir meu domínio não funcional por @no-email.invalid ou @email.invalid, ou não importa?
@pfaffman, não tenho certeza de entendi por que deveria remapear nos posts em vez de alterar os e-mails dos usuários… Esses endereços de e-mail não estão nos posts, a menos que esteja perdendo algo.
Se for a maneira recomendada, gostaria apenas de substituir meus endereços @brokendomains.com em cada perfil por @no-email.invalid ou @email.invalid. Consigo descobrir como fazer isso, só estou curioso sobre qual domínio “falso” usar.
UserEmail.where("email like '%@brokendomain.com'").each do |e|
e.update(email: SecureRandom.hex + "@email.invalid")
end
O seu também poderia funcionar, mas não tenho certeza se o modelo User foi atualizado para permitir um u.email.include? depois que eles moveram os e-mails para outro modelo/tabela.
Testei meu script apenas para ver se ele estava retornando os endereços de e-mail de destino e funcionou.
Seu script deve ser mais rápido que o meu, já que você usa uma consulta para selecionar domínios de e-mail específicos em vez de iterar sobre todos os usuários.
Obrigado. Foi essa que eu usei.
Mais de 5000 usuários de um total de 17000 tinham esses domínios de e-mail. Não é de admirar que o número de rejeições tenha aumentado quando eu aumentei suprimir e-mail de resumo após dias…