Как добавить автоматическое отправление email уведомлений в WordPress

Автоматизация отправки email уведомлений в WordPress — задача, с которой сталкиваются многие разработчики и владельцы сайтов. В этой статье мы разберём, как настроить автоматическую отправку писем по различным событиям с помощью кастомного кода и популярных плагинов. Также рассмотрим, как сделать отправку более надёжной и избежать попадания писем в спам.

Почему стандартная функция wp_mail может не работать как надо

В WordPress для отправки писем используется функция wp_mail(), которая по умолчанию опирается на PHP mail(). Но в большинстве случаев эта функция работает нестабильно: письма могут не доходить, попадать в спам или вовсе не отправляться из-за настроек сервера.

Чтобы улучшить ситуацию, можно использовать SMTP-сервер для отправки писем или специализированные плагины, которые позволяют интегрировать сторонние сервисы (например, Mailgun, SendGrid или SMTP-сервер вашего хостинга).

Рассмотрим сначала, как сделать базовую отправку email через SMTP с помощью плагина, а затем как реализовать отправку email по кастомным событиям через код.

Настройка отправки email через SMTP в WordPress с помощью плагина WP Mail SMTP

Один из самых популярных и надёжных плагинов для SMTP — WP Mail SMTP. Он позволяет подключить внешние SMTP-сервера и гарантирует доставку писем.

Пошаговая настройка:

  1. Установите и активируйте плагин WP Mail SMTP через админ-панель WordPress.
  2. В разделе настроек плагина укажите SMTP-сервер, порт, тип шифрования, логин и пароль.
  3. Протестируйте отправку письма через встроенный тестовый инструмент.
  4. Сохраните настройки.

Это базовый, но очень важный шаг, который существенно повысит стабильность отправки почты с вашего сайта.

Автоматическая отправка email при публикации нового поста — пример кода

Допустим, вам нужно отправлять уведомление на определённый email при публикации нового поста. Ниже пример кастомной функции с префиксом wpfinder_, чтобы избежать конфликтов:

function wpfinder_send_email_on_publish( $ID, $post ) {
    if ( $post->post_status !== 'publish' ) {
        return;
    }
    $to = 'admin@example.com'; // Замените на нужный email
    $subject = 'Новый пост опубликован: ' . $post->post_title;
    $message = 'Пост "' . $post->post_title . '" был опубликован. Ссылка: ' . get_permalink( $ID );
    wp_mail( $to, $subject, $message );
}
add_action( 'publish_post', 'wpfinder_send_email_on_publish', 10, 2 );

Эта функция срабатывает при публикации поста и отправляет письмо с информацией о новом материале. Обязательно проверьте, что на вашем сайте корректно работает функция wp_mail (например, через SMTP).

Расширение функционала: добавляем HTML-письмо и заголовки

Чтобы отправлять HTML-письма, нужно добавить фильтр и указать заголовки:

function wpfinder_set_html_content_type() {
    return 'text/html';
}

add_filter( 'wp_mail_content_type', 'wpfinder_set_html_content_type' );

function wpfinder_send_html_email_on_publish( $ID, $post ) {
    if ( $post->post_status !== 'publish' ) {
        return;
    }
    $to = 'admin@example.com';
    $subject = 'Новый пост опубликован: ' . $post->post_title;
    $message = '<h2>Опубликован новый пост</h2>' .
               '<p>Заголовок: <strong>' . $post->post_title . '</strong></p>' .
               '<p>Ссылка: <a href="' . get_permalink( $ID ) . '">' . get_permalink( $ID ) . '</a></p>';
    wp_mail( $to, $subject, $message );
    remove_filter( 'wp_mail_content_type', 'wpfinder_set_html_content_type' );
}

remove_action( 'publish_post', 'wpfinder_send_email_on_publish', 10 );
add_action( 'publish_post', 'wpfinder_send_html_email_on_publish', 10, 2 );

После отправки письма мы обязательно удаляем фильтр, чтобы не влиять на другие письма, отправляемые WordPress.

Отправка email по кастомным событиям — пример с обработкой формы

Если вы создаёте собственную форму или обрабатываете данные, возможно, потребуется отправлять письмо после успешной отправки формы. Рассмотрим пример функции для обработки POST-запроса и отправки письма:

function wpfinder_handle_custom_form_submission() {
    if ( isset( $_POST['wpfinder_form_nonce'] ) && wp_verify_nonce( $_POST['wpfinder_form_nonce'], 'wpfinder_form_action' ) ) {
        $user_email = sanitize_email( $_POST['email'] );
        $user_message = sanitize_textarea_field( $_POST['message'] );

        $to = $user_email;
        $subject = 'Спасибо за ваше сообщение';
        $message = 'Мы получили ваше сообщение: ' . $user_message;

        wp_mail( $to, $subject, $message );
    }
}
add_action( 'init', 'wpfinder_handle_custom_form_submission' );

В этом примере мы проверяем nonce для безопасности, очищаем входящие данные и отправляем письмо пользователю с подтверждением. Такой подход можно использовать для любых форм на сайте.

Полезные плагины для расширения возможностей email в WordPress

Кроме WP Mail SMTP, есть и другие полезные плагины для работы с email:

  • MailPoet — позволяет создавать красивые email-рассылки прямо из админки WordPress.
  • FluentSMTP — современный бесплатный SMTP-клиент с поддержкой множества почтовых сервисов.
  • Post SMTP Mailer/Email Log — плагин для диагностики и логирования email отправок.

Использование плагинов совместно с кастомным кодом помогает добиться максимальной гибкости и надёжности.

Советы по улучшению доставки email и предотвращению спама

Настройка SPF, DKIM и DMARC

Для того чтобы письма не попадали в спам, важно настроить на вашем домене записи SPF, DKIM и DMARC. Эти DNS-записи подтверждают, что сервер отправки имеет право слать письма от имени вашего домена.

Если вы используете SMTP-сервис (например, Mailgun или SendGrid), они предоставляют инструкции по настройке этих записей.

Используйте проверку email и валидацию данных

Перед отправкой писем проверяйте корректность email адресов — это снизит количество ошибок и отказов.

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

Для отладки и мониторинга полезно вести лог отправленных email. Для этого можно использовать плагин Post SMTP Mailer/Email Log или реализовать собственное логирование через хуки.

Как создать автоматический импорт постов в WordPress из внешнего источника
18.12.2025
Как создать динамическую таблицу в WordPress с помощью шорткода
05.11.2025
Как настроить отложенный запуск задач в WordPress с помощью WP-Cron
02.03.2026
Диагностика и решение проблем с неработающим AJAX в WooCommerce
04.06.2026
Как создать фильтры по таксономиям в WordPress с примерами кода
06.02.2026