Автоматизация отправки 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-сервера и гарантирует доставку писем.
Пошаговая настройка:
- Установите и активируйте плагин WP Mail SMTP через админ-панель WordPress.
- В разделе настроек плагина укажите SMTP-сервер, порт, тип шифрования, логин и пароль.
- Протестируйте отправку письма через встроенный тестовый инструмент.
- Сохраните настройки.
Это базовый, но очень важный шаг, который существенно повысит стабильность отправки почты с вашего сайта.
Автоматическая отправка 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 или реализовать собственное логирование через хуки.