wpmail.ru wordpress WP Mail

Как добавить приложение для отправки email с использованием OAuth2 в WordPress

Проблема: необходимость безопасной отправки писем через SMTP с OAuth2

Многие почтовые провайдеры, например Gmail, требуют аутентификацию с помощью OAuth2 для отправки писем через SMTP. Простая настройка SMTP с логином и паролем уже не работает из-за усиленной безопасности. В WordPress стандартные SMTP-плагины часто не поддерживают OAuth2, что вызывает ошибки отправки писем или блокировки.

Диагностика проблемы отправки писем с OAuth2

Чтобы понять, что именно не так, необходимо:

  • Проверить логи ошибок почтового сервера в WordPress (например, с помощью плагина WP Mail Logging).
  • Убедиться, что использован правильный SMTP-сервер (smtp.gmail.com для Gmail) и порт (587 или 465).
  • Проверить, не блокирует ли Google попытки входа (в аккаунте Google включена двухфакторная аутентификация, и требуется OAuth2).
  • Удостовериться, что плагин SMTP поддерживает OAuth2 или предусмотрена возможность вручную использовать OAuth2-токены.

Пошаговое решение: интеграция отправки писем через OAuth2 в WordPress без готового плагина

Если стандартные SMTP-плагины не подходят, можно реализовать отправку писем через OAuth2 с использованием PHPMailer и Google API. Пример ниже показывает, как это сделать программно.

1. Создайте проект и OAuth2-клиент в Google Cloud Console

  • Перейдите в Google Cloud Console.
  • Создайте проект.
  • В разделе OAuth 2.0 Client IDs создайте учетные данные для Desktop app или Web app.
  • Сохраните Client ID, Client Secret, Redirect URI.

2. Получите refresh token

Для получения refresh token используйте Google OAuth Playground (https://developers.google.com/oauthplayground) или напишите скрипт с использованием Google API Client. Важно получить refresh token, чтобы иметь возможность обновлять access token.

3. Настройте отправку почты с OAuth2 в WordPress

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

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\OAuth;
use League\OAuth2\Client\Provider\Google;

add_action('phpmailer_init', 'setup_phpmailer_oauth2');
function setup_phpmailer_oauth2(PHPMailer $phpmailer) {
    $phpmailer->isSMTP();
    $phpmailer->Host = 'smtp.gmail.com';
    $phpmailer->Port = 587;
    $phpmailer->SMTPSecure = 'tls';
    $phpmailer->SMTPAuth = true;

    $clientId = 'ВАШ_CLIENT_ID';
    $clientSecret = 'ВАШ_CLIENT_SECRET';
    $refreshToken = 'ВАШ_REFRESH_TOKEN';
    $email = 'ваш.email@gmail.com';

    $provider = new Google([
        'clientId' => $clientId,
        'clientSecret' => $clientSecret,
    ]);

    $phpmailer->AuthType = 'XOAUTH2';

    $phpmailer->setOAuth(
        new OAuth([
            'provider' => $provider,
            'clientId' => $clientId,
            'clientSecret' => $clientSecret,
            'refreshToken' => $refreshToken,
            'userName' => $email,
        ])
    );

    $phpmailer->Username = $email;
}

Для работы этого кода потребуется установить зависимости через Composer (PHPMailer и league/oauth2-client), например, в корне сайта:

composer require phpmailer/phpmailer league/oauth2-client league/oauth2-google

Проверка результата

Чтобы проверить, что отправка писем работает через OAuth2, сделайте следующее:

  • Установите плагин WP Mail Logging и отправьте тестовое письмо из админки WordPress (например, через настройки плагина SMTP или вручную через wp_mail).
  • Проверьте логи плагина — письмо должно быть отправлено без ошибок.
  • Если письмо не отправляется, проверьте в логах ошибки PHPMailer и убедитесь, что refresh token верный и не истек.

Частые ошибки и их исправление

  • Ошибка аутентификации: Проверьте правильность Client ID, Client Secret и refresh token. Убедитесь, что в Google Cloud Console включены необходимые API (Gmail API).
  • Отсутствие зависимостей: Если код выдает ошибки, связанные с отсутствием классов PHPMailer или OAuth, проверьте, что вы установили пакеты через Composer и подключаете автозагрузчик.
  • Ошибка "invalid_grant" при обновлении токена: refresh token мог быть отозван. Получите новый через Google OAuth Playground.
  • Письма попадают в спам: Настройте SPF, DKIM и DMARC для домена, с которого отправляете почту.

Практические советы по безопасности и производительности

  • Не храните Client Secret и refresh token в открытом виде в коде. Лучше использовать переменные окружения или wp-config.php.
  • Обновляйте зависимости PHPMailer и OAuth2 Client для защиты от уязвимостей.
  • Для массовой рассылки используйте отдельные сервисы с поддержкой OAuth2, чтобы не нагружать сайт.
  • Регулярно проверяйте логи отправки почты, чтобы вовремя обнаружить сбои.

Сравнительная таблица способов отправки почты с OAuth2

СпособПлюсыМинусыПрименимость
Готовый плагин SMTP с OAuth2Простота настройки, готовый интерфейсМожет не поддерживать все провайдеры, ограничения функционалаДля большинства сайтов без кастомных требований
Кастомный код с PHPMailer и OAuth2Полный контроль, гибкостьТребует программирования и поддержкиДля разработчиков и кастомных решений
Использование внешних сервисов API (например, Gmail API)Высокая надежность, масштабируемостьСложность интеграции, цена сервисовДля больших проектов и рассылок
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее