Модуль 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
может быть удалена из директории данных.