Слишком много доменов электронной почты пользователей не работают, что привело к отключению домена Mailgun: что делать?

Привет!

На моём форуме много импортированных пользователей с доменами электронной почты, которые больше не работают.
Такие адреса есть у нескольких тысяч пользователей.

До сих пор это не было проблемой, но я увеличил значение подавлять сводные письма после N дней, и форум отправил множество сводных писем, в том числе пользователям с нерабочими доменами.

Из-за этого количество отказов в доставке стало слишком большим, и Mailgun заблокировал мой домен.

Что мне сделать с этими учётными записями, чтобы предотвратить это и решить проблему? Многие из этих учётных записей принадлежат легитимным пользователям, которые ещё не возвращались на форум. Это не обязательно заброшенные аккаунты.

Из-за этой проблемы пользователи не могут зарегистрироваться на форуме, пока проблема не будет решена.

Посмотрите обработку возвращаемых писем

По какой-то причине я не смог найти эту тему через поиск… Наверное, я запаниковал! :sweat_smile:

Спасибо большое за быстрый ответ!

Но если есть миллион адресов электронной почты, таких как bademail.domain, возможно, вам стоит сделать что-то вроде

rake posts:remap['bademail.domain', 'no-email.invalid']

как описано на Replace a string in all posts. Это заставит все такие адреса электронной почты так, что Discourse не будет отправлять на них письма. Ещё одно хорошее решение — что-то вроде

bad=User.find_by_email     
<некий поиск, который найдёт их всех>
bad.update_all(active: false)

и деактивировать всех пользователей с известными поддельными адресами электронной почты. Точно не помню, как выполнить первую часть прямо сейчас, но это должно быть достаточно легко разобраться.

Да, я думал о том, чтобы сделать это, чтобы избавиться от этих доменов электронной почты.

Я заметил, что метод Discourse создаёт адреса электронной почты вида @no-email.invalid:

А в базовом классе импортера используется @email.invalid, что немного отличается:

  1. Оба ли эти «фейковых домена» игнорируются, когда Discourse должен отправлять письма?

  2. Должен ли я заменить свой неработающий домен на @no-email.invalid или @email.invalid, или это не имеет значения?

@pfaffman, я не совсем понимаю, почему нужно делать переназначение в сообщениях, а не изменять адреса электронной почты пользователей:thinking: Эти адреса электронной почты не содержатся в сообщениях, если только я что-то не упускаю.

Если это рекомендуемый способ, я просто хотел бы заменить все адреса с @brokendomains.com в профилях на @no-email.invalid или @email.invalid. Я смогу разобраться, как это сделать, меня просто интересует, какой «фейковый» домен использовать.

Я почти уверен, что posts:remap выполняет переназначение этого домена во всех таблицах, но им пришлось разместить эту команду в каком-то классе.

Вы также можете просто написать собственное правило замены в таблице UserEmails (или как она там называется).

Я почти уверен, что whatever.invalid сообщит всему миру, что это недопустимый адрес, и система не попытается отправить письмо на него.

Круто. Значит, это должно сработать?

User.find_each do |u|
	if u.email.include? "@brokendomain.com"
		u.update(email: SecureRandom.hex + "@email.invalid")
	end
end

Думаю, мой вариант может сработать:

UserEmail.where("email like '%@brokendomain.com'").each do |e|
   e.update(email: SecureRandom.hex + "@email.invalid")
end

Твой тоже может подойти, но я не уверен, что модель User была обновлена так, чтобы после переноса email-адресов в другую модель/таблицу можно было использовать u.email.include?.

Я запустил свой скрипт, чтобы проверить, возвращает ли он целевые адреса электронной почты, и всё работает.

Ваш скрипт должен работать быстрее моего, так как вы используете запрос для выбора конкретных доменов электронной почты, а не перебираете всех пользователей.

Огромное спасибо за вашу помощь :+1:

Ой. Вот переназначение, которое я имел в виду. Это просто

  discourse remap old new

Смотрите Change the domain name or rename your Discourse.

Думаю, что вышеуказанный способ сработает, но решение через UserEmails, вероятно, немного лучше.

Спасибо. Я использовал именно его.
Более 5000 пользователей из общего числа в 17000 имели такие домены электронной почты. Неудивительно, что количество отскоков выросло, когда я увеличил подавление сводных писем после дней

Это специальная обработка в Discourse для любых адресов, заканчивающихся на .invalid, который является зарезервированным доменом верхнего уровня.