Как использовать PHPMailer в WordPress для отправки писем

WordPress из коробки использует библиотеку PHPMailer для отправки электронных писем, но часто стандартных функций недостаточно. В этой статье рассмотрим, как правильно работать с PHPMailer в WordPress, чтобы расширить возможности отправки почты, решить проблемы с доставкой и интегрировать кастомные настройки.

Что такое PHPMailer и как он работает в WordPress

PHPMailer — это мощная PHP-библиотека для отправки писем через SMTP, с поддержкой HTML, вложений и аутентификации. В WordPress этот класс встроен и вызывается функцией wp_mail(). Однако, если нужно добавить нестандартные заголовки, вложения или изменить настройки SMTP, стоит использовать PHPMailer напрямую через хук phpmailer_init.

Это позволяет изменять параметры перед отправкой письма, например, задать SMTP-сервер или изменить формат письма.

Почему стандартный wp_mail не всегда подходит

Стандартная функция wp_mail() удобна, но не всегда гибка. Например, если нужно отправлять письма через внешний SMTP-сервер с авторизацией, добавить вложения или использовать кастомные заголовки, без прямой работы с PHPMailer не обойтись.

Также в некоторых случаях стандартные письма попадают в спам из-за неправильных заголовков или отсутствия аутентификации SMTP.

Использование хука phpmailer_init для настройки PHPMailer в WordPress

В WordPress есть хук phpmailer_init, который позволяет получить объект PHPMailer перед отправкой письма и изменить его свойства. Рассмотрим, как его использовать.

Добавьте следующий код в файл functions.php вашей темы или в свой плагин:

add_action('phpmailer_init', 'wphost_phpmailer_init_custom_smtp');
function wphost_phpmailer_init_custom_smtp(\PHPMailer\PHPMailer $phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host = 'smtp.example.com'; // SMTP сервер
    $phpmailer->SMTPAuth = true;
    $phpmailer->Port = 587;
    $phpmailer->Username = 'user@example.com';
    $phpmailer->Password = 'password';
    $phpmailer->SMTPSecure = 'tls'; // ssl или tls
    $phpmailer->From = 'no-reply@example.com';
    $phpmailer->FromName = 'Your Site';
}

Так вы настроите отправку через внешний SMTP-сервер с авторизацией. Это решит проблему с попаданием писем в спам и повысит надежность доставки.

Параметры PHPMailer, которые стоит знать

  • isSMTP() — переключает PHPMailer на SMTP-отправку;
  • Host — адрес SMTP-сервера;
  • SMTPAuth — необходимость авторизации;
  • Port — порт SMTP-сервера;
  • Username и Password — данные для входа;
  • SMTPSecure — тип шифрования (ssl или tls);
  • From и FromName — адрес и имя отправителя;
  • addAttachment() — добавление вложений;
  • isHTML() — отправка письма в HTML-формате.

Пример отправки письма с вложением и HTML через PHPMailer

Иногда нужно отправить письмо с вложением или в формате HTML. Рассмотрим, как сделать это через wp_mail() и хук phpmailer_init.

Допустим, у нас есть функция, которая отправляет письмо с вложением:

function wphost_send_custom_email() {
    $to = 'recipient@example.com';
    $subject = 'Тестовое письмо с вложением';
    $message = '<h1>Привет!</h1><p>Это тестовое письмо.</p>';
    $headers = ['Content-Type: text/html; charset=UTF-8'];
    $attachments = [WP_CONTENT_DIR . '/uploads/test.pdf'];
    wp_mail($to, $subject, $message, $headers, $attachments);
}

Чтобы вложение корректно отправилось, и письмо было в HTML, необходимо в phpmailer_init дополнительно вызвать isHTML(true) и добавить вложение:

add_action('phpmailer_init', 'wphost_phpmailer_add_attachment_and_html');
function wphost_phpmailer_add_attachment_and_html($phpmailer) {
    $phpmailer->isHTML(true);
    // Вложение можно добавить здесь, если нужно динамически
    // $phpmailer->addAttachment(WP_CONTENT_DIR . '/uploads/test.pdf');
}

В большинстве случаев достаточно передать вложения в wp_mail(), но если нужна дополнительная обработка, используйте этот хук.

Решение распространенных проблем с отправкой писем через PHPMailer в WordPress

Письма не отправляются или попадают в спам

Самая частая проблема — это неправильная настройка SMTP или отсутствие аутентификации. Чтобы исправить, используйте хук phpmailer_init, как показано выше, и настройте SMTP-сервер с поддержкой шифрования.

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

Отправка писем с кастомными заголовками

Иногда нужно добавить заголовки, например, Reply-To или CC. В wp_mail() это делается через параметр $headers. Пример:

$headers = [
    'From: Your Site <no-reply@example.com>',
    'Reply-To: support@example.com',
    'Cc: manager@example.com'
];
wp_mail($to, $subject, $message, $headers);

Если нужно добавить заголовки динамически через PHPMailer, используйте метод addCustomHeader() внутри хука phpmailer_init.

Полезные плагины для работы с почтой и PHPMailer в WordPress

Для упрощения настройки SMTP и улучшения отправки писем можно использовать готовые плагины:

  • WP Mail SMTP — позволяет настроить SMTP-сервер с удобным интерфейсом и поддержкой различных почтовых сервисов;
  • Post SMTP Mailer/Email Log — расширенный SMTP-клиент с логированием писем и поддержкой OAuth;
  • Easy WP SMTP — простой в использовании плагин для настройки SMTP;
  • Clearfy Pro — оптимизация и улучшение работы WordPress, в том числе с почтой.

Эти плагины помогают избежать проблем с доставкой и расширяют функционал стандартной отправки писем.

Заключение по использованию PHPMailer в WordPress

Работа с PHPMailer через хук phpmailer_init даёт полный контроль над отправкой почты в WordPress. Вы сможете настроить SMTP, добавлять вложения, изменять заголовки и формат писем, что значительно расширит возможности стандартной функции wp_mail().

Рекомендуется использовать готовые SMTP-плагины для простой настройки и более надёжной доставки писем, а кастомные доработки делать через phpmailer_init для специфических задач.

Если хотите попробовать готовые решения, посмотрите, например, Clearfy Pro для оптимизации и улучшения работы WordPress.

Как удалить временные файлы кеша WooCommerce без плагинов
13.06.2026
Автоматическое изменение стоимости товаров в WooCommerce по заданным условиям
04.05.2026
Как избежать конфликтов между плагинами в WordPress
31.03.2026
Как использовать Redis для ускорения WordPress: настройка и примеры
10.03.2026
Как использовать REST API WordPress для создания приложений
30.11.2025