В форуме SMF версии 1.2.4 существует проблема, возникающая при отправке рассылки на почту пользователям форума, если в поле email_address таблицы members находится адрес электронной почты на несуществующем домене, в DNS записях которого отсутствуют MX-записи.
Обработчик очереди логирует ошибку, но не изымает задачу из очереди, а наоборот, присваивает ей наивысший приоритет.
Таким образом, очередь останавливается на попытке обработать подобные почтовые адреса и до остальных пользователей очередь не доходит. Подобное может продолжаться сутками.
Такое возможно по нескольким причинам:
- Домен забанили, например, как protonmail.com
- Домен разделегировали, например, как yandex.ua
- На форуме включён режим «мгновенной регистрации», при которой нет активации по электронной почте. И в теории (если почтовый домен не проверяется на своё существование перед добавлением пользователя) возможно добавление произвольной почты
-
Данный скрипт удаляет проблемные учётные записи пользователей, из таблицы members если они не оставили ни одного сообщения, а также связанные задания на оправку почты из таблицы mail_queue. Скорее всего это спамеры или мёртвые души.
-
Если у пользователей есть сообщения, они не удаляются из таблицы members, и по ним выводится табличный отчёт, имя пользователя является ссылкой на профиль пользователя на форуме. Администратор сам принимает решение, что делать с этим пользователем. Если его нужно сохранить, скорее всего придётся назначить ему некий фейковый адрес электронной почты, на существующем домене, но это не безопасно, т.к. третьи лица могут восстановить пароль для этого пользователя.
-
Из очереди сообщений удаляются задания для отправки писем на проблемные домены, которые не были удалены в п.1 Такое могло произойти, если у пользователя были сообщения либо пользователь был удалён, но задача по его email осталась в очереди.
Скопируйте в корневой каталог форума
Запустите из браузера скрипт fmq.php (fix mail queue). Он возьмёт все настройки из файла Settings.php
После использования можно удалить или переименовать
- Из таблицы members выбираются все уникальные домены, содержащиеся в поле email_address Очевидно, что их значительно меньше, чем пользователей.
- Домены проверяются на содержание MX-записи. Домены не прошедшие проверку помечаются, как невалидные.
- Идёт итерация по списку невалидных доменов, удаляются все записи из members, если почта содержит в себе невалидный домен, а также все записи из mail_queue, содержащие в поле recipient невалидный домен, кроме пользователей, имеющих сообщения.
- Формируется отчёт о пользователях, имеющих сообщения.
- Удаляются невалидные записи из таблицы mail_queue, неудалённые в предыдущих пунктах