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

1С-Битрикс

Инструкция для сайтов на 1С-Битрикс: Управление сайтом 20+ (D7). Mailexam® подключается как SMTP-сервер через модуль mailexam.smtp и обработчик события OnBeforePhpMailerInit.

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

  • Аккаунт Mailexam® и проект с SMTP-учётными данными.
  • 1С-Битрикс 20+ и PHP 8.0+.

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

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

1. Переменные в .settings.php

Добавьте секцию environment в bitrix/.settings.php (не коммитьте пароли в публичный репозиторий):

'environment' => [
    'value' => [
        'MAILEXAM_LOGIN' => 'ВАШ_ЛОГИН',
        'MAILEXAM_PASSWORD' => 'ВАШ_ПАРОЛЬ',
        'MAILEXAM_PORT' => '587',
        'MAIL_FROM' => 'noreply@example.test',
    ],
    'readonly' => true,
],

SMTP-хост в коде: ВАШ_ЛОГИН.mailexam.ru.

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

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

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

'MAILEXAM_PORT' => '587',

Модуль использует STARTTLS для портов 587 и 2525.

'MAILEXAM_PORT' => '2525',
'MAILEXAM_PORT' => '25',

Обычный SMTP без STARTTLS.

2. Установка модуля

Скопируйте local/modules/mailexam.smtp и local/tools/mailexam из репозитория-примера на сайт, затем установите модуль:

  • в админке: Marketplace → Установленные решения;
  • или через CLI (если доступен на хостинге).

Модуль содержит:

  • lib/smtpsender.php — SMTP-клиент с STARTTLS на порту 587;
  • lib/eventhandler.php — настройка PHPMailer через OnBeforePhpMailerInit;
  • local/tools/mailexam/mail_test.php — тестовый endpoint.

3. SMTP-отправка (фрагмент)

// local/modules/mailexam.smtp/lib/smtpsender.php
public function send(string $to, string $subject, string $body, ?string $from = null): void
{
    if (!Config::isConfigured()) {
        throw new \RuntimeException('MAILEXAM_LOGIN and MAILEXAM_PASSWORD must be set');
    }

    $host = Config::getHost(); // {login}.mailexam.ru
    $port = Config::getPort();

    if (in_array($port, [587, 2525], true)) {
        $this->sendWithStartTls(/* ... */);
        return;
    }

    $this->sendPlain(/* ... */);
}

Полный модуль — в репозитории на Mos.Hub.

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

curl -X POST https://your-site.test/local/tools/mailexam/mail_test.php \
  -H 'Content-Type: application/json' \
  -d '{"to":"user@example.test","subject":"Тест","body":"Привет"}'

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

Когда заданы MAILEXAM_LOGIN и MAILEXAM_PASSWORD, системные письма Битрикс (регистрация, формы, уведомления) также идут через SMTP Mailexam.

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

Окружение Рекомендация
local секция environment в bitrix/.settings.php
CI секреты MAILEXAM_LOGIN, MAILEXAM_PASSWORD в переменных pipeline

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

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

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

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

Модуль не найден после копирования

  • Путь должен быть local/modules/mailexam.smtp, затем установите модуль в админке.

Ошибка TLS или аутентификации

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

Тестовый скрипт возвращает 404

  • Проверьте URL /local/tools/mailexam/mail_test.php.
  • Убедитесь, что каталог local/tools доступен веб-серверу.

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

  • Откройте входящие того же проекта Mailexam®.
  • Проверьте JSON-тело ошибки от mail_test.php и лог PHP.

См. также