wpmail.ru wordpress WP Mail

Как удалить неотправленные письма из очереди WP Mail Queue в WordPress

Диагностика проблемы с неотправленными письмами в очереди WP Mail Queue

Плагин WP Mail Queue используется для отложенной отправки писем в WordPress, что помогает избежать блокировок и перегрузок SMTP-сервера. Однако при сбоях в подключении или ошибках конфигурации письма могут застревать в очереди и не отправляться.

Основные симптомы проблемы:

  • Письма не отправляются, хотя в админке видно их в очереди.
  • Очередь постоянно увеличивается, письма накапливаются.
  • Отсутствие ошибок в логах, но письма не приходят.

Для проверки состояния очереди можно воспользоваться WP-CLI или запросами к базе данных.

Проверка очереди через WP-CLI

wp mail-queue list

Если команда не доступна, можно проверить таблицу wp_mail_queue в базе данных напрямую, выполнив SQL-запрос:

SELECT * FROM wp_mail_queue WHERE status = 'pending';

Пошаговое решение: как очистить и исправить очередь WP Mail Queue

1. Резервное копирование базы данных

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

2. Удаление зависших писем из очереди

Самый простой способ очистить очередь — удалить письма со статусом pending или failed напрямую через базу данных:

DELETE FROM wp_mail_queue WHERE status IN ('pending', 'failed');

Если вы хотите удалить только письма старше определённой даты, добавьте условие:

DELETE FROM wp_mail_queue WHERE status = 'pending' AND date_created < NOW() - INTERVAL 7 DAY;

3. Проверка конфигурации отправки почты

После очистки убедитесь, что настройки SMTP или API сервиса корректны. Проверьте, что плагин WP Mail Queue правильно интегрирован с вашим почтовым сервером.

4. Перезапуск WP-Cron

WP Mail Queue зависит от WP-Cron для обработки очереди. Запустите вручную через WP-CLI:

wp cron event run --due-now

Проверка результата после внедрения

  • Отправьте тестовое письмо через форму на сайте или через административную панель.
  • Проверьте, что письмо исчезает из очереди в базе данных.
  • Убедитесь, что письмо приходит на почтовый ящик.
  • Проверьте логи плагина и сервера почты на отсутствие ошибок.

Частые ошибки и как их исправить

  • Ошибка: Почта не отправляется, но очередь не очищается.
    Причина: неправильная работа WP-Cron или отключен системный cron. Решение: Настроить системный cron, чтобы запускать WP-Cron каждые 5 минут.
  • Ошибка: Письма застревают из-за лимитов SMTP-провайдера.
    Причина: превышение суточного лимита отправки. Решение: использовать сервисы с большим лимитом или разбить отправку писем на меньшие партии.
  • Ошибка: Некорректный статус писем в базе.
    Причина: ошибки плагина или конфликт с другими плагинами. Решение: временно отключить другие плагины и проверить работу очереди.

Практические советы по оптимизации и безопасности отправки с WP Mail Queue

  • Регулярно очищайте очередь от устаревших писем, чтобы не перегружать базу данных.
  • Используйте системный cron вместо WP-Cron для надежной обработки очереди.
  • Настройте лимиты отправки, чтобы не блокировать SMTP-сервер.
  • Используйте логирование ошибок для быстрого выявления проблем.
  • Ограничивайте доступ к таблице очереди, чтобы предотвратить утечку данных.

Сравнение способов очистки очереди WP Mail Queue

СпособПлюсыМинусы
Удаление через SQLБыстро и эффективно, полный контрольТребует доступа к базе, риск ошибочных удалений
Через WP-CLIУдобно для администраторов, автоматизацияНужен SSH-доступ и знание команд
Через интерфейс плагина (если есть)Простота для неопытных пользователейНе всегда доступно, может быть медленно

Пример кода: удаление писем из очереди через хук в functions.php

function clear_wp_mail_queue() {
    global $wpdb;
    $table = $wpdb->prefix . 'mail_queue';
    $deleted = $wpdb->query("DELETE FROM $table WHERE status IN ('pending', 'failed')");
    error_log('WP Mail Queue: удалено писем - ' . $deleted);
}
// Очистка очереди при активации темы
add_action('after_switch_theme', 'clear_wp_mail_queue');

Пример кода: проверка и запуск обработки очереди вручную

function run_wp_mail_queue_cron() {
    if (function_exists('wp_mail_queue_process')) {
        wp_mail_queue_process();
    }
}
// Запуск обработки очереди по запросу
add_action('init', 'run_wp_mail_queue_cron');
×
WPRemark
Внимание Внимание Внимание Внимание
-15%

на WPRemark плагин WordPress

Прокачай свой сайт! ⋙