На моём форуме много импортированных пользователей с доменами электронной почты, которые больше не работают.
Такие адреса есть у нескольких тысяч пользователей.
До сих пор это не было проблемой, но я увеличил значение подавлять сводные письма после N дней, и форум отправил множество сводных писем, в том числе пользователям с нерабочими доменами.
Из-за этого количество отказов в доставке стало слишком большим, и Mailgun заблокировал мой домен.
Что мне сделать с этими учётными записями, чтобы предотвратить это и решить проблему? Многие из этих учётных записей принадлежат легитимным пользователям, которые ещё не возвращались на форум. Это не обязательно заброшенные аккаунты.
Из-за этой проблемы пользователи не могут зарегистрироваться на форуме, пока проблема не будет решена.
как описано на Replace a string in all posts. Это заставит все такие адреса электронной почты так, что Discourse не будет отправлять на них письма. Ещё одно хорошее решение — что-то вроде
bad=User.find_by_email
<некий поиск, который найдёт их всех>
bad.update_all(active: false)
и деактивировать всех пользователей с известными поддельными адресами электронной почты. Точно не помню, как выполнить первую часть прямо сейчас, но это должно быть достаточно легко разобраться.
Да, я думал о том, чтобы сделать это, чтобы избавиться от этих доменов электронной почты.
Я заметил, что метод Discourse создаёт адреса электронной почты вида @no-email.invalid:
А в базовом классе импортера используется @email.invalid, что немного отличается:
Оба ли эти «фейковых домена» игнорируются, когда Discourse должен отправлять письма?
Должен ли я заменить свой неработающий домен на @no-email.invalid или @email.invalid, или это не имеет значения?
@pfaffman, я не совсем понимаю, почему нужно делать переназначение в сообщениях, а не изменять адреса электронной почты пользователей… Эти адреса электронной почты не содержатся в сообщениях, если только я что-то не упускаю.
Если это рекомендуемый способ, я просто хотел бы заменить все адреса с @brokendomains.com в профилях на @no-email.invalid или @email.invalid. Я смогу разобраться, как это сделать, меня просто интересует, какой «фейковый» домен использовать.
UserEmail.where("email like '%@brokendomain.com'").each do |e|
e.update(email: SecureRandom.hex + "@email.invalid")
end
Твой тоже может подойти, но я не уверен, что модель User была обновлена так, чтобы после переноса email-адресов в другую модель/таблицу можно было использовать u.email.include?.
Я запустил свой скрипт, чтобы проверить, возвращает ли он целевые адреса электронной почты, и всё работает.
Ваш скрипт должен работать быстрее моего, так как вы используете запрос для выбора конкретных доменов электронной почты, а не перебираете всех пользователей.
Спасибо. Я использовал именно его.
Более 5000 пользователей из общего числа в 17000 имели такие домены электронной почты. Неудивительно, что количество отскоков выросло, когда я увеличил подавление сводных писем после дней…