- Автор темы
- Администратор
- Модер.
- #1
XenForo 2.3: как массово отметить пользователей с невалидным email (статус «Email invalid (bounced)»)
Задача: на форуме есть пользователи с несуществующими или нерабочими адресами почты. Письма на такие адреса уходят в никуда, портят репутацию почтового домена и повышают риск попасть в спам. У нас есть список таких адресов в CSV, и нужно массово перевести этих пользователей в статус Email invalid (bounced).
Что даёт статус email_bounce
В базе XenForo статус хранится в поле
Шаг 0. Бэкап
Перед любыми изменениями в базе сделайте резервную копию хотя бы таблицы
Шаг 1. Временная таблица для списка email
Шаг 2. Импорт CSV
Через phpMyAdmin: выберите таблицу
Если есть доступ к консоли MySQL:
Затем уберите лишние пробелы и символы переноса строки:
Шаг 3. Проверка совпадений
До изменения статусов посмотрите, каких пользователей затронет операция:
Проверьте, что в списке нет «своих» аккаунтов и количество строк соответствует ожиданиям.
Шаг 4. Смена статуса
Администраторы и модераторы исключены, чтобы случайно не ограничить доступ персоналу. Условие
Шаг 5. Удаление временной таблицы
Изменения вступают в силу сразу, перестраивать кеши не нужно.
Как вернуть всё назад
Чтобы снять статус с конкретного пользователя, откройте Админ-панель → Пользователи → нужный пользователь и в поле «Состояние пользователя» выберите «Действителен».
Массово через SQL (снимет статус со всех):
Почему не статус «Отключён» (disabled)?
Статус
Автоматизация на будущее
В XenForo есть встроенная обработка возвратов: Админ-панель → Настройки → Опции → Параметры электронной почты → Обработка возвратов писем.
Укажите отдельный ящик (например,
Итог
Вопросы и дополнения пишите в теме
Задача: на форуме есть пользователи с несуществующими или нерабочими адресами почты. Письма на такие адреса уходят в никуда, портят репутацию почтового домена и повышают риск попасть в спам. У нас есть список таких адресов в 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 невалидным адресам, так что ручная чистка понадобится только один раз.Итог
- Сделайте бэкап.
- Загрузите CSV во временную таблицу.
- Проверьте совпадения через SELECT.
- Выполните UPDATE со статусом email_bounce.
- Удалите временную таблицу.
- Настройте автоматическую обработку возвратов.
Вопросы и дополнения пишите в теме
