Автоматическая отправка Email-сообщений — важный функционал для многих сайтов на WordPress. Это может быть уведомление о новом заказе, напоминание пользователю, рассылка новостей или системные оповещения. В этой статье подробно разберём, как создать кастомную функцию для автоматической отправки Email с использованием стандартных возможностей WordPress и PHP, а также рассмотрим примеры кода и рекомендации по безопасности.
Почему стоит использовать встроенные функции WordPress для отправки Email
WordPress имеет встроенную функцию wp_mail(), которая является обёрткой над стандартной функцией PHP mail(). Она упрощает отправку Email, поддерживает подключение плагинов для замены метода отправки (например, SMTP) и автоматически подставляет корректные заголовки.
Использование wp_mail() обеспечивает совместимость с экосистемой WordPress, позволяет избежать проблем с кодировкой и форматированием писем.
Если требуется более тонкая настройка, можно использовать сторонние библиотеки, например PHPMailer, который уже интегрирован в WordPress.
Как создать функцию автоматической отправки Email в WordPress
Рассмотрим создание простой функции для отправки писем и её интеграцию с хуком WordPress, чтобы письмо автоматически уходило при определённом событии, например, при публикации записи.
Пример функции отправки Email
function wp8_send_custom_email($to, $subject, $message, $headers = array()) {
// Проверяем корректность email
if (!is_email($to)) {
return new WP_Error('invalid_email', 'Неверный адрес электронной почты');
}
// Добавляем стандартный заголовок Content-Type для HTML писем
if (empty($headers)) {
$headers[] = 'Content-Type: text/html; charset=UTF-8';
}
// Отправляем письмо
$sent = wp_mail($to, $subject, $message, $headers);
if (!$sent) {
return new WP_Error('mail_failed', 'Ошибка при отправке письма');
}
return true;
}
Функция принимает адрес получателя, тему письма, сообщение и необязательные заголовки. В ней происходит базовая валидация email и добавление заголовка для HTML-сообщений.
Автоматическая отправка письма при публикации записи
Свяжем отправку Email с событием публикации поста. Для этого используем хук publish_post:
function wp8_notify_admin_on_publish($ID, $post) {
$admin_email = get_option('admin_email');
$subject = 'Новая публикация на сайте';
$message = 'Опубликована новая запись: ' . esc_html(get_the_title($ID)) . "<br>";
$message .= 'Ссылка: ' . esc_url(get_permalink($ID));
wp8_send_custom_email($admin_email, $subject, $message);
}
add_action('publish_post', 'wp8_notify_admin_on_publish', 10, 2);
Теперь при каждой публикации записи администратор будет получать уведомление на почту.
Использование плагинов для улучшения отправки Email
Стандартная отправка Email через wp_mail() зависит от настроек сервера, что может привести к попаданию писем в спам или неотправке. Чтобы избежать этого, рекомендуются плагины для SMTP:
- WP Mail SMTP — позволяет настроить отправку почты через SMTP-серверы популярных почтовых сервисов (Gmail, Яндекс, Mail.ru и др.).
- Post SMTP Mailer/Email Log — расширенный инструмент с логированием писем и диагностикой ошибок.
Для интеграции с этими плагинами достаточно использовать wp_mail() без изменений — плагины перехватят вызовы и обрабатывают отправку через выбранный SMTP.
Обработка ошибок и безопасность отправки Email
При создании автоматических Email важно реализовать обработку ошибок, чтобы своевременно узнать о проблемах с отправкой. В приведённой функции возвращается объект WP_Error, который можно логировать или отправлять уведомления.
Также важно избегать уязвимостей, связанных с инъекциями в заголовках Email. Никогда не используйте пользовательские данные напрямую в заголовках без валидации и экранирования.
Для безопасного формирования текста письма используйте функции esc_html() для текста и esc_url() для ссылок, как показано в примере.
Реализация очереди отправки Email с WP-Cron
Если нужно отправлять большое количество писем, лучше не запускать отправку в реальном времени, чтобы не нагружать сервер и избежать таймаутов. В WordPress можно организовать очередь с помощью WP-Cron.
Пример планировщика отправки Email:
function wp8_schedule_email_sending() {
if (!wp_next_scheduled('wp8_send_queued_emails')) {
wp_schedule_event(time(), 'hourly', 'wp8_send_queued_emails');
}
}
add_action('wp', 'wp8_schedule_email_sending');
function wp8_send_queued_emails_callback() {
// Получаем очередь писем из базы или опций
$emails = get_option('wp8_email_queue', array());
foreach ($emails as $key => $email) {
$result = wp8_send_custom_email($email['to'], $email['subject'], $email['message'], $email['headers']);
if ($result === true) {
unset($emails[$key]); // Удаляем отправленное письмо из очереди
}
}
update_option('wp8_email_queue', $emails);
}
add_action('wp8_send_queued_emails', 'wp8_send_queued_emails_callback');
В этом примере письма сохраняются в опции wp8_email_queue и отправляются по крону раз в час. Это снижает нагрузку и повышает стабильность.
Заключение по теме
Создание автоматической отправки Email в WordPress — задача, которую можно решить собственными силами с помощью wp_mail() и хуков. Для сложных сценариев рекомендуются очереди и SMTP-плагины. Внимательное отношение к безопасности и обработке ошибок поможет сделать функционал надёжным и удобным.
Если хотите расширить возможности сайта, обратите внимание на плагины из каталога WPSHOP, которые могут помочь с автоматизацией рассылок и управлением Email.