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

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

Почему стоит использовать PHPMailer в WordPress

PHPMailer — это мощная и гибкая библиотека, позволяющая настроить отправку писем практически в любом формате и с любыми параметрами. WordPress уже содержит PHPMailer, и вместо использования стандартной функции wp_mail(), вы можете напрямую работать с объектом PHPMailer, чтобы:

  • Настроить SMTP-сервер с авторизацией и шифрованием (SSL/TLS);
  • Добавить кастомные заголовки и вложения;
  • Управлять форматированием письма (HTML и plain text);
  • Обрабатывать ошибки отправки и логировать их;
  • Использовать расширенные возможности PHPMailer, недоступные через wp_mail().

Это особенно важно, если стандартная отправка писем через wp_mail() не работает из-за ограничений хостинга или блокировки почтовых портов.

Как получить объект PHPMailer в WordPress

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

add_action('phpmailer_init', 'wpone_phpmailer_smtp_setup');
function wpone_phpmailer_smtp_setup(PHPMailer\PHPMailer\PHPMailer $phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host       = 'smtp.example.com';
    $phpmailer->SMTPAuth   = true;
    $phpmailer->Port       = 587;
    $phpmailer->Username   = 'your_username';
    $phpmailer->Password   = 'your_password';
    $phpmailer->SMTPSecure = 'tls';
    $phpmailer->From       = 'no-reply@example.com';
    $phpmailer->FromName   = 'WPONE Mailer';
}

Этот код установит необходимые параметры SMTP и изменит отправителя.

Отправка письма с кастомным объектом PHPMailer

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

function wpone_send_custom_mail($to, $subject, $body, $attachments = []) {
    // Создаём новый объект PHPMailer
    $phpmailer = new PHPMailer\PHPMailer\PHPMailer(true);
    try {
        // Настройки SMTP
        $phpmailer->isSMTP();
        $phpmailer->Host       = 'smtp.example.com';
        $phpmailer->SMTPAuth   = true;
        $phpmailer->Username   = 'your_username';
        $phpmailer->Password   = 'your_password';
        $phpmailer->SMTPSecure = PHPMailer\PHPMailer\PHPMailer::ENCRYPTION_STARTTLS;
        $phpmailer->Port       = 587;

        // От кого
        $phpmailer->setFrom('no-reply@example.com', 'WPONE Mailer');
        // Кому
        $phpmailer->addAddress($to);

        // Тема и тело письма
        $phpmailer->Subject = $subject;
        $phpmailer->Body    = $body;
        $phpmailer->isHTML(true);

        // Вложения
        foreach ($attachments as $file) {
            $phpmailer->addAttachment($file);
        }

        // Отправка
        $phpmailer->send();
        return true;
    } catch (Exception $e) {
        error_log('WPONE Mail error: ' . $phpmailer->ErrorInfo);
        return false;
    }
}

Эта функция позволяет отправлять письма с любыми параметрами и вложениями, минуя wp_mail().

Обработка ошибок и логирование в PHPMailer

При работе с почтой важно уметь диагностировать причины сбоев. PHPMailer генерирует подробные сообщения об ошибках, которые можно сохранить в лог. В примерах выше мы добавили запись в системный лог через error_log(). Для более удобного анализа можно использовать плагины для логирования или настраивать собственные файлы логов.

Пример расширенного логирования

function wpone_phpmailer_logging(PHPMailer\PHPMailer\PHPMailer $phpmailer) {
    $phpmailer->SMTPDebug = 2; // Уровень отладки
    $phpmailer->Debugoutput = function($str, $level) {
        error_log("[WPONE SMTP Debug] Level $level: $str");
    };
}
add_action('phpmailer_init', 'wpone_phpmailer_logging');

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

Использование плагинов для упрощения SMTP-настроек

Если не хочется писать код, можно использовать популярные плагины, которые настраивают PHPMailer под капотом:

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

Эти плагины позволяют быстро и без ошибок настроить SMTP-сервер, а также включить логирование и тестирование отправки.

Заключение по работе с PHPMailer в WordPress

Использование PHPMailer напрямую даёт глубокий контроль над отправкой писем в WordPress. Это важно, если стандартные методы не подходят из-за ограничений хостинга или требований к безопасности. Примеры кода из статьи помогут настроить отправку писем с SMTP, кастомными заголовками и вложениями, а также организовать логирование ошибок для быстрой диагностики.

Как создать собственный тип записи в WordPress с примерами кода
21.12.2025
Как добавить автоматическое сохранение записей в WordPress
13.12.2025
Как использовать REST API WordPress для создания собственных приложений
13.11.2025
Как использовать WPONE REST API для получения данных о заказах в WooCommerce
08.03.2026
Как вывести оценки пользователей в WordPress с помощью плагинов и кода
25.02.2026