Перейти к содержанию

WordPress

Инструкция для сайтов на WordPress 6.x. Mailexam подключается как SMTP-сервер через встроенный wp_mail() и хук phpmailer_init (библиотека PHPMailer).

Что понадобится

  • Аккаунт Mailexam и проект с SMTP-учётными данными.
  • WordPress 6+ и PHP 8.0+.

Скопируйте из приветственного письма (или кабинета) для вашего проекта:

  • ВАШ_ЛОГИН — SMTP-логин (например, xxxxx);
  • ВАШ_ПАРОЛЬ — SMTP-пароль (уникальная пара к логину);
  • хост — ВАШ_ЛОГИН.mailexam.ru (совпадает с логином).

1. Константы в wp-config.php

Добавьте перед строкой /* That's all, stop editing! */ (не коммитьте пароли в публичный репозиторий):

define('MAILEXAM_LOGIN', 'ВАШ_ЛОГИН');
define('MAILEXAM_PASSWORD', 'ВАШ_ПАРОЛЬ');
define('MAILEXAM_PORT', 587);
define('MAIL_FROM', 'noreply@example.test');

Хост SMTP: ВАШ_ЛОГИН.mailexam.ru.

Адрес отправителя

MAIL_FROM может быть любым тестовым адресом — письмо попадёт в Mailexam, а не реальному получателю.

Альтернативные порты

define('MAILEXAM_PORT', 587);

В MU-плагине: $phpmailer->SMTPSecure = 'tls';

define('MAILEXAM_PORT', 2525);
define('MAILEXAM_PORT', 465);

$phpmailer->SMTPSecure = 'ssl';

define('MAILEXAM_PORT', 25);

$phpmailer->SMTPSecure = '';

2. MU-плагин SMTP

Создайте файл wp-content/mu-plugins/mailexam-smtp.php (каталог mu-plugins создайте, если его нет):

<?php
/**
 * Plugin Name: Mailexam SMTP
 * Description: Отправка почты WordPress через Mailexam SMTP
 */

add_action('phpmailer_init', static function ($phpmailer): void {
    if (!defined('MAILEXAM_LOGIN') || !defined('MAILEXAM_PASSWORD')) {
        return;
    }

    $login = MAILEXAM_LOGIN;
    $port = defined('MAILEXAM_PORT') ? (int) MAILEXAM_PORT : 587;

    $phpmailer->isSMTP();
    $phpmailer->Host = $login . '.mailexam.ru';
    $phpmailer->Port = $port;
    $phpmailer->SMTPAuth = true;
    $phpmailer->Username = $login;
    $phpmailer->Password = MAILEXAM_PASSWORD;

    if ($port === 465) {
        $phpmailer->SMTPSecure = 'ssl';
    } elseif (in_array($port, [587, 2525], true)) {
        $phpmailer->SMTPSecure = 'tls';
    } else {
        $phpmailer->SMTPSecure = '';
    }
});

add_filter('wp_mail_from', static function (): string {
    return defined('MAIL_FROM') ? MAIL_FROM : 'noreply@example.test';
});

MU-плагины подключаются автоматически — активация в админке не нужна.

3. Тестовая отправка

Через код (временно в functions.php темы)

add_action('init', static function (): void {
    if (!isset($_GET['mailexam_mail_test']) || !current_user_can('manage_options')) {
        return;
    }

    $sent = wp_mail(
        'user@example.test',
        'WordPress + Mailexam',
        'Тест Mailexam из WordPress'
    );

    wp_die($sent ? 'Sent' : 'Failed');
});

Откройте в браузере (будучи администратором):
https://ваш-сайт.test/?mailexam_mail_test=1

Удалите этот фрагмент после проверки.

Через WP-CLI

wp eval "var_export(wp_mail('user@example.test', 'Проверка', 'Привет из WordPress'));"

Письмо появится в кабинете Mailexam → ваш проект → входящие.

4. Локальная разработка и CI

Среда Рекомендация
local константы в wp-config.php или wp-config-local.php
CI секреты MAILEXAM_LOGIN, MAILEXAM_PASSWORD в переменных окружения пайплайна

Пример для .gitlab-ci.yml:

variables:
  MAILEXAM_LOGIN: $MAILEXAM_LOGIN
  MAILEXAM_PASSWORD: $MAILEXAM_PASSWORD
  MAILEXAM_PORT: "587"
  MAIL_FROM: "noreply@example.test"

После интеграционного теста проверьте доставку через API Mailexam.

5. Типичные проблемы

Письма не уходят через SMTP

  • Убедитесь, что файл лежит в wp-content/mu-plugins/, а не в plugins/.
  • Проверьте, что другой SMTP-плагин не переопределяет phpmailer_init позже по приоритету.

Ошибка TLS или authentication failed

  • Host{логин}.mailexam.ru, Username — тот же логин из письма.
  • Логин и пароль — пара из письма одного проекта.

Письмо не в кабинете

  • Смотрите входящие того же проекта Mailexam.
  • Включите отладку: define('WP_DEBUG', true); и плагин WP Mail Logging на время диагностики.

См. также