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

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

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

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

Преимущества SMTP в WordPress:

  • Увеличение вероятности доставки писем в почтовые ящики пользователей.
  • Поддержка аутентификации и шифрования (SSL/TLS).
  • Ограничение попадания писем в спам.
  • Возможность отправлять письма с адреса вашего домена.

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

Как работает функция wpgen_wp_mail_smtp: переопределение wp_mail для SMTP

Вместо использования плагинов, мы можем самостоятельно переопределить поведение wp_mail(), чтобы отправка писем шла через SMTP. Для этого добавим в файл functions.php вашей темы (или в кастомный плагин) следующий код.

function wpgen_wp_mail_smtp($to, $subject, $message, $headers = '', $attachments = array()) {
    $smtp_host = 'smtp.example.com'; // SMTP хост
    $smtp_port = 587; // Порт SMTP
    $smtp_username = 'your-email@example.com'; // Логин SMTP
    $smtp_password = 'yourpassword'; // Пароль SMTP
    $smtp_secure = 'tls'; // Шифрование: 'ssl' или 'tls'

    $mail = new PHPMailer\PHPMailer\PHPMailer(true);
    try {
        // Настройки SMTP
        $mail->isSMTP();
        $mail->Host = $smtp_host;
        $mail->SMTPAuth = true;
        $mail->Username = $smtp_username;
        $mail->Password = $smtp_password;
        $mail->SMTPSecure = $smtp_secure;
        $mail->Port = $smtp_port;

        // От кого
        $mail->setFrom($smtp_username, 'Ваш сайт');

        // Кому
        foreach ((array)$to as $recipient) {
            $mail->addAddress($recipient);
        }

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

        // Заголовки
        if ($headers) {
            if (is_array($headers)) {
                foreach ($headers as $header) {
                    $mail->addCustomHeader($header);
                }
            } else {
                $mail->addCustomHeader($headers);
            }
        }

        // Вложения
        if (!empty($attachments)) {
            foreach ($attachments as $attachment) {
                $mail->addAttachment($attachment);
            }
        }

        return $mail->send();
    } catch (Exception $e) {
        error_log('SMTP error: ' . $mail->ErrorInfo);
        return false;
    }
}

// Переопределяем wp_mail
remove_filter('wp_mail', 'wp_mail');
function wpgen_override_wp_mail($to, $subject, $message, $headers = '', $attachments = array()) {
    return wpgen_wp_mail_smtp($to, $subject, $message, $headers, $attachments);
}
add_filter('wp_mail', 'wpgen_override_wp_mail', 10, 5);

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

Основные параметры SMTP и как их получить

Для корректной работы SMTP нужно знать:

  • SMTP-сервер вашего почтового провайдера (например, smtp.gmail.com, smtp.yandex.ru).
  • Порт — чаще всего 465 (SSL) или 587 (TLS).
  • Тип шифрования — SSL или TLS.
  • Логин и пароль — обычно это ваша почта и пароль от неё или пароль приложения.

Если вы используете почту на вашем домене, эти данные можно узнать у хостера или в панели управления почтой.

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

Письма не отправляются — проверка логов и ошибок

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

Проблема с сертификатами SSL/TLS

Если вы видите ошибки, связанные с сертификатами, проверьте, что на сервере актуальные корневые сертификаты. В некоторых случаях можно временно отключить проверку сертификата (не рекомендуется в продакшене) с помощью:

$mail->SMTPOptions = [
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    ]
];

Почта попадает в спам

Чтобы уменьшить вероятность попадания писем в папку «Спам», настройте на домене SPF, DKIM и DMARC-записи. Также используйте адрес отправителя с вашим доменом, а не бесплатную почту.

Пример настройки отправки через SMTP Gmail

Для отправки писем через SMTP Gmail используйте следующие параметры:

  • SMTP-сервер: smtp.gmail.com
  • Порт: 587 (TLS) или 465 (SSL)
  • Шифрование: tls или ssl
  • Логин: ваша полная почта Gmail
  • Пароль: пароль приложения Google (не основной пароль)

Создайте пароль приложения в Google аккаунте, если включена двухфакторная аутентификация. Пример кода для Gmail:

$smtp_host = 'smtp.gmail.com';
$smtp_port = 587;
$smtp_username = 'your-email@gmail.com';
$smtp_password = 'your-app-password';
$smtp_secure = 'tls';

Альтернативные варианты и плагины для SMTP

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

  • WP Mail SMTP — самый популярный SMTP-плагин с поддержкой многих сервисов.
  • Clearfy Pro — плагин для оптимизации и безопасности, в том числе помогает исправлять проблемы с отправкой почты.

Но при желании можно обойтись и собственным кодом, как показано выше.

Итоговые рекомендации по настройке SMTP в WordPress

1. Используйте SMTP с аутентификацией и шифрованием для надежной доставки писем.

2. Тестируйте отправку с помощью специализированных инструментов или кода.

3. Настройте SPF, DKIM, DMARC на домене для снижения риска попадания в спам.

4. Логируйте ошибки SMTP и анализируйте их для быстрого устранения проблем.

5. При необходимости используйте проверенные плагины, если нет возможности писать код.

Создание подробного лога ошибок в WordPress для эффективной отладки
31.03.2026
Как создать адаптивный велосипедный каталог на WordPress с фильтрами и сортировкой
27.12.2025
Как отладить проблемы с кешированием WordPress: эффективные методы и решения
10.11.2025
WooCommerce: автоматическое удаление просроченных заказов через WP-Cron
11.07.2026
WooCommerce: как автоматически изменять стоимость товаров в корзине
07.07.2026