wpmail.ru wordpress WP Mail

Как установить лимит отправки писем WooCommerce для предотвращения блокировок

Почему важен лимит отправки писем в WooCommerce

WooCommerce активно рассылает письма клиентам — уведомления о заказах, сменах статуса, промоакенты и т.д. При большом объеме писем без ограничения вы рискуете, что почтовый сервис вашего хостинга заблокирует отправку из-за подозрений на спам. Особенно это актуально для магазинов с большим количеством заказов и массовых рассылок.

Диагностика проблемы с массовой отправкой писем

Для начала убедитесь, что именно объем писем влияет на доставляемость:

  • Проверьте логи SMTP или сервера почты на предмет ошибок с кодами 421, 450 или 554 — они часто указывают на лимиты отправки.
  • Обратите внимание, если письма перестают уходить после определенного количества отправленных сообщений за час.
  • Используйте плагины типа WP Mail Logging для фиксации попыток отправки и ошибок.

Пошаговое решение: установка лимита отправки писем WooCommerce

1. Добавьте фильтр для ограничения количества писем за сессию

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

add_action('phpmailer_init', 'limit_woocommerce_emails_per_hour');
function limit_woocommerce_emails_per_hour($phpmailer) {
    static $sent_emails = [];
    $current_hour = date('Y-m-d-H');

    if (!isset($sent_emails[$current_hour])) {
        $sent_emails = [$current_hour => 0];
    }

    if ($sent_emails[$current_hour] >= 10) {
        // Прекратить отправку письма
        $phpmailer->ClearAllRecipients();
        $phpmailer->Subject = '';
        $phpmailer->Body = '';
        // Можно логировать попытку превышения лимита
        error_log('Лимит писем WooCommerce на час достигнут');
    } else {
        $sent_emails[$current_hour]++;
    }
}

2. Используйте очередь отправки писем

Чтобы не блокировать отправку и не терять письма, лучше поставить очередь. Ее можно реализовать на базе WP-Cron и отдельной таблицы в базе данных:

  • Сохраняйте письма в таблицу wp_email_queue.
  • Создайте WP-Cron задачу, которая будет отправлять письма с ограничением по количеству (например, 5 писем за один запуск).
  • Удаляйте отправленные письма из очереди.

Пример создания WP-Cron задачи для отправки очереди:

function send_woocommerce_email_queue() {
    global $wpdb;
    $limit = 5; // Писем за один запуск
    $queue_table = $wpdb->prefix . 'email_queue';

    $emails = $wpdb->get_results("SELECT * FROM $queue_table ORDER BY id ASC LIMIT $limit");

    foreach ($emails as $email) {
        wp_mail($email->to, $email->subject, $email->body, maybe_unserialize($email->headers));
        $wpdb->delete($queue_table, ['id' => $email->id]);
    }
}

add_action('woocommerce_email_queue_send', 'send_woocommerce_email_queue');

if (!wp_next_scheduled('woocommerce_email_queue_send')) {
    wp_schedule_event(time(), 'hourly', 'woocommerce_email_queue_send');
}

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

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

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

  • Лимит не срабатывает: проверьте, подключается ли фильтр phpmailer_init и нет ли конфликтов с другими плагинами, которые могут перезаписывать настройки отправки.
  • Письма теряются: если вы просто отменяете отправку без очереди, письма могут не дойти. Используйте очередь для надежности.
  • WP-Cron не запускается: на некоторых серверах WP-Cron срабатывает только при посещении сайта. Настройте системный cron или используйте плагин, например, WP Crontrol.

Практические советы по безопасности и производительности

  • Храните очередь писем в отдельной таблице с индексами для быстрого поиска и удаления.
  • Ограничьте WP-Cron задачи, чтобы они не запускались часто и не создавали нагрузку.
  • Используйте сторонние SMTP-сервисы с поддержкой API (например, Postmark, Mailgun) для большей надежности и контроля ограничений.
  • Для больших магазинов рекомендуем использовать специализированные плагины очереди email, например, «WP Mail Queue».

Сравнение способов ограничения отправки писем WooCommerce

МетодПлюсыМинусыРекомендации
Фильтр phpmailer_init с лимитомПростота реализации, не требует доп. таблицПисьма после лимита теряются, нет очередиПодходит для малых магазинов
Очередь + WP-CronНадежная отправка, контроль нагрузкиСложнее в настройке, требует таблицу и cronРекомендуется для средних и больших магазинов
Плагины очереди (например, WP Mail Queue)Готовое решение, поддержкаМожет быть платным, зависит от плагинаДля магазинов с высокой нагрузкой
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее