XenForo 2.3: как массово отметить пользователей с невалидным email (статус «Email invalid (bounced)»)

Itnull

Admin
Регистрация
22.05.13
Сообщения
29.230
Реакции
13.532
Веб-сайт
itnull.me
XenForo 2.3: как массово отметить пользователей с невалидным email (статус «Email invalid (bounced)»)

Задача: на форуме есть пользователи с несуществующими или нерабочими адресами почты. Письма на такие адреса уходят в никуда, портят репутацию почтового домена и повышают риск попасть в спам. У нас есть список таких адресов в CSV, и нужно массово перевести этих пользователей в статус Email invalid (bounced).

Что даёт статус email_bounce

В базе XenForo статус хранится в поле user_state таблицы xf_user. Значение email_bounce означает следующее:

  • Форум перестаёт отправлять пользователю любые письма: уведомления, подписки, рассылки.
  • Пользователь может авторизоваться, но получает права неподтверждённого аккаунта: писать, скачивать и т. д. он не сможет.
  • На каждой странице он видит сообщение о том, что его email недействителен и его нужно сменить.
  • После смены почты в разделе «Настройки → Контактные данные» и подтверждения нового адреса статус автоматически возвращается в valid.

Шаг 0. Бэкап

Перед любыми изменениями в базе сделайте резервную копию хотя бы таблицы xf_user. Например, так:
Код:
mysqldump -u USER -p DBNAME xf_user > xf_user_backup.sql

Шаг 1. Временная таблица для списка email

SQL:
CREATE TABLE tmp_bounced (
    email VARCHAR(120) NOT NULL PRIMARY KEY
);

Шаг 2. Импорт CSV

Через phpMyAdmin: выберите таблицу tmp_bounced → вкладка «Импорт» → формат CSV. Если в файле есть строка заголовка, укажите, что её нужно пропустить. В CSV должен быть один столбец с адресами.

Если есть доступ к консоли MySQL:
SQL:
LOAD DATA LOCAL INFILE '/path/to/emails.csv'
INTO TABLE tmp_bounced
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(email);

Затем уберите лишние пробелы и символы переноса строки:
SQL:
UPDATE tmp_bounced SET email = TRIM(REPLACE(email, '\r', ''));

Шаг 3. Проверка совпадений

До изменения статусов посмотрите, каких пользователей затронет операция:
SQL:
SELECT u.user_id, u.username, u.email, u.user_state
FROM xf_user u
JOIN tmp_bounced t ON t.email = u.email;

Проверьте, что в списке нет «своих» аккаунтов и количество строк соответствует ожиданиям.

Шаг 4. Смена статуса

SQL:
UPDATE xf_user u
JOIN tmp_bounced t ON t.email = u.email
SET u.user_state = 'email_bounce'
WHERE u.user_state = 'valid'
  AND u.is_admin = 0
  AND u.is_moderator = 0;

Администраторы и модераторы исключены, чтобы случайно не ограничить доступ персоналу. Условие user_state = 'valid' не даёт затронуть забаненных, отключённых и ожидающих модерации пользователей.

Шаг 5. Удаление временной таблицы

SQL:
DROP TABLE tmp_bounced;

Изменения вступают в силу сразу, перестраивать кеши не нужно.

Как вернуть всё назад

Чтобы снять статус с конкретного пользователя, откройте Админ-панель → Пользователи → нужный пользователь и в поле «Состояние пользователя» выберите «Действителен».

Массово через SQL (снимет статус со всех):
SQL:
UPDATE xf_user SET user_state = 'valid' WHERE user_state = 'email_bounce';

Почему не статус «Отключён» (disabled)?

Статус disabled полностью закрывает вход, но тогда пользователь не сможет сам исправить почту, и каждого придётся разблокировать вручную. email_bounce решает обе задачи сразу: письма не отправляются, а пользователь может сам восстановить доступ.

Автоматизация на будущее

В XenForo есть встроенная обработка возвратов: Админ-панель → Настройки → Опции → Параметры электронной почты → Обработка возвратов писем.

Укажите отдельный ящик (например, bounce@вашдомен) и данные IMAP/POP3. XenForo будет сам разбирать возвращённые письма и ставить статус email_bounce невалидным адресам, так что ручная чистка понадобится только один раз.

Итог

  1. Сделайте бэкап.
  2. Загрузите CSV во временную таблицу.
  3. Проверьте совпадения через SELECT.
  4. Выполните UPDATE со статусом email_bounce.
  5. Удалите временную таблицу.
  6. Настройте автоматическую обработку возвратов.

Вопросы и дополнения пишите в теме 👇
 

Создайте аккаунт или войдите в систему, чтобы комментировать

Вы должны быть зарегистрированным, чтобы оставить комментарий

Создать аккаунт

Создайте аккаунт в нашем сообществе.

Войти

У вас уже есть аккаунт? Войдите здесь.

Назад
Сверху Снизу