copyright (c) 1997-1999, Stas Mehanoshin

FIDO:2:5030/143.23, 2:5030/172.9
OopsNet:     135:7000/555.13
email:rampitec@tu.spb.ru

Последнии версии продукта проходят по файловой эхе RU.SFMAIL, а также доступны на серверах:


О программе

BMP предназначен для обработки почты (netmail) и подготовки ее к отправке бинк-совместимым мэйлером.

Основные параметры:

BMP распространяется по принципу Freeware, т.е. свободно. Вы можете использовать его сами или передавать другим лицам, до тех пор, пока это будет делаться с некоммерческими целями, а также при условии, что содержимое архива и программа не будут модифицироваться, и при условии сохранения исходного примечания о правах копирования.

Автор не несет никакой ответственности за деятельность своего детища, используйте его на свой страх и риск. Однако, я буду рад услышать Ваши отзывы и пожелания, а также сообщения о допущенных ошибках.


Командная строка

BMP [/cФайл конфигурации] [/a] [/dПеременная1[=Значение1] [/dПеременная2[=Значение2] ...]] [/pmd] {[Pack]|Send|Get|Poll} [{[Normal]|Crash|Immediate|Direct|Hold}] [{KFS|TFS}] [Адрес[, Адрес...]] [[:]Файл[ !Пароль][, [:]Файл[ !Пароль] ...]]

При запуске BMP без параметра /c, будет произведена попытка найти файл BMP.CFG в каталоге exe-файла и использовать его в качестве файла конфигурации. При использовании опционального параметра /c вместо этого будет использоваться файл, переданный в командной строке.

Ключ /a указывает, что надо игнорировать lastread'ы и произвести полное сканирование почтовых баз.

Ключ /pmd указывает на необходмость создания посметртного дампа. Если происходит вылет по GPF, то укажите этот ключ, а файл bmp*.pmd вместе с остальным шлите мне для диагностики. См. также параметр конфигурации CriticalHandler. При указании ключа /pmd сброс дампа происходит в любом случае по окончании программы.

При помощи ключа /d можно задавать значения переменных. Например: bmp32 /dLine=1 /cmain.cfg /ddummy pack создаст переменную Line со значением 1 и dummy без значения.

Команда Pack используется по умолчанию и не имеет параметров. BMP произведет сканирование и упаковку нетмэйла.

Пример: bmp /cMyConfig.cfg Pack

Команда Send посылает файлы на указанные адреса. Адреса задаются в виде списка через запятую. Файлы - списком через запятую в последнем параметре. Перед списком адресов после слова Send может идти необязательный параметр, указывающий на флавор генеримого аттача. По умолчанию - Norm. Далее может идти необязательный параметр KFS или TFS, т.е. Kill File Send и Truncate File Sent.

Пример: bmp Send Hold KFS 2:5030/172, 2:5030/143 file1, file2

Команда Get используется для создания файловых запросов. Если указан параметр флавора, то создается также полл на указанный адрес. После каждого файла через пробел и символ '!' может идти пароль на запрос. Если указать перед именем файла символ ':', то будет создан запрос на обновление файла (Update request). При этом файлы сперва ищутся по переменной Inbound, а затем по FilePath.

Пример: bmp Get Imm 2:5030/172, 2:5030/143 :xxx.fil !MyPassword, files

Команда Poll используется для создания полла на указанные адреса. Флавор по умолчанию - Norm.

Пример: bmp Poll 2:5030/172

Допускается использование имен файлов с пробелами и прочими "непечатными символами". Их необходимо заключать в кавычки. Например:

bmp /c"Моя Конфигурация" S I 2:5030/172 "Мой файл"

Если необходимо использовать кавычку, то ее надо сдвоить: "file with quota ("")"

Допускается использование неполных команд, команды распознаются по минимальному необходимому контексту. Например: вместо bmp Poll... можно писать bmp Po... или bmp S K... (bmp Send Kfs...).

В списке адресов через запятую недостающие поля берутся из предыдущего адреса в списке. Например:

2:5030/172.9, .0, 10/1, /2 означает: 2:5030/172.9, 2:5030/172, 2:10/1, 2:10/2

В командной строке первый адрес списка должен быть полным, т.к. в момент ее разбора конфигурационный файл еще не известен, а следовательно, не известен и главный адрес.


Файл конфигурации

Файл конфигурации состоит из четырех секций. Секции могут располагаться в любом порядке. BMP сканирует только свои секции файла конфигурации. Секция начинается именем секции, заключенным в квадратные скобки.

Список секций файла конфигурации:

В файле конфигурации допустимы комментарии от символа точки с запятой (;) до конца строки.

В пределах секции допустимо использование сокращений ключевых слов. Они распознаются по минимальному необходимому контексту

Также существует препроцессор конфигурационного файла.


Используемые термины


Адрес

полный 4D адрес системы, либо 3D адрес узла с полем Point=0 по умолчанию.

В адресах допускается использование сокращенной записи. Варианты: 2:5030/172.9 = 5030/172.9 = /172.9 = .9, при условии, что это - основной адрес. Недостающие поля, кроме пойнта, берутся из главного адреса. Исключение составляет командная строка (либо вообще любой список адресов через запятую, который в настоящее время, используется только в командной строке), где недостающие поля берутся из предыдущего адреса в списке.


Маска адреса

Маска адреса используется для задания группы адресов с дикими картами. Допустимые маски адресов проверяются на совпадение следующим образом:

В масках допускаются следующие дикие карты:

Символ

Трансляция

*

Считать совпадение до конца строки

?

Считать совпавшим один символ

#

Совпадение от момента задания до конца поля (зоны, сети, узла, пойнта), т.е. либо до первого символа - не цифры, либо до конца строки

Сравнение происходит со строковым представлением полного 4D адреса. Т.е. адресу 2:5030/172 соответствует строка "2:5030/172.0". Сравнение считается успешным, если строка адреса и маска одновременно исчерпаны и достигнуто точное совпадение.

Строковое представление означает, что не происходит разбор адреса на поля. Такое впечатление может сложиться, если посмотреть на маску #, однако она просто пропускает все цифровые символы. Так, например, совпавшим будет сравнение маски '2:503???7*' и строки '2:5030/172.9'.

Маска # служит для специальных целей, например, чтобы оставить только хосты, чему соответствует маска "#:#/0.0".

В масках допускается сокращенная форма записи. Маски всегда дополняются относительно главного АКА. Сокращены могут быть маски при условии что: первый символ маски '/' или '.'. Тогда из главного АКА дополняются зона, сеть, а для '.' - также нода. Также может быть дополнена зона, если в маске найден символ '/', но не найден ':'. Пример правильно сокращенных масок:

5030/*, /172.2#, .12, .0

Также в качестве маски могут использоваться специальные ключевые слова для сравнения с нодлистом. Если вы этим пользуетесь, то параметр version7 или version7+ секции General должен быть указан. Допустимые ключевые слова:

Маска

Трансляция

CM

узел с флагом CM

Listed

любой узел, указанный в нодлисте

Published

любой узел с известным телефоном

Protected

узел, для которого известен пароль на сэссию. Пароль задается при компиляции индекса V7(+)

KnownTime

система, для которой известно время работы (либо CM, либо имеющая флаг Txy. Информация о флаге Txy присутствует лишь в индексе v7+, для v7 KnownTime эквивалентно CM!

Gate

Проверяемый адрес должен быть описан как гейт. Для исходящих масок (to и via) проверяется имя назначения, а для входящих (from) - имя из поля from. Это должно быть либо имя гейта, определенное параметром Gate для данного адреса, либо имя, содержащее символ '@' (интернетовское имя)

Raw:<RawType>

RawType ноды, т.е. то, что написано в нодлисте непосредственно перед адресом (такие префиксы как Hub, Point, Host, Region, Hold). Для них производится регистронезвисимое сравнение с маской.

Следует помнить, что FastList не включает системы с RawType Down в индекс. Анализ RawType возможен только при наличии индекса версии V7+.

По умолчанию сравнение производится с адресом назначения письма (to). Если необходимо наложить условие на адрес отправителя (from) то перед маской следует написать символ минус ('-'). Например: -2:5030/*. При желании наложить ограничение на адрес, через который маршрутеризуется почта (route via), перед маской пишется символ '^'. Например: ^2:5030/*. Этот адрес совпадает с адресом назначения, если почта будет упакована напрямую.

Данные символы являются частью маски! Логические условия, описанные ниже, должны быть применены ко всей маске целиком. Например, правильным будет написание !-2:5030/*, а не -!2:5030/*.

После этого символа может идти модификатор адреса в квадратных скобках. Возможные модификаторы:

[Boss]В этом случае поле пойнта адреса, с которым просиходит сравнение, будет обнуляться. Т.е. для пойнта вы получите его босса, а остальные адреса будут неизменны.
[Hub]Адрес подменяется адресом его хаба. Также этим модификатором обозначается хост сети/региона/зоны для системы, живущей не под хабом, а под хостом/регионом/зоной.
[Host]У адреса обнуляются поля пойнта и ноды.

Например -[Boss]Listed означает, что система, от которой исходит письмо прописана в нодисте, если это нода, либо имеет прописанного в листе босса, если это поинт. Без '[Boss]' такой поинт не прошел бы тест. С другой стороны, если поинт присутствует в поинтлисте, но его босс отсутствует в нодлисте, то сравнение будет неуспешным.


Сложная маска

Сложная маска может состоять из нескольких простых масок и представляет собой логическое выражение. Между отдельными частями маски может быть использован символ '&', либо '+' для их связи условием 'и'. Символ ',' или '|' задает условие 'или'. Перед отдельной частью маски может быть использован символ '!' для указания отрицания условия. Приоритеты операций соответствуют тем, что приняты в формальной логике, т.е. в порядке убывания: "не" (!), "и" (&), "или" (|). Условия могут группироваться при помощи скобок. Например:

!2:*

Любые адреса не во 2-ой зоне,

!2:5030/* & !135:*

Любые адреса не в зоне 135 и не в сети 2:5030

(2:5030/#+!Raw:Hold+CM, Protected + (CM|2:5030/143.*)) & -Listed

Все ноды сети 2:5030, которые не в холде и работают CM, либо любая система со статусом Protected, которая либо CM, либо /143.*. Но при этом адрес отправителя должен присутствовать в нодлисте.

Вы можете использовать прилагаемую программу TestMask для тестирования сложных масок. Синтаксис таков:

TestMask <адрес отправителя> <адрес назначения> <адрес маршрутеризации> <сложная маска>

Например:

TestMask 2:5030/172.9 2:5030/82 2:5030/172 -Raw:Point & ^2:*

Для операций с нодлистом в текущем каталоге должен быть файл bmp.cfg с описанием version7(+). TestMask не поддерживает препроцессор.

NB: При работе под 4dos и Cmd помните, что символы, используемые в маске могут быть задействованы как специальные символы командного процессора. Вы можете пользоваться символом '+' вместо '&' и ',' вместо '|'. Для использования остальных символов либо прочтите документацию на свой командный процессор, либо воспользуйтесь command.com.


Флаги

задают флаги данного письма. Допустимы C для Crash, D для Direct, I для Immediate и F,N или O для Normal. Например, CDI обозначает Crash или Direct или Immediate. Для задания пустого списка укажите символ минус (-)


Представление числовых констант

В некоторых командах (там, где это имеет смысл) вместо десятичного представления числа может использоваться шестнадцатеричное, восьмеричное или двоичное. Форма записи, соответственно, числа 16:

0x10 - шестнадцатеричное представление

020 - восьмеричное

0x10000 - двоичное


Строковые константы

Параметры, представляюще собой строки, в которых могут присутствовать пробелы и прочие "неправильные" символы, необходимо заключать в кавычки. При необходимости использования кавычек в параметре их надо сдвоить. Это касается имен файлов, а также аргументов команд, где используются строковые параметры. Аргументы команд FilePath и Inbound обязательно надо заковычить, если в нем присутствует точка с запятой, чтобы она не была воспринята, как начало коментария. Например:

"Имя файла с пробелом. ""И с кавычкой в расширении"""


Препроцессор файла конфигурации


Переменные

В конфигурационном файле могут использоваться подстановки. Строка, заключенная в знаки '%' будет заменена на соответсвующую ей переменную среды. Например: %PATH%. Для ввода символа '%' используйте "%%".

Есть несколько предопределенных переменных:

BMP_OS - операционная система, под которую собран BMP.

Значения: DOS, WIN, OS2.

BMP_COMMAND - команда, с которой запущен BMP.

Значения: PACK, POLL, SEND, GET.

BMP_DIR - каталог BMP (без концевого слэша).

BMP_CFG_DIR - каталог конфигурационного файла BMP.


#define

Переменные также могут быть определены директивой

#define имя-переменной значение

либо при помощи ключа /d из командной строки. Они имеют приоритет перед переменными среды.


#undef

Переменные, созданные при помощи директивы #define или ключа /d могут быть освобождены директивой

#undef имя-переменной

открывая при этом соотвествующую переменную среды.


#ifdef
#ifndef

Директива #ifdef позволяет интерпретировать часть файла конфигурации в зависимости от того, определена ли указанная переменная. Блок исполняется, если указанная переменная существует. Директива #ifndef определяет обратное условие. Блок должен быть закрыт директивой #endif. Допустимо использование конструкции #else.

#ifdef имя-переменной

команда-1

команда-2

#else

команда-3

команда-4

#endif


#ifeq
#ifneq

Директива #ifeq позволяет интерпретировать часть файла конфигурации в зависимости от того, равна ли правая строка левой. Блок исполняется, если имеет место равенство. При использовании #ifneq используется обратное условие. Блок должен быть закрыт директивой #endif. Допустимо использование конструкции #else.

#ifeq строка-1 строка-2

команда-1

команда-2

#else

команда-3

команда-4

#endif

Например:

#ifeq [%VAR%] [True]

#endif

блок будет исполнен только если переменная VAR имеет значение True. Все сравнения производятся регистро-независимо.


#include

Директива

#include имя_файла

включит файл с указанным именем в разбор конфигурации.


Команда Echo

Echo ["]<строка>["]

Комада Echo является специальной и допустима в любой секции, но должна находится в какой-либо секции. Echo выводит свой параметр на экран, а если к этому моенту уже определен лог-файл - и в лог. Например:

echo "Running under %BMP_OS%"


Секция общих настроек General


Address

Директива Address служит для задания списка Ваших AKA. Первая из них - основное AKA.

Пример:

Address 2:5030/172.9

Address 2:5030/143.23

Address 135:7000/555.13

Address .50 ; 2:5030/172.50 - относительно главного АКА


ANSIflo

Пользователям Аргуса посящается: укажите это ключевое слово для перекодировки содержимого ?lo из OEM в ANSI. Этот параметр существует только в Win32-версии.

#ifeq %bmp_os% win

ANSIflo

#endif


ArqTemplate

ArqTemplate ["]<имя файла>["]

Задает имя файла-шаблона для создания подтверждений на флаг Arq. Если не указана, то ответ не создается. См. также TemplatePath, Шаблоны.

ArqTemplate audit.tpl


BusyCheck

Директива BusyCheck {All|Bsy|None} используется для управления процессом определения занятости данного адреса. Значение All указывает, что надо обрабатывать все флаги, расширение которых подпадает под маску ?sy, либо cs#, где # - номер линии от 0 до 9. Это значение по умолчанию. Значение Bsy указывает, что следует обращать внимание только на флаги bsy. Значение None определяет, что обрабатывать флаги занятости вообще не надо (при этом они не будут проверяться и выставляться).

Используйте этот параметр на свой страх и риск!

BusyCheck All


BusyFlag

Директива BusyFlag задает имя флаг-файла, указывающего на то, что другая копия BMP уже загружена. По умолчанию bmp.bsy в том каталоге, где находится сам BMP. Этот флаг не может "залипнуть" - bmp держит его открытым до окончания процесса, а перед созданием пытается удалить. Если он залочен - значит другой BMP работает.

BusyFlag "\\Сервер\шара\флаги\BMP %line%.BSY"

Под Win32 п/у создается не файл, а мэйлслот с именем \\.\mailslot\bmp.bsy. Если имя, указанное в параметре является валидным именем IPC-мэйлслота, то он создается. Иначе используется файловый семафор. Это позволяет установить семафор в сети, не имея файлового шаринга или привелегий для него.

Правильным именем мэйлслота является: (mailslot - обязательная часть имени)

\\.\mailslot\name

- локальный хост

\\computername\mailslot\name

- сервер

\\domainname\mailslot\name

- разделяется домэйном

\\*\mailslot\name

- разделяется праймари-домэйном

Например:

BusyFlag \\.\mailslot\bmp%line%.bsy

Под OS/2 в качестве busyflag'а п/у создается очередь с именем \QUEUES\bmp.bsy. Если имя, указанное в параметре является валидным именем IPC-очереди, то создается очередь. Иначе используется файловый семафор. Имя очереди должно начинаться с префикса \QUEUES\.

Например:

BusyFlag \QUEUES\bmp%line%.bsy


CriticalHandler

П/у bmp не занимается отловом GPF, оставляя это на откуп ОС. Если данное слово указано, то access violation будет перехватываться bmp. Действие bmp в этом случае - сброс посмертного дампа и уход с errorlevel 255. Используйте с осторожностью. При указании ключа /pmd сброс дампа происходит в любом случае по окончании программы.

CriticalHandler


FilePath

Директива FilePath указывает, где искать файлы для аттачей, если явно не задан путь. Если после отдельного каталога стоит троеточие, это означает, что искать надо в указанном каталоге и рекурсивно от него. В любом случае файл сперва ищется в текущем каталоге. Данная переменная не используется для транзитных аттачей! См. также Inbound.

Эта переменная также задает путь для поиска файлов при запросах на обновление (Update Request). При этом Inbound имеет приоритет.

Например, указанная команда будет искать файлы в текущем, каталоге C:\MAIL\INBOUND, в C:\MAIL\FILEECHO и всех его подкаталогах, в C:\ZIP\IMAGE и его подкаталогах:

FilePath "C:\MAIL\INBOUND;C:\MAIL\FILEECHO...;C:\ZIP\IMAGE..."


FileWaitDays

FileWaitDays число

Задает количество дней, которые BMP ждет до отправки письма, если хотя бы один приаттаченный к нему файл не найден. Ожидание отсчитывается от даты прибытия письма (arrived). В течении этого времени письмо будет пропускаться при сканировании либо до истечения срока, и будет отправлено как есть, либо до прихода всех файлов. П/у 0, т.е. ожидания нет.

Если Вы используете ластриды, то в следующий раз такое письмо будет проверено только при полном пересканировании базы (минимум - раз в сутки).

Например, ждать два дня:

FileWaitDays 2


Gate

Gate <адрес> {["]<Имя гейта>["]|*} {["]<Имя пользователя>["]|[*]}

Задает адрес и имя гейта в инет. Также можно указать имя пользователя (from). Если эти имена не нужны, то вместо них можно указать *. Письма, идущие на этот адрес, проверяются на наличие в toname символа '@', и, если он найден, имя получателя меняется на имя гейта, если задано, а в тело письма вставляется инетовский кладж 'To:' с именем получателя. Если указано имя пользователя, и письмо локальное, то это имя пишется в поле from. Может быть указано несколько гейтов.

Gate 2:5030/172 UUCP *

Gate 2:1/2 * "Email User"

Gate 1:1/1 "Some Internet gate"


HoldAsUnlisted

Директива HoldAsUnlisted предписывает считать, что системы со статусом Hold и Down являются Unlisted. Требует индекса V7+.

HoldAsUnlisted


Inbound

Переменная Inbound задает пути для входных каталогов мэйлера. Синтаксис аналогичен FilePath. Здесь ищутся файлы, в независимости от того, был ли указан полный путь, для транзитных аттачей через наш узел.

Эта переменная также задает путь для поиска файлов при запросах на обновление (Update Request). При этом Inbound имеет приоритет перед FilePath.

Inbound "C:\MAIL\INBOUND..."


KillIntransitFile

Директива KillInTransitFile будет посылать файлы, идущие транзитом через наш узел, всегда как KFS, т.е. убивать после отправки. По умолчанию запрещено.

KillInTransitFile


KillInTransitMail

Директива KillInTransitMail, если указана, заставляет BMP убивать транзитные письма после запаковки, вне зависимости от наличия флага K/S. По умолчанию это не так.

KillInTransitMail


Lastread

lastread смещение

Смещение в файле lastread (либо номер пользователя). Если указано, то сканирование происходит, начиная с последнего уже отсканированного письма. Раз в день происходит полное принудительное пересканирование.

Также полное пересканирование приоисходит при задании ключа /a командной строки.

lastread 5


LogFile

Переменная LogFile задает имя файла протокола с путем. По умолчанию лог не ведется.

LogFile bmp.log


LogLevel

Переменная LogLevel задает Уровень протоколирования. Сообщения имеют префикс по степени важности. '!' обозначает ошибки. Вы можете управлять уровнем протоколирования, задав значение данной переменной. Значение получается сложением значений, приведенных ниже. В лог-файл попадут только те сообщения, уровень которых присутствует в маске. Значение п/у - 63, т.е. в протокол попадут все сообщения.

1 = !

2 = ! *

4 = ! * +

8 = ! * +

16 = ! * + : #

32 = ! * + : # пробел

Пример:

LogLevel 47

LogLevel 0x2F

В протокол попадут только сообщения с пробелом и все, выше, но не включая '#' (47=15+32).


LoopCheck

LoopCheck счетчик шаблон

Задает шаблон письма-сообщения о зацикливании роутинга и счетчик петель, после которого роутинг будет отвергнут и будет послано такое письмо. П/у счетчик 0, т.е. проверка запрещена.

Например:

LoopCheck 2 loop.tpl

После второй петли (на третий раз) слать обрато письмо по шаблону loop.tpl


MailerRescan

MailerRescan путь\файл

Задает путь и имя файла, служащего семафором мэйлера для пересканирования очереди. По умолчанию отсутсвует.


MaxMsgs

Директива MaxMsgs задает максимальное количество писем, которое разрешается упаковывать за один запуск BMP. По умолчанию упаковываются все письма.

MaxMsgs 40


MisFileTemplate

MisFileTemplate шаблон

Задает шаблон письма-уведомления о том, что один или несколько файлов при письме не были найдены. П/у такое уведомление не посылается.

MisFileTemplate misatth.tpl


MsgExtent

MsgExtent xxx

xxx - предельный размер письма в байтах, которое может быть запаковано в ?ut. Письма, превышающие этот размер будут упакованы по одному письму на пакет и посланы как аттач (это не означает, что они будут архивироваться - удаленная сторона будет считать их нетмэйлом).


MsgReadOnly

Параметр MsgReadOnly - отладочный. Если он указан, то письма не будут удаляться и модифицироваться.

MsgReadOnly


NewMsgFlag

NewMsgFlag путь\файл

Задает флаг, выставляемый BMP в случае создания нового письма в почтовой базе.


Outbound

Переменная Outbound служит для задания вашего выходного каталога бинк-моды без расширения.

Outbound PATH\OUTBOUND


PacketNames

PacketNames {Radix16|Sequential}

Указывает, какие имена пакетов создавать. П/у Radix16, т.е. создавать имена пакетов в 16-ричной системе счисления (например, ee8a2ce8.pkt) на основе системного времени. Значение Sequential указывает генерить пакеты с именами, возрастающими по порядку. Например: 00000001.pkt, 00000002.pkt. Крайне не рекомендуется, т.к. сильно увеличивает вероятность пакетных дупов.

PacketNames Radix16


PacketPath

Задает каталог, где будут создаваться pkt-файлы. П/у они создаются там же, куда попали бы соответствующие ?ut-файлы.

PacketPath c:\mail\pkts


PacketType

Указывает, какие пакеты создавать. Значения: п/у 2+ или FSC-0048. Если пакет отправлен пойнтом, то в сеть отправителя пишется -1. К сожалению, не все программы корректно обрабатывают эту ситуацию. Значение FSC-0039 задает тип пакета 2+ с истинным OrigNet. Это может ввести в заблуждение системы StoneAge, которые будут думать, что пакет исходит от босса, а не от пойнта. Значение 2.0 или FTS-0001 указывает генерить пакеты типа 2.0.

PacketType FSC-0039


PackIfEmpty

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

PackIfEmpty


RobotName

Директива RobotName задает имена роботов - письма этим роботам будут паковаться даже при пустом теле письма.

RobotName sqafix

RobotName allfix

RobotName "Strange Robot"


RouteHold

Укажите RouteHold, если Вы хотите, чтобы письма с аттрибутом холд паковались как hut, но по роутингу. П/у холд не роутится.

RouteHold


StorageFile

StorageFile задает имя файла, где bmp будет хранить данные для сохранения между запусками. П/у bmp.dat в каталоге bmp, а под Win - в HKLM\Software\BMP\$Version.

StorageFile bmp.dta


TemplatePath ["]<каталог>["]

Задает каталог, в котором будут искаться шаблоны для создаваемых BMP писем. П/у пусто. Имена шаблонов не должны включать в себя путь при указании этого параметра. В противном случае рекомендуется указывать полный путь к каждому шаблону. Имя конкретного шаблона получается слиянием каталога из данного параметра и собственно имени. См. также описание шаблонов в данной документации.

TemplatePath "%BMP_DIR%\Template"


TZ

Переменная TZ задает смещение часового пояса к западу от Гринвича. Данное значение может быть задано средствами ОС (для DOS - переменная TZ). Значение из файла конфигурации перекрывает установку ОС. Значение в файле конфигурации аналогично по формату переменной DOS. Для перекрытия устаноки DOS в блоке env должно быть достаточно памяти для размещения переменной TZ.

Значение для Московского времени:

TZ "MSK-3MSD,M3.5.0/02:00,M10.5.0/02:00"

Ньюфаундлендское время 3 и 1/2 часа к западу от UTC:

TZ NST3:30NDT1:30

Формат строки для установки переменной окружения DOS TZ:

      stdoffset[dst[offset][,start[/time],end[/time]]]

Поля в этой строке имеют следующее значение:

      std, dst

три или более символов, описывающих название временной зоны для стандартного (std) и летнего (dst) времени. Hеобходимым является только std. Если dst отсутствует, переход на летнее время не будет учитываться.

Допустимо использование любых символов любого регистра за исключением двоеточия (:), цифр, запятой (,), символов плюс (+) и минус (-), а также символа ASCII NUL (\0).

      offset

Значение, которое необходимо добавить к локальному времени, чтобы получить UTC. Указывается в следующей форме:

      hh[:mm[:ss]]

Минуты (mm) и секунды (ss) указывать не обязательно. Часы (hh) обязательны и могут содержать одну или две цифры.

Обязательно указание смещения после std. Если смещение после dst не указано, то подразумевается один час вперед от std.

Offset будет интерпретировано как десятичное число. Часы могут принимать значение от 0 до 24, минуты и секунды (если указаны) - от 0 до 59.

Для временных зон восточнее нулевого мередиана смещение указывается со знаком "-", западнее - может использоваться, подразумеваемый по умолчанию знак "+"

Далее описывается когда осуществляется перевод времени на летнее и обратно в следующей форме:

      date/time,date/time

первая пара дата/время описывает момент перехода на летнее время, вторая - момент перехода обратно на стандартное.

Формат поля date может задаваться одним из следующих способов:

    Jn

День года по Юлианскому календарю (1 <= n <= 365). При этом дополнительны день високосного года не учитывается. Иными словами, в любой год, включая високосные, 28-е февраля будет 59-м днем, а 1-е марта - 60-м. В этом способе невозможно задать 29-е февраля високосного года.

    n

День года (0 <= n <= 365). Високосные годы учитываются и в этом способе возможно указать 29-е февраля високосного года.

    Mm.n.d

Дата представляется как d-й день (0 <= d <= 6, 0 - воскресенье) недели n месяца m (1 <= n <= 5, 1 <= m <= 12, где 5-я неделя означает "последний день d месяца m" который может наступить как на 4-й, так и на 5-й неделе). 1-я неделя означает первую неделю, в которой наступит день d в данном месяце (иными словами, 1-й день d месяца).

Поле time задается в том же формате, что и в поле offset за исключением того, что запрещено использование знака ("+" или "-"). По умолчанию, если время не указано, подразумевается 02:00:00.

Пример:

Для Москвы смещение относительно UTC зимой составляет -3 часа, летом - -4. Переход с зимнего на летнее время осуществляется в последнее воскресенье марта, в 2 часа ночи, а обратный переход в последнее воскресенье октября, в 2 часа ночи. Строка установки переменной окружения DOS TZ в этом случае будет выглядеть следующим образом:

SET TZ=MSK-3MSD-4,M3.5.0/02:00:00,M10.5.0/02:00:00


Version7
Version7+

Директивы Version7 и Version7+, соотвественно, задают путь к индексу нодлиста формата V7 или V7+. П/у нодлист не используется. Указанный каталог должен содержать файлы nodex.* индекса V7.

Для построения индекса Вы можете использовать программу FastList, написанную Alberto Pasquale.

Version7 C:\MAIL\NODELIST

Version7+ C:\MAIL\NODELIST


Секция почтовых баз Netmail

В этой секции задается список почтовых баз netmail'а. Сперва указывается имя файла/каталога базы. Имена файлов указываются без расширения. После имени следуют флаги. Поддерживается флаг $ для задания формата Squish и ! для Jam. По умолчанию используется формат FIDO

Пример:

netmail

netmail\base -$

netmail\crazy -!


Секция маршрутизации Routing

Секция роутинга задает правила маршрутизации почты. Правила сканируются сверху-вниз, до первого подходящего. Различаются команды маршрутизации почты (нетмэйла), файловых запросов и файлов (аттачей). Команды, относящиеся к роутингу нетмэйла, оканчиваются словом Mail, файлов - Files, запросов - Freqs. Правил маршрутизации по умолчанию не существует.


Direct-Mail сложная маска
Direct-Files сложная маска
Direct-Freqs сложная маска

на эти адреса почта (файлы, запросы) будут паковаться напрямую


Route-Mail {адрес|Host|Hub|Boss} сложная маска
Route-Files {адрес|Host|Hub|Boss} сложная маска
Route-Freqs {адрес|Host|Hub|Boss} сложная маска

данное правило отправит почту, удовлетворяющую 'сложной маске' через 'адрес', либо на хост сети (Host), либо (Hub) на хаб ноды (или хаб босса пойнта), либо на босса (Boss) пойнта (если не поинт - директом). Для хаб-роутинга должен быть подключен нодлист.

Также Hub означает хост сети/региона/зоны для системы, живущей не под хабом, а под хостом/регионом/зоной.


Kill-Mail сложная маска
Kill-Files сложная маска
Kill-Freqs сложная маска

Подпадающие под это правило письма будут отосланы в /dev/nul. Это не касается локальных писем с аттрибутами Dir и Hold (представляется крайне сомнительным, чтобы это кому-то было надо). Адрес via (^) в этом случае лишен смысла и совпадает с адресом to письма. С приаттаченными файлами будет поступлено по закону гор, т.е. так, как если бы письмо было действительно послано, с некоторыми исключениями: флаг TFS считается равным флагу KFS и поиск файлов осуществляется только по пути Inbound, но не по FilePath. Файлы при локальных письмах при этом не убиваются никогда.


Bounce-Mail шаблон сложная маска
Bounce-Files шаблон сложная маска
Bounce-Freqs шаблон сложная маска

Тоже, что и kill, но будет создано письмо-отлуп по указанному шаблону. Письмо будет либо отослано отправителю исходного письма, либо сохранено в сканируемой почтовой базе, если исходное письмо - локальное. См. также TemplatePath.


Complain-Mail шаблон {адрес|Host|Hub|Boss} сложная маска
Complain-Files шаблон {адрес|Host|Hub|Boss} сложная маска
Complain-Freqs шаблон {адрес|Host|Hub|Boss} сложная маска

Аналогично bounce, но письмо-отлуп будет отправлено на адрес, задаваемый вторым параметром. При этом, если используются Host/Hub/Boss, то имеется в виду соотвестующий узел не для адреса назначения письма, а для адреса отправителя, т.к. считается, что письмо заворачивается в обратном направлении. Например:

Complain-Files pntfiles.tpl Boss -2:5020/#.#

отправит боссу пойнта, шлющего на нас файлы, комплэйн.

Адресом via (^) в данном случае будет адрес назначения комплэйна.


Freq-Flavour флаги сложная маска

регулирует генерацию поллов при создании файлового запроса. При создании файлового запроса, удовлетворяющего 'сложной маске', будут созданы только поллы с флаворами, перечисленными в параметре 'флаги'. При отсутствии подходящего правила будут созданы все поллы. Для отмены всех поллов надо указать значение первого параметра "-". Данное правило относится только к не-транзитным фрекам.

Например:

Freq-Flavour CI ^*

разрешит создание только Imm и Crash поллов.

Freq-Flavour - *

отменит все поллы для файловых запросов.


Flavour-kludge {флаги|*} флаг сложная маска

позволяет запретить генерацию почты и аттачей с указанными первым параметром флаворами. Если первый параметр '*' - то запрещаются любые флаворы. Когда необходимо создать ?ut или ?lo с указанным аттрибутом, и письмо удовлетворяет 'сложной маске', то вместо него используется флаг. Таким образом можно, например, захолдить любую почту на адреса не в своей сети:

Flavour-kludge * H !^2:5030/*


CanRouteIf[!] сложная маска

После того, как найдено подходящее условие роутинга для письма, проверяются все указанные CanRouteIf. Если все условия всех этих команд выполняются, то роутинг принимается. Если нет, то роутинг отвергается. Если команда, отвергшая роутинг, использована в форме в восклицательным знаком, то дальнейших попыток найти подходящее правило роутинга не производится и выдается сообщение о невозможности отправки письма ("constraint prevents msg from beeing routed...").

Так, например, можно запретить слать почту на узлы Hold и Unlisted:

CanRouteIf !^Raw:Hold & ^Listed

или запретить обрабатывать почту от адресов из зоны 999:

CanRouteIf! !-999:*


Encode-Files [{UUE|XXE|B64}] [/Split=<размер>] <сложная маска>

Позволяет превращать файловые аттачи в закодированные UUE/XX/Base64 пакеты и отсылать в таком виде. Опицонально задается размер распиловки письма, п/у принимается MsgExtent. В маске адресов - все как обычно. Роутинг файлов на указанные узлы должен быть разрешен. Сгенеренные письма, хотя и не являются более аттачами в прямом смысле слова, уйдут по роутингу файлов.

Файлы с KFS/TFS убиваются сразу после кодирвания!


Пример секции роутинга:

Данный пример лишь показывает, как можно использовать команды роутинга, но ни в коем случае не претендует на некий реальный роутинг.

Слать почту на эти адреса напрямую:

Direct-Mail /143, /172

Direct-Mail .2#

На узлы (но не пойнты) CM в сети 2:5030, а также на любые узлы с парольными линками и известным временем работы, при условии, что известны телефоны и они не в холде звонить директом:

Direct-Mail (5030/* & !Raw:Point & CM, Protected & KnownTime) & !Raw:Hold & Published

Нижеследующий кусок из трех команд описывает роутинг, при котором почта для узлов в пределах 2:5030 заворачивается на их хабов, почта для пойнтов - на их боссов, если только босс не в холде, а вся остальная - на хост сети.

; Route-Mail Hub /#

; Route-Mail Boss /#.* & !^Raw:Hold

; Route-Mail /0 *

Список адресов на которые будет рутится почта через /143:

Route-Mail /143 /172.50, 135:*, 2:5030/143.*, 2:5030/142.*

Список адресов на которые будет рутится почта через /172:

Route-Mail 2:5030/172 .*

Подхабник /6 рутится на своего хаба:

Route-Mail Hub [Hub]/6

Список наших AKA и адресов даунлинков, с которых почта будет отдаваться соответствующим аплинкам:

Route-Mail 2:5030/143 -2:5030/143.23,-135:7000/555.*

Route-Mail 2:5030/172 -2:5030/172.9

Боунсить всю почту в зону 666:

Bounce-Mail bounce.tpl 666:*

Остальную почту рутить через /172

Route-Mail 2:5030/172 *

Слать файлы для /172.* через /172:

Route-Files 2:5030/172 2:5030/172.*

Файлы через /143:

Route-Files 2:5030/143 2:5030/143.*,135:7000/555.*

Отправлять файлы директом во 2-ю и 3-ю зоны, если адреса назначения известны:

Direct-Files (2:*, 3:*) & Listed

Для неотправленных на предыдущем шаге, на случай, если это пойнты, зарутить их файлы через их боссов, если те определены в нодлисте:

Route-Files Boss (2:*, 3:*) & [Boss]Listed

Файлы в прочие зоны не отдавать.

А в зону 667 аттачи убивать:

Kill-Files 667:*

Превращять аттачи в не свои сети, для систем с неизвестными телефонами или временем работы в закодированные в XXE письма и пилить примерно по 30000 байт

Encode-Files XX /Split=30000 (!5030/* & !135:7000/*) | !Published | !KnownTime

Аттачи, идущие на гейты, кодировать в Base64 и пилить по 256000.

Encode-Files B64 /Split:256000 gate

Аттачи, идущие на /143, кодировать в UUE и пилить по <msgextent>.

Encode-Files UU /143

Прямые запросы к узлам нашей сети:

Direct-Freqs 2:5030/*

Остальные слать на /200:

Route-Freqs 2:5030/200 *

Для файловых запросов с /172.1 и /143.20 разрешить генерацию поллов по полной программе:

Freq-Flavour ICDF -2:5030/172.1, -2:5030/143.20

Во второую зону разрешить только Imm и Crash поллы по файловым запросам:

Freq-Flavour IC ^2:*

Для остальных поллов не создавать вообще:

Freq-Flavour - *

Для /172 вместо любых аттрибутов использовать Direct:

Flavour-kludge * D ^2:5030/172

Для сети 2:5030/* и зоны 135 запретить Imm, Crsh и Dir, заменяя их на Normal:

Flavour-kludge IDC N ^2:5030/*, ^135:*

Для всех, кроме зоны 135 и сети 2:5030, вместо любых аттрибутов использовать Hold:

Flavour-kludge * H !^135:* & !^2:5030/*

Запретить роутить почту через системы в холде:

CanRouteIf !^Raw:Hold


Секция паролей Passwords

Необязательная секция, в которой задаются пароли пакетов для линков. Формат:

адрес пароль

Пример:

2:5030/172 cumran

2:5030/143 sophia


Шаблоны

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

В теле шаблона могут использоваться переменные, подставляемые при создании письма. Вот список этих переменных:

%PID- короткий идентификатор BMP
%LONGPID- длинный идентификатор BMP
%ATTR- аттрибуты оригинального письма
%BODY- отквоченное с кладжами тело оригинального письма
%DATE- дата оригинального письма
%SIZE- размер в байтах оригинального письма
%SUBJ- тема оригинального письма
%ODEST- адрес получателя оригинального письма (orig destination)
%OFFROM- первое имя отправителя оригинального письма (orig first from)
%OFROM- полное имя отправителя оригинального письма (orig from)
%OFTO- первое имя получателя оригинального письма (orig first to)
%OLFROM- последнее имя отправителя оригинального письма (orig last from)
%OLTO- последнее имя получателя оригинального письма (orig last to)
%OORIG- адрес отправителя оригинально письма (orig origin)
%OTO- полное имя получателя оригинального письма (orig to)
%TDEST- адрес получателя создаваемого письма (this destination)
%TFFROM- первое имя отправителя создаваемого письма (this first from)
%TFROM- полное имя отправителя создаваемого письма (this from)
%TFTO- первое имя получателя создаваемого письма (this first to)
%TLFROM- последнее имя отправителя создаваемого письма (this last from)
%TLTO- последнее имя получателя создаваемого письма (this last to)
%TORIG- адрес отправителя создаваемого письма (this origin)
%TTO- полное имя получателя создаваемого письма (this to)
%VIA- адрес, через который было запаковано оригинальное письмо (если имеет место быть)
%MISATTH- список ненайденых файлов при письме во время создания уведомления о ненайденных аттачах (MisFileTemplate)
%_???- ??? - одна из перечисленных выше переменных, обозначающая адрес или имя. Задает фиксированную ширину поля. Для имен 36 символов, для адресов - 23.

Например, вот возможный вариант темплета для ARQ:

Dear %tfto!
Your message was packed via %via
Original message:
* from : %ofrom (%oorig)
* to   : %oto (%odest)
* subj : %subj
* date : %date
* attr : %attr
%body
Forever with You,
       /%longpid at %torig

Торговые марки