Как настроить отправку писем через SMTP в WordPress без плагинов

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

Частая причина такой проблемы — некорректная работа встроенной функции mail() PHP или блокировка отправки писем на сервере хостинга. Чтобы устранить эти проблемы и повысить надежность отправки писем, рекомендуется настроить отправку через SMTP сервер. В этой статье мы рассмотрим, как сделать это без использования дополнительных плагинов, напрямую через код.

Почему стоит использовать SMTP для отправки писем в WordPress

SMTP (Simple Mail Transfer Protocol) — стандартный протокол для передачи электронной почты. Отправка писем через SMTP сервер позволяет:

  • Уменьшить вероятность попадания писем в спам;
  • Использовать аутентификацию и шифрование для защиты данных;
  • Контролировать, с какого адреса и сервера отправляются письма;
  • Повысить стабильность и надежность доставки писем.

Плагины для SMTP, такие как WP Mail SMTP, Easy WP SMTP, упрощают настройку, но иногда хочется обойтись без них, чтобы уменьшить нагрузки на сайт и повысить безопасность, контролируя все процессы через собственный код.

Как работает функция wp_mail() и как ее расширить для SMTP

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

PHPMailer позволяет задать параметры SMTP, включая сервер, порт, логин, пароль и шифрование. Для реализации нам нужно подключиться к хуку phpmailer_init и настроить объект $phpmailer.

Пример кода для настройки SMTP в functions.php

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

add_action('phpmailer_init', 'wpkeys_smtp_mailer');
function wpkeys_smtp_mailer($phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host       = 'smtp.example.com';  // SMTP сервер
    $phpmailer->SMTPAuth   = true;               // Включаем аутентификацию
    $phpmailer->Port       = 587;                // Порт SMTP
    $phpmailer->Username   = 'your-email@example.com'; // Логин
    $phpmailer->Password   = 'yourpassword';     // Пароль
    $phpmailer->SMTPSecure = 'tls';              // Шифрование: ssl или tls
    $phpmailer->From       = 'your-email@example.com'; // От кого
    $phpmailer->FromName   = 'Ваш сайт';          // Имя отправителя
}

Пояснения:

  • $phpmailer->isSMTP(); — переключает отправку на SMTP;
  • Host, Port, Username, Password — параметры вашего SMTP сервера (эти данные нужно получить у вашего почтового провайдера или хостера);
  • SMTPSecure — тип шифрования, обычно tls или ssl;
  • From и FromName — адрес и имя отправителя, которые будут отображаться в письмах.

Как проверить корректность настроек SMTP

Чтобы убедиться, что почта отправляется успешно, можно написать тестовый скрипт в WordPress, который вызовет wp_mail(). Например, создайте отдельную функцию и вызовите ее через административную панель или напрямую:

function wpkeys_send_test_email() {
    $to = 'your-email@example.com';
    $subject = 'Тест SMTP отправки';
    $message = 'Если вы получили это письмо, значит SMTP настроен правильно!';
    $headers = array('Content-Type: text/html; charset=UTF-8');
    $sent = wp_mail($to, $subject, $message, $headers);
    if ($sent) {
        echo 'Письмо успешно отправлено';
    } else {
        echo 'Ошибка отправки письма';
    }
}

Вызовите эту функцию один раз, например, через временный админ-экшен или в файле шаблона, чтобы проверить отправку.

Особенности и рекомендации при настройке SMTP без плагинов

Учет безопасности данных

В коде указаны логин и пароль от SMTP сервера. Чтобы не хранить их в открытом виде, рекомендуется использовать константы в wp-config.php или системные переменные окружения. Например:

define('WPKEYS_SMTP_USER', 'your-email@example.com');
define('WPKEYS_SMTP_PASS', 'yourpassword');

И затем использовать эти константы в функции wpkeys_smtp_mailer.

Совместимость с плагинами и темами

Если вы используете плагины, которые расширяют функционал почты, убедитесь, что они не конфликтуют с вашим кодом. Иногда плагины также используют phpmailer_init, что может привести к конфликтам. В таких случаях настройку SMTP лучше вынести в отдельный плагин с приоритетом загрузки выше остальных.

Использование SMTP от популярных почтовых сервисов

Самые распространенные SMTP серверы — Gmail, Яндекс.Почта, Mail.ru и другие. Для Gmail, например, нужно включить «Доступ для менее защищенных приложений» или использовать OAuth2 авторизацию (что сложнее реализовать без плагинов). Для Яндекса и Mail.ru достаточно правильных настроек порта и шифрования.

Альтернативный вариант — плагин WPGPT для отправки почты

Если вы хотите избежать ручной настройки и получить расширенный контроль над отправкой писем, обратите внимание на плагин WPGPT. Он упрощает интеграцию SMTP, поддержку шаблонов писем и мониторинг отправки.

Однако, если вы предпочитаете минимальный и гибкий подход без лишних зависимостей, ручная настройка через phpmailer_init — лучший выбор.

Выводы и проверка работоспособности

Подводя итог, можно сказать, что настройка отправки почты через SMTP без плагинов — вполне реализуемая задача, позволяющая повысить надежность коммуникации сайта с пользователями. Главное — правильно указать параметры SMTP, защитить конфиденциальные данные и протестировать отправку.

Для удобства ведите документацию по SMTP параметрам вашего хостинга или почтового сервиса и обновляйте их при необходимости.

Как автоматизировать удаление старых просмотров в WordPress
01.02.2026
Как создать динамические отзывы с оценками в WordPress без плагинов
09.01.2026
Как использовать WPRemark для оценки комментариев в WordPress
06.01.2026
Как отключить кэширование страниц в WordPress для разработки и отладки
21.03.2026
Как добавить внешний API в WordPress с помощью REST API
22.01.2026

На оформлении, скоро здесь появится полноценный ресурс