Mein Forum verfügt über viele importierte Benutzer mit einer bestimmten E-Mail-Domain, die nicht mehr funktioniert. Einige tausend Benutzer haben eine solche E-Mail-Adresse.
Bisher war dies kein Problem, aber ich habe den Wert für Digest-E-Mails nach Tagen unterdrücken erhöht, und mein Forum hat eine große Anzahl von Digest-E-Mails gesendet, darunter auch an viele Benutzer mit nicht funktionierenden E-Mail-Domains.
Dies führte zu zu vielen Rückläufern, und Mailgun hat meine Domain deaktiviert.
Was sollte ich mit diesen Konten tun, um dies zu verhindern und mein Problem zu lösen? Viele dieser Konten gehören legitimen Benutzern, die noch nicht zum Forum zurückgekehrt sind. Es sind nicht unbedingt verwaiste Konten.
Aufgrund dieses Problems können sich Benutzer nicht im Forum registrieren, bis es behoben ist.
machen, wie in Replace a string in all posts beschrieben. Dadurch werden alle diese E-Mail-Adressen so verändert, dass Discourse keine Nachrichten mehr an sie sendet. Eine weitere gute Lösung wäre etwas wie
bad=User.find_by_email
<eine Suche, die alle findet>
bad.update_all(active: false)
und alle Benutzer mit den bekannten gefälschten E-Mail-Adressen zu deaktivieren. Ich bin mir nicht ganz sicher, wie der erste Teil im Kopf funktioniert, aber es sollte einfach genug sein, das herauszufinden.
Ich bin mir ziemlich sicher, dass posts:remap diese Domain in allen Tabellen neu zuordnet, aber sie mussten es in eine Klasse packen.
Du könntest auch einfach deine eigene Ersetzung in der Tabelle UserEmails (oder wie immer sie heißt) vornehmen.
Ich bin mir ziemlich sicher, dass whatever.invalid der Welt mitteilt, dass es sich um eine ungültige Adresse handelt, und es wird nicht versucht, sie zu senden.
UserEmail.where("email like '%@brokendomain.com'").each do |e|
e.update(email: SecureRandom.hex + "@email.invalid")
end
Dein Ansatz könnte auch funktionieren, aber ich bin mir nicht sicher, ob das User-Modell so aktualisiert wurde, dass man u.email.include? verwenden kann, nachdem die E-Mail-Adressen in ein anderes Modell/eine andere Tabelle verschoben wurden.
Ich habe mein Skript nur getestet, um zu sehen, ob es die Ziel-E-Mail-Adressen zurückgibt, und es funktioniert.
Dein Skript sollte schneller sein als meines, da du eine Abfrage verwendest, um bestimmte E-Mail-Domains auszuwählen, anstatt alle Benutzer durchzulaufen.
Vielen Dank. Das ist die, die ich verwendet habe.
Mehr als 5000 von insgesamt 17.000 Benutzern hatten solche E-Mail-Domains. Kein Wunder, dass die Anzahl der Absprünge stieg, als ich Digest-E-Mails nach Tagen unterdrücken erhöhte…