Перейти к основному контенту

SMTP-форвардинг из CommuniGate Pro

{{ВИДЕО}}

Эта инструкция настраивает передачу копий писем из CommuniGate Pro в Клавдий по SMTP. CommuniGate Pro оставляет обычную доставку писем без изменений и дополнительно передаёт копию архиватору через правило обработки почты и скрипт resubmitter.pl.

Если Клавдий должен сам забирать сообщения из CommuniGate Pro по IMAP, используйте {{ССЫЛКА:install.source-choose|источник IMAP}}IMAP вместо этой схемы.

Как работает схема

  1. Письмо попадает в очередь CommuniGate Pro и подпадает под правило resubmitter.
  2. Правило вызывает внешний фильтр resubmitter.pl.
  3. Скрипт меняет только SMTP-конверт: адрес получателя user@domain преобразуется в user%domain@<адрес-Клавдия>, после чего файл помещается в Submitted/.
  4. Движок доставки CommuniGate Pro отправляет файл по маршруту Router на SMTP-слушатель Клавдия.
  5. Клавдий принимает письмо, а задача smtp_collection применяет {{ССЫЛКА:install.retention-overview|правила хранения}}.

Скрипт resubmitter.pl сам не устанавливает сетевое соединение с Клавдием. Порт и конечный адрес задаются в Router CommuniGate Pro.

Исходные адреса письма

Скрипт изменяет только SMTP-команду RCPT TO:. Заголовки From:, To: и Cc: остаются без изменений, поэтому Клавдий сохраняет исходных отправителя и получателя, например user1@cgp.lab → user2@cgp.lab. Скрипт также добавляет исходные адреса в Return-Path: и Envelope-To:.

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

Перед началом

Подготовьте:

  • работающий CommuniGate Pro с доменом и почтовыми ящиками;
  • настроенный Клавдий минимум по {{ССЫЛКА:install.quick-start|Быстрому старту}}, включая группу хранилищ и правило хранения;
  • сетевую доступность SMTP-порта Клавдия с сервера CommuniGate Pro.

Полезные материалы производителя:

Шаг 1. Настройте SMTP-приёмник Клавдия

  1. Откройте [Сбор почты] → [SMTP-сервер].
  2. В блоке [Глобальные настройки SMTP] задайте:
    • [Порт] — порт приёма. Если CommuniGate Pro и Клавдий работают на одном хосте и порт 25 уже занят, можно использовать 8025; если конфликта нет — 25;
    • [Шифрование] — [Без TLS (LAN/MX)] для тестового стенда или [STARTTLS] для рабочей эксплуатации;
    • [Имя сервера (hostname)] — например klvd.local.
  3. Нажмите [Сохранить настройки].
  4. Откройте [Кластер] → [Узлы], выберите узел с ролью SMTP и настройте [Размещение слушателей]:
    • [SMTP IP] — адрес приёма, например 0.0.0.0 или конкретный IP;
    • [Сети SMTP] — сеть CommuniGate Pro в CIDR, например 127.0.0.1/32 при размещении на одном хосте или 192.168.1.0/24 в общей сети. Из доверенных сетей письма принимаются без SMTP-AUTH.
  5. Убедитесь, что роль SMTP включена.

Сохраните адрес Клавдия и порт SMTP-слушателя: они потребуются при настройке скрипта и Router.

Шаг 2. Создайте правило хранения для SMTP

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

  1. Откройте [Хранение] → [Правила хранения].
  2. Создайте правило с условием [Источник] = [Сбор из потока SMTP]. Источник создаётся автоматически после первого принятого SMTP-письма; при необходимости его можно создать заранее в разделе [Источники].
  3. Задайте срок хранения и категорию, если она требуется.

Шаг 3. Установите resubmitter.pl

Скрипт размещается в каталоге данных CommuniGate Pro, обычно /var/CommuniGate.

  1. Сохраните resubmitter.pl в /var/CommuniGate/resubmitter.pl.

  2. В блоке BEGIN CONFIG укажите адрес Клавдия:

    my @ScannerAddresses = (
        '127.0.0.1',
    );
    

    Для нескольких экземпляров Клавдия можно указать несколько адресов для циклического распределения (round-robin(!)). Адрес должен быть доступен с сервера CommuniGate Pro.

  3. Сделайте файл исполняемым:

    chmod +x /var/CommuniGate/resubmitter.pl
    
  4. Проверьте наличие Perl:

    perl -v
    

Если CommuniGate Pro работает в Docker, скрипт можно добавить в образ, например:

COPY resubmitter.pl /opt/CommuniGate/resubmitter.pl

Другой вариант — примонтировать файл в /var/CommuniGate/ как том Docker. Адрес Клавдия при сборке собственного образа можно подставить в конфигурацию скрипта на этапе сборки.

Шаг 4. Зарегистрируйте Helper(!) в CommuniGate Pro

  1. Откройте WebAdmin CommuniGate Pro, по умолчанию http://<сервер-CGP>:8010, и войдите как postmaster.

  2. Перейдите в [Установки] → [Общее] → [Помощники (Helpers)].

  3. В свободной строке таблицы [Фильтрация данных] укажите:

    Поле Значение
    Имя программы resubmitter
    Уровень журнала Подробности для настройки, затем Проблемы
    Путь к программе /var/CommuniGate/resubmitter.pl
    Тайм-аут 60 сек
    Авторестарт 1 сек
  4. Включите resubmitter и нажмите [Модифицировать].

Успешный запуск подтверждается строкой resubmitter.pl started в журнале. Ошибка запуска обычно означает неверный путь или недостаточные права.

Шаг 5. Настройте Router(!)

Если Клавдий принимает SMTP не на стандартном порту 25, Router CommuniGate Pro должен явно направлять сообщения на нужный порт.

  1. Откройте [Установки] → [Почта] → [Маршрутизатор].

  2. Добавьте правило в формате адрес = хост.порт._relay, например:

    127.0.0.1 = 127.0.0.1.8025._relay
    

    Левая часть должна совпадать с адресом, который resubmitter.pl подставляет в SMTP-конверт. Правая часть указывает адрес и порт SMTP-слушателя Клавдия.

  3. Если используется стандартный порт 25, отдельное правило не обязательно; при необходимости его можно задать явно как 127.0.0.1 = 127.0.0.1._relay.

  4. Нажмите [Обновить конфигурацию] или [Модифицировать].

Запись host.port._relay отключает MX-разрешение и направляет сообщение непосредственно на host:port.

Шаг 6. Создайте правило обработки почты

Правило вызывает внешний фильтр resubmitter для локальных писем и исключает повторную обработку сообщений, уже направленных в Клавдий.

  1. Откройте [Установки] → [Почта] → [Правила].

  2. Создайте общесерверное правило resubmitter и нажмите [Изменить].

  3. Задайте условия:

    Данные Операция Параметр
    Любой Маршрут is LOCAL*
    Submit Address not in SMTP[<адрес-Клавдия>*]
    Submit Address is not PIPE*

    LOCAL* выбирает письма для локальных ящиков, а условие по Submit Address предотвращает повторную отправку письма в Клавдий.

  4. Задайте действие:

    Действие Параметр
    Внешний Фильтр resubmitter
  5. Сохраните и включите правило. Оно должно находиться выше правил, которые прекращают дальнейшую обработку.

Шаг 7. Проверьте передачу

  1. Отправьте через CommuniGate Pro письмо user1@<домен-CGP> → user2@<домен-CGP> с темой cgp-klvd-push-001.
  2. Проверьте SystemLogs/<год>-<месяц>-<день>_resubmitter.log. Для сообщения должна появиться строка done ... transfered.
  3. В Клавдии проверьте:
    • [Клавдий] → [Обзор] → [Системные метрики]: счётчик SMTP-приёма увеличился на 1;
    • в [Задачах] задача smtp_collection завершилась без ошибки;
    • письмо cgp-klvd-push-001 появилось в архиве, если правило хранения из шага 2 подходит.
  4. Если письмо принято, но не сохранено, проверьте журнал на запись о пропуске и скорректируйте правило хранения.

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

Симптом Вероятная причина Что сделать
resubmitter.log пуст правило CommuniGate Pro не срабатывает проверить LOCAL*, Submit Address и временно повысить уровень журнала «Установка в Очередь» до «Подробности»
REJECTED can't create ...tmp нет прав на запись в Submitted/ проверить права /var/CommuniGate/Submitted/; владельцем должен быть процесс CommuniGate Pro
.sub создан, но письмо не приходит в Клавдий ошибка Router, порта или сети проверить правило Router и TCP-доступ к <адрес-Клавдия>:<порт>
SMTP-письмо принято, но отсутствует в архиве нет подходящего правила хранения создать или исправить правило для SMTP-источника и проверить журнал на skip
письмо повторно циркулирует между CGP и Клавдием отсутствует исключение not in SMTP[<адрес-Клавдия>*] добавить или исправить условие правила
bind() failed на порту 25 порт занят другим MTA перенести SMTP-слушатель Клавдия на другой порт и обновить Router

При необходимости используйте {{ССЫЛКА:maintenance.troubleshooting|диагностику}} и {{ССЫЛКА:reference.errors-index|справочник кодов ошибок}}; SMTP-ошибки имеют префикс #ERROR_KLVD_SMTP_*.

См. также

  • {{ССЫЛКА:install.smtp-service| Сервер SMTP}}SMTP — встроенный приёмник Клавдия (настройка порта, TLS, trusted networks).
  • {{ССЫЛКА:install.source-choose| Источники писем}} — IMAP/EWS как альтернатива форвардингу.
  • {{ССЫЛКА:install.retention-overview| Правила хранения}} — без правила SMTP-письма не сохраняются.
  • {{ССЫЛКА:reference.errors-index| Коды ошибок}} — расшифровка #ERROR_KLVD_SMTP_*.
  • {{ССЫЛКА:install.api-access| HTTP API и Swagger}}Swagger — программное управление Клавдием.

Навигация по книге