| Версия 5.2
Введение
Установка
Администрирование
Сеть
Объекты
Почта
Сигналы
Доступ
Услуги
Справочник
Кластеры
Программы
Разное
Лицензирование
Веб Почта
Pronto!
PBX
Обзор | Правила | Фильтры | SMTP | Local | RPOP | LIST | PIPE
# PIPE Модуль Папка Submitted Доставка во Внешние Приложения Параллельная доставка Теги Команд Конфигурирование модуля 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 используется для Эмуляции Существующей Почты.

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

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 задаётся каталог для внешних программ. Имена приложений, указанные в адресах сообщения не могут включать в себя символ косой черты (`/`) или символы обратной косой черты (`\\`), не могут начинаться с символа точка (`.`) и должны указывать на имя исполняемого файла, находящегося в каталоге для внешних программ.

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

Когда внешнее приложение завершает свою работу, 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 и IBM OS/2, так как Сервер держит файл сообщения открытым, что делает невозможным для внешних Задач чтение из него.

Имя программы может иметь в качестве префикса тег `[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` находятся на одной файловой системе.

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

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

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

Руководство CommuniGate® Pro. Copyright © 1998-2009, Stalker Software, Inc.