В этой статье мы разберём, как реализовать автоматическую отправку email сообщений в WordPress по расписанию без использования сторонних сервисов. Это полезно для рассылки уведомлений, напоминаний, отчётов или других автоматических писем, которые должны отправляться регулярно.
Почему встроенные средства WordPress подходят для автоматической отправки email
WordPress содержит встроенную систему планировщика задач — WP-Cron. Она позволяет запускать определённые функции в заданное время или через определённые интервалы. В сочетании с функцией wp_mail() это даёт возможность настроить регулярную отправку писем.
В отличие от внешних решений, таких как cron на сервере или сторонние сервисы, WP-Cron работает внутри WordPress и не требует дополнительных настроек хостинга. Однако важно понимать, что WP-Cron запускается при посещении сайта, поэтому на низкозагруженных ресурсах задачи могут выполняться с задержками.
Создание задачи для автоматической отправки email через WP-Cron
Для начала создадим функцию, которая будет отправлять email, а затем зарегистрируем её в планировщике WP-Cron.
Шаг 1. Функция отправки письма
function wordpresses_send_scheduled_email() {
$to = 'user@example.com';
$subject = 'Автоматическое уведомление от WordPress';
$message = 'Это письмо отправлено автоматически по расписанию.';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail($to, $subject, $message, $headers);
}Здесь необходимо заменить user@example.com на нужный email получателя. Функция использует стандартную функцию WordPress wp_mail() с заголовками для HTML-сообщения.
Шаг 2. Регистрация события WP-Cron
Теперь зарегистрируем событие, которое будет запускаться, например, ежедневно.
function wordpresses_schedule_email_event() {
if (!wp_next_scheduled('wordpresses_daily_email_event')) {
wp_schedule_event(time(), 'daily', 'wordpresses_daily_email_event');
}
}
add_action('wp', 'wordpresses_schedule_email_event');Этот код проверяет, запланировано ли уже событие wordpresses_daily_email_event. Если нет — добавляет его с интервалом «daily» (ежедневно).
Шаг 3. Привязка функции к событию
add_action('wordpresses_daily_email_event', 'wordpresses_send_scheduled_email');Теперь функция отправки письма будет запускаться при срабатывании события.
Дополнительные настройки: использование пользовательских интервалов
WP-Cron поддерживает несколько стандартных интервалов: hourly, twicedaily, daily. Если нужно более точное расписание, например, раз в 30 минут, можно добавить пользовательский интервал.
function wordpresses_custom_cron_intervals($schedules) {
$schedules['every_thirty_minutes'] = array(
'interval' => 1800, // 30 минут в секундах
'display' => 'Каждые 30 минут'
);
return $schedules;
}
add_filter('cron_schedules', 'wordpresses_custom_cron_intervals');После этого можно использовать новый интервал:
function wordpresses_schedule_email_event() {
if (!wp_next_scheduled('wordpresses_thirty_min_email_event')) {
wp_schedule_event(time(), 'every_thirty_minutes', 'wordpresses_thirty_min_email_event');
}
}
add_action('wp', 'wordpresses_schedule_email_event');
add_action('wordpresses_thirty_min_email_event', 'wordpresses_send_scheduled_email');Обработка ошибок и логирование отправки писем
Для контроля отправки полезно вести простой лог в файл или базу данных. Например, можно добавить запись в отдельный файл:
function wordpresses_send_scheduled_email() {
$to = 'user@example.com';
$subject = 'Автоматическое уведомление от WordPress';
$message = 'Это письмо отправлено автоматически по расписанию.';
$headers = array('Content-Type: text/html; charset=UTF-8');
$sent = wp_mail($to, $subject, $message, $headers);
$log_entry = date('Y-m-d H:i:s') . ' - Email to ' . $to . ' - ' . ($sent ? 'Success' : 'Fail') . "\n";
error_log($log_entry, 3, WP_CONTENT_DIR . '/email-send.log');
}Это поможет быстро отследить, отправляется ли письмо и нет ли ошибок.
Практические рекомендации и советы
- Тестируйте на локальном сервере — убедитесь, что функция отправки email работает корректно.
- Учитывайте нагрузку сервера — частые срабатывания WP-Cron могут нагружать сайт, особенно при низком трафике.
- Используйте SMTP-плагины для повышения надёжности отправки писем. Например, плагин WP SMTP.
- Если сайт малопосещаемый, рассмотрите назначение настоящего cron-задачи на сервере, которая будет вызывать wp-cron.php напрямую.
Встроенные и сторонние плагины для автоматической отправки email в WordPress
Если не хочется писать код, можно использовать готовые решения. Например:
- WP Scheduled Emails — плагин для планирования и автоматической отправки email. Позволяет создать расписание без программирования.
- MailPoet — мощный плагин для email-рассылок, поддерживает автоматизацию.
- Clearfy Pro — инструмент для оптимизации WordPress, который также позволяет улучшить работу с email через оптимизацию кода и кеша.
Однако кодовый подход даёт гибкость и не требует установки дополнительных плагинов.
Итог
Используя WP-Cron и функцию wp_mail(), можно легко настроить автоматическую отправку email по расписанию прямо в WordPress. При необходимости можно расширить функционал логированием, пользовательскими интервалами или интеграцией с SMTP. Этот подход хорошо подходит для уведомлений, отчётов и других автоматических писем, не требующих сложной логики.