CommuniGate Pro
Версия 6.3
 

Модуль PIPE

Модуль PIPE позволяет внешним приложениям, запущенным на компьютере Сервера, передавать сообщения на Сервер CommuniGate Pro минуя TCP/IP соединения и Интернет протоколы, а также позволяет Серверу доставлять сообщения внешним приложениям.

Модуль PIPE используется также при передаче сообщений, созданных программами mail и sendmail, которые входят в комплект с программного обеспечения сервера CommuniGate Pro. Эти программы предназначены для замены существующих программ mail и sendmail.



Папка Submitted

Модуль PIPE CommuniGate Pro создаёт папку Submitted внутри директории данных CommuniGate Pro.

Модуль PIPE периодически сканирует эту папку и обрабатывает файлы, имеющие расширение .sub. При обнаружении такого файла, модуль копирует его в файл очереди сообщений и передаёт его ядру сервера на обработку.

Текстовые файлы .sub должны содержать сообщения в формате RFC822. Модуль использует данные их полей заголовков RFC822 для создания конверта сообщения.

  • "Формат канала", как он описан в RFC822, НЕ должен использоваться: переданные файлы должны использовать родной для системы символ(ы) "Конца строки", символ точка (.) в начале строки не должен удваиваться и файл не должен заканчиваться символом точка (.).
  • Адреса, указанные в полях заголовков To:, Cc:, Bcc: используются для создания конверта сообщения (адреса получателей).
  • Поля заголовка Bcc: удаляются из передаваемого сообщения.
  • Если обнаружено хотя бы одно поле заголовка Envelope-To:, адреса в конверте (получателя) формируются с использованием адресов, указанных в этих полях заголовка, а адреса во всех оставшихся заголовках To, Cc, и Bcc не помещаются в конверт сообщения. Поля заголовка Envelope-To: удаляются из передаваемого сообщения.
  • Если не существует ни одного поля заголовка Envelope-To:, но существует одно или несколько полей Envelope-Ignore, то адреса, указанные в полях заголовка To/Cc/Bcc и перечисленные в полях Envelope-Ignore НЕ включаются в конверт сообщения.
  • Если поля заголовка Sender: и/или From: содержат адреса без доменной части, то к ним добавляется имя домена Сервера.
  • Если существует поле заголовка Return-Path:, то адрес, указанный в этом заголовке используется как Return-Path адрес конверта, и это поле заголовка удаляется из переданного сообщения.
  • Если поле заголовка Return-Path: не существует, то адрес, указанный в полях заголовка From: или Sender: используется для формирования Return-Path адреса конверта.
  • Если поле заголовка Envelope-ID: существует, то его содержимое используется как идентификатор конверта сообщения. Это поле заголовка будет удалено из передаваемого сообщения.
  • Если поле заголовка Envelope-Notify: существует, то в нём должно содержаться одно или несколько ключевых слов SUCCESS, FAILURE, DELAY, RELAY, разделённых запятой, или же в нём должно содержаться одно ключевое слово NEVER.
    Это поле заголовка указывает параметры DSN, которые будут применяться ко всем адресам в конверте, сформированным после обнаружения этого поля. Это поле заголовка будет удалено из передаваемого сообщения.
    Для указания различных параметров DSN для разных адресов могут использоваться несколько полей заголовков Envelope-Notify:.

Если обработка .sub файла заканчивается неудачно (например, в файле не содержится адреса получателя), то модуль помещает соответствующую запись в Системный Журнал и меняет расширение файла на .bad.

Если .sub файл передан успешно, то он удаляется из папки Submitted.

Из-за специфики обработки PIPE модулем папки Submitted, рекомендуется создавать сообщения в другой файловой директории и затем перемещать созданные .sub файлы в папку Submitted с расширением .tmp, а затем менять расширение файла на .sub.

Сообщения, переданные через PIPE модуль, отмечаются как "полученные из доверенного источника" и в дальнейшем могут ретранслироваться без ограничений.

Папка Submitted используется для Эмуляции Стандартного приложения mail.


Доставка во Внешние Приложения

Модуль PIPE принимает все сообщения, направляемые в домен pipe.

Локальная часть адреса сообщения задаёт внешнее приложение, которое должно быть запущено. Эта часть может так же содержать параметры, заключённые в кавычки.

Пример:
Сообщение, направленное на адрес "execjoe -l store"@pipe будет отправлено приложению execjoe, запущенному с параметрами -l store.
Обычно вы используете PIPE доставку в Маршрутизаторе:
<*@somedomain> = exec*@pipe
эта запись в Маршрутизаторе направит все сообщения, отправленные на адрес joe@somedomain в приложение execjoe.

<*@somedomain> = "execall\ -u\ *"@pipe
эта запись в Маршрутизаторе направит все сообщения, посланные на адрес joe@somedomain в приложение execall, запущенное с параметрами -u joe.

Для того, чтобы ограничить набор приложений, которые могут запускаться через PIPE модуль, в настройках модуля PIPE задаётся каталог для внешних программ. Имена приложений, указанные в адресах сообщения не могут включать в себя символ косой черты (/) или символы обратной косой черты (\), не могут начинаться с символа точка (.) и должны указывать на имя исполняемого файла, находящегося в каталоге для внешних программ.

Текст сообщения (включая заголовки и тело сообщения) передаётся внешней программе на её стандартный ввод.
Обратите внимание: программа должна считывать все данные потока стандартного ввода, в противном случае обработка сообщения закончится неуспешно.

Когда внешнее приложение завершает свою работу, PIPE модуль читает и выкидывает её стандартный вывод. Убедитесь, что ваша программа ничего не записывает в стандартный вывод, чтобы её работа не блокировалась в случае, когда буфер коммуникационного канала (pipe) между сервером и программой переполнен.

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

Последовательная доставка

Чтобы позволить PIPE процессорам доставлять сообщения одновременно, PIPE модуль создаёт отдельные очереди для каждого сообщения, которое он должен доставить. Если вы хотите использовать последовательную доставку, вы можете использовать следующий вид PIPE адреса:
"queue[name] application parameters"@pipe
Все сообщения, направляемые на такие адреса, будут помещаться в очередь name и сообщения в очереди будут отправляться внешним приложениям, указанным в адресах, одним PIPE процессором. Вы можете использовать любую алфавитно-цифровую строку как имя name для очереди, и вы можете указывать столько очередей, сколько вам необходимо.

Следующие записи в Маршрутизаторе: могут использоваться для обслуживания двух PIPE очередей (очереди PROC1 и ARCH):

<incoming> = "queue[PROC1] procin -mark"@pipe
<control>  = "queue[PROC1] procin1 -control"@pipe
<archiver> = "queue[ARCH] appendfile /var/archive"@pipe
Все сообщения, отправленные на адреса <incoming@maindomain.com> и <control@maindomain.com> будут обрабатываться одно за одним, используя один PIPE процессор.

Для PIPE адресов, не имеющих префикса queue[name], PIPE модуль создаст отдельные очереди с цифровыми именами.

Теги Команд

Текст сообщения (заголовок и тело) отправляется на стандартный ввод (stdin) задачи.

Имя программы может иметь в качестве префикса тег [FILE]:
[FILE] application parameters
При использовании этого префикса стандартный ввод программы будет пустым (закрыт), или будет содержать только поля заголовка сообщения, добавленные в Правилах. Строка -f Queue/field.msg (флаг -f и имя файла Сообщения, относительно к директории данных) будут добавлены в конец параметров программы:
-f Queue/12002345.msg

Обратите внимание: Начало файла Очереди содержит сервисную информацию (конверт, опции и т.д.). Программа должна игнорировать эту информацию, пропустив все данные файла до первой пустой строки. Само сообщение начинается после первой пустой строки в файле Очереди.

Обратите внимание: Поля заголовков, добавляемые к сообщению Общими для Сервера и Общими для Кластера Правилами, не хранятся в файле Очереди, а отправляются задаче через стандартный ввод задачи.

Обратите внимание: этот префикс не должен использоваться на платформе MS Windows, так как Сервер держит файл сообщения открытым, что делает невозможным для внешних Задач чтение из него.

Имя программы может иметь в качестве префикса тег [RETPATH]:
[RETPATH] application parameters
При указании этого префикса, строка "-p", за которой следует адрес return-path сообщения, добавляется в конец параметров программы:
-p address@domain.com

Имя программы может иметь в качестве префикса тег [RCPT]:
[RCPT]application parameters
При указании этого префикса, строка "-r", за которой следует оригинальный адрес получателя сообщения, добавляется в конец параметров программы:
-r address1@domain1.com

Имя программы может иметь в качестве префикса тег [STDERR] (смотрите ниже).

Имя программы может иметь несколько префиксов, и они могут быть указаны в любом порядке. Если указано несколько префиксов [FILE], [RETPATH] и [RCPT], то сначала добавляется флаг -f и его параметры, затем флаг -p и его параметры, а затем флаг -r и его параметры.

Если был указан префикс [STDERR] и внешнее приложение завершило отправку некоторых данных в свой канал стандартного вывода ошибок, то данные из стандартного вывода ошибок используются для формирования текста сообщения об ошибке.


Настройка модуля PIPE

Для того, чтобы настроить параметры PIPE модуля, используйте Веб Интерфейс Администратора. Откройте страницу Почта в области Установки, затем откройте страницу PIPE.

Обработка
Уровень Журнала: Процессоры:

Каталог с Программами:
Ограничение Времени Обработки:
Уровень Журнала
Используйте эту настройку для того, что бы указать, какую информацию модуль PIPE должен сохранять в Журнале работы Сервера. Обычно используется уровень Основное (отчёты о передаче сообщений) или уровень Проблемы (передача сообщений и не фатальные ошибки). В случае, если в работе модуля PIPE возникают проблемы, возможно, целесообразным будет увеличить детализацию до уровня Подробности или Всё: в этом случае в Журнал работы Сервера будет записываться более подробная информация о работе модуля. Когда проблема решена, верните настройку Уровень Журнала в её обычное значение, иначе Системный Журнал будет очень быстро увеличивать свой размер.

Записи, помещённые модулем PIPE в журнал работы Сервера, имеют пометку PIPE .

Процессоры
Эта опция указывает число нитей, используемых для доставки сообщений. Если некоторые из ваших внешних приложений работают медленно, возможно, вы захотите использовать несколько нитей доставки PIPE, так, чтобы несколько сообщений могли обрабатываться одновременно.
Каталог с Программами
Эта опция указывает каталог с приложениями, которые может запускать модуль PIPE. Если в этой опции указана пустая строка, то все сообщения, направляемые в модуль PIPE, отвергаются.
Ограничение Времени Обработки
Эта опция ограничивает время обработки сообщения внешним приложением. Если внешнее приложение не завершило свою работу в течении указанного периода времени, его процесс прерывается и сообщение отвергается.
Отправка
Проверять Каталог раз в:
Проверять Каталог Submitted раз в
Эта опция указывает, как часто PIPE модуль должен сканировать директорию Submitted и доставлять находящиеся там .sub файлы.

Обработка Чужих Очередей

В чрезвычайной ситуации вам может понадобится обработать дополнительную директорию Queue, не останавливая ваш сервер. Такие ситуации могут возникать из-за сбоев в аппаратном обеспечении Сервера, когда восстановленные файлы должны быть обработаны каким-нибудь другим работающим Сервером.

Для обработки дополнительной директории Queue, передвиньте её в директорию данных работающего Сервера как директорию ForeignQueue. Если вы предпочитаете использовать символьные ссылки, то убедитесь, что директории Queue и ForeignQueue находятся на одной файловой системе.

Каждые 3 минуты PIPE модуль проверяет, существует ли в директории данных Сервера директория ForeignQueue. При обнаружении директории ForeignQueue, модуль передвигает все .msg файлы из директории ForeignQueue в директорию Queue (в процессе он может переименовывать файлы), и удаляет все .tmp файлы, найденные в директории ForeignQueue. Файлы с другими расширениями остаются в директории ForeignQueue.

Все передвинутые .msg файлы передаются ядру Сервера в очередь ENQUEUER, и Сервер начинает обрабатывать их так же, как он обрабатывает другие передаваемые сообщения.

Когда процесс сканирования завершён, директория ForeignQueue может быть удалена из директории данных.


Руководство CommuniGate Pro. Copyright © 2020-2023, АО СталкерСофт