copyright (c) 1997-2001, Stas Mehanoshin
FIDO: | 2:5030/172.9 |
email: | rampitec@tu.spb.ru |
Последние версии продукта проходят по файловой эхе RU.SFMAIL, а также доступны на серверах:
BMP предназначен для обработки почты (netmail) и подготовки ее к отправке бинк-совместимым мэйлером.
Основные параметры:
BMP распространяется по принципу Freeware, т.е. свободно. Вы можете использовать его сами или передавать другим лицам, до тех пор, пока это будет делаться с некоммерческими целями, а также при условии, что содержимое архива и программа не будут модифицироваться, и при условии сохранения исходного примечания о правах копирования.
Автор не несет никакой ответственности за деятельность своего детища, используйте его на свой страх и риск. Однако, я буду рад услышать Ваши отзывы и пожелания, а также сообщения о допущенных ошибках.
BMP [/cФайл конфигурации] [/pmd] [/dПеременная1[=Значение1] [/dПеременная2[=Значение2] ...]]
{
[/a] [/r] [PAck [["]сложная маска["]]] |
POll [<Флавор>] <Адреса> |
Send [<Флавор>] [{Kfs|Tfs}] [Msg] [Box] <Адреса> <Файлы> |
Get [<Флавор>] [Msg] <Адреса> <Файловые запросы> |
Repack [["]сложная маска["]]
Unpack [Keep] [["]сложная маска["]]
}
<Флавор> | ::== | {[Normal]|Crash|Immediate|Direct|Hold} |
<Адреса> | ::== | Адрес[, Адрес...] |
<Файлы> | ::== | Файл [, Файл ...] |
<Файловые запросы> | ::== | [:]Файл[ !Пароль] [, [:]Файл[ !Пароль] ...] |
При запуске BMP без параметра /c, будет произведена попытка найти файл BMP.CFG в каталоге exe-файла и использовать его в качестве файла конфигурации. При использовании опционального параметра /c вместо этого будет использоваться файл, переданный в командной строке.
Ключ /pmd указывает на необходмость создания посметртного дампа. Если происходит вылет по GPF, то укажите этот ключ, а файл bmp*.pmd вместе с остальным шлите мне для диагностики. См. также параметр конфигурации CriticalHandler. При указании ключа /pmd сброс дампа происходит в любом случае по окончании программы.
При помощи ключа /d можно задавать значения переменных. Например: bmp32 /dLine=1 /cmain.cfg /ddummy pack создаст переменную Line со значением 1 и dummy без значения.
Там, где требуются имена файлов с пробелами и прочими "непечатными символами" их необходимо заключать в кавычки. Например:
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
В командной строке первый адрес списка должен быть полным, т.к. в момент ее разбора конфигурационный файл еще не известен, а следовательно, не известен и главный адрес.
Допускается также использование респонс-файлов. Перед именем такого файла поставьте символ '$' или '@'. Содержимое файла будет подставлено в командную строку. При этом, в случае с '$' каждая строка в файле при подстановке будет отделяться от соседних строк запятой (списки нод и файлов), а в случае использования '@' - пробелом. При необходимости использования этих символов буквально, заключайте в кавчки имена, их содержащие.
Например, пусть файл names.lst содержит строки:
file1 file2 file3
файл nodes.lst:
2:5030/172 /143
и файл command todo.rsp:
get imm
Тогда команда
bmp @todo.rsp $nodes.lst $names.lst, "$file"
будет эквивалентна:
bmp get imm 2:5030/172, /143 file1, file2, file3, "$file"
Команда Pack используется по умолчанию и не имеет параметров. BMP произведет сканирование и упаковку нетмэйла.
Ключ /a указывает, что надо игнорировать lastread'ы и произвести полное сканирование почтовых баз.
Ключ /r разрешает перепаковку ранее упакованной почты перед упаковкой основного нетмэйла в процессе обработки команды Pack. Более подробно см. описание команды Repack.
Пример: bmp /cMyConfig.cfg Pack
После слова Pack может быть указана маска адресов. Упаковка будет совершена только для тех писем, которые удовлетворят этой маске. Например:
bmp /a pack "^KnownTime & ^Published & 2:*"
Т.е. упаковать только письма, которые пойдут через паблишед узел с известным временем работы и адресоваеы во вторую зону. Помните, что символы ^, | и & могут восприниматься вашим командным процессором как специальные символы-разделители команд (и скорее всего так оно и есть). Заключайте всю маску в кавычки в этом случае. Также помните, что вместо амперсанда можно использовать плюс, а вместо пайпа - запятую.
При упаковке писем с указанной маской адресов bmp не запоминает lastread'ы, т.к. возможно, упакованы будут не все письма, которые могли бы быть упакованы без нее. Однако при этом он использует lastread'ы, если они были выставлены ранее, т.е. ключ /a может быть необходим и в этом случае.
Команда Send посылает файлы на указанные адреса. Адреса задаются в виде списка через запятую. Файлы - списком через запятую в последнем параметре. Перед списком адресов после слова Send может идти необязательный параметр, указывающий на флавор генеримого аттача. По умолчанию - Norm. Далее может идти необязательный параметр KFS или TFS, т.е. Kill File Send и Truncate File Sent.
Модификатор Msg, следующий перед списком адресов, указывает создавать не директный аттач, а аттач с письмом, отправляемый согласно директивам Route-files. На эти письма распространяются все правила роутинга, включая Encode-Files. См. также CmdSendTemplate.
Использование модификатора Box принуждает bmp посылать файлы, используя файл-боксы, если они определены для данного адреса, либо глобально.
В именах файлов могут использоваться дикие карты.
Пример: bmp Send Hold KFS 2:5030/172, 2:5030/143 file1, file2
Команда Get используется для создания файловых запросов. Если указан параметр флавора, то создается также полл на указанный адрес. После каждого файла через пробел и символ '!' может идти пароль на запрос. Если указать перед именем файла символ ':', то будет создан запрос на обновление файла (Update request). При этом файлы сперва ищутся по переменной Inbound, а затем по FilePath.
Перед списком адресов может идти модификтор Msg, указывающий на желание создать не непосредственно *.req файл, а письмо с запросом, а затем его упаковать согласно правилам Route-Freqs, указанным в роутинге. См. также CmdGetTemplate.
Пример: bmp Get Imm 2:5030/172, 2:5030/143 :xxx.fil !MyPassword, files
Команда Poll используется для создания полла на указанные адреса. Флавор по умолчанию - Norm.
Пример: bmp Poll 2:5030/172
Команда Repack используется для перепаковки содержимого BSO, т.е. уже упакованной почты. Перепакованы могут быть письма без фреков и аттачей. Т.е. только обычный нетмэйл.
Повторная упаковка производится по правилам, описанным в роутинге, действующим в настоящий момент. Причиной изменения роутинга может послужить ручное исправление файла роутинга либо динамические свойства конфигурации. К последним относятся квалификатор Online маски адреса или команды препроцессора #ifcron. Также причиной изменения роутинга могут явится изменения в нодлисте.
Если письмо было ранее упаковано на тот же адрес, на который должно быть перепаковано, то перепаковка не осуществляется, даже если изменились прочие свойства роутинга (например, оно было бы упаковано с другим флавором).
После команды Repack можно указать маску адресов (аналогично команде Pack). В этом случае перепаковка будет совершена только для тех писем, которые подпадают под указанную маску. Единственным отличием является то, что в данном случае при анализе сложной маске адресом VIA (через который идет письмо) служит не тот адрес, на который оно было бы упаковано теперь, а тот, на который оно уже упаковано.
Перепаковка также может быть сделана в процессе упаковки почты по команде Pack при указании ключа /r и одновременном соблюдении дополнительных условий, указанных в файле конфигурации. См. условия RepackOnFlag, RepackOnChange, RepackAt, RepackEvery. Полезным может оказаться установка условия RepackOnChange по изменению нодлиста и выделенного файла роутинга. Помните, что указание ключа /r само по себе еще недостаточно для перепаковки при команде Pack!
См. также KeepPollOnRepack.
Команда Unpack совершает распаковку пакетов, лежащих в BSO. Также как и для репака обрабатываются только письма без фреков и аттачей. Распаковка идет в область, указанную директивой UnpackArea секции Netmail файла конфигурации.
Помните, что в распаковку также попадут письма, созданные самим bmp! Например - письма, созданные bmp по ArqTemplate'у или письма с кодированными в uue аттачами (которые перестали быть аттачами после кодирования).
Кроме того, в следствии обрезания с письма флагов, таких как Crash, Hold и т.д., эти аттрибуты восстанавливаются из флавора пакета и могут не совпадать с исходными (например, в следствии воздействия Flavour-Kludge).
Единственное, что делает bmp с распаковываемым письмом - убирает свой via, поставленный на это письмо при запаковке.
Короче говоря, после распаковки нетмэйл не обязательно совпадает с тем, что было до упаковки, а совпадает с тем, что было бы отправлено. Поэтому если вам пришла в голову мысль распаковывать письма шедулером и запаковывать их обратно автоматически - подумайте еще раз, хорошая ли это мысль ;-)
При указании после команды Unpack ключевого слова Keep, письма будут распаковываться, но не будут удаляться из BSO.
Также, как и в случае с командой Repack, после команды Unpack может идти маска адресов. В этом случае только письма, совпадающие с указанной маской, будут распакованы. Как и в случае Repack'а адресом VIA письма в этом случае считается адрес, на который письмо было ранее упаковано.
Файл конфигурации состоит из четырех секций. Секции могут располагаться в любом порядке. 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! |
Online | система, время работы которой длится в настоящий момент (подразумевает KnownTime) |
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 обязательно надо заковычить, если в нем присутствует точка с запятой, чтобы она не была воспринята, как начало коментария. Например:
"Имя файла с пробелом. ""И с кавычкой в расширении"""
Cron - форма представления интервала времени принятая во многих планировщиках задач. Реализация формы записи cron в BMP выглядит так:
<минута> <час> <день> <месяц> <год> <день недели> [UTC]
где каждое из полей - либо * (т.е. все возможные значения), либо список чисел и интервалов чисел. Последние звездочки можно опускать. Например:
1-15,20-30,59 15 * 1
данное крон-условие означает: в 1-ый месяц (январь), в любой его день (*), в 15 часов, если минуты в дапазоне от 1 до 15 или от 20 до 30 или в 59 минут.
Допустимые диапазоны значений:
минута | 0-59 |
час | 0-23 |
день | 1-31 |
месяц | 1-12 |
день недели | 0-7 (0 и 7 означают воскресенье) |
UTC, указанное в конце крон-условия, означает, что за основу принимается не локальное время, а время по Гринвичу.
В конфигурационном файле могут использоваться подстановки. Строка, заключенная в знаки '%' будет заменена на соответсвующую ей переменную среды. Например: %PATH%. Для ввода символа '%' используйте "%%".
Есть несколько предопределенных переменных:
BMP_OS - операционная система, под которую собран BMP.
Значения: DOS, WIN, OS2.
BMP_COMMAND - команда, с которой запущен BMP.
Значения: PACK, POLL, SEND, GET, REPACK, UNPACK.
BMP_DIR - каталог BMP (без концевого слэша).
BMP_CFG_DIR - каталог конфигурационного файла BMP.
Переменные также могут быть определены директивой
#define имя-переменной значение
либо при помощи ключа /d из командной строки. Они имеют приоритет перед переменными среды.
Переменные, созданные при помощи директивы #define или ключа /d могут быть освобождены директивой
#undef имя-переменной
открывая при этом соотвествующую переменную среды.
Препроцессор позволяет осуществлять условное транслирование файла конфигурации при помощи директив группы #if..., описанных далее. Общий синтаксис этой группы выглядит так:
#if<тип условия> <условие> команда-1 команда-2 #else if<тип условия> <условие> команда-3 команда-4 #else if<тип условия> <условие> команда-5 команда-6 #else команда-7 команда-8 #endif
Блок должен быть закрыт директивой #endif. Допустимо (но не обязательно) использование конструкции #else. После #else может идти новый if с другим условием, и такая конструкция может быть повторена много раз, работая как переключатель. После последнего #else может не идти дополнительного условия, т.е. строки от такого #else до #endif будут выполнены если не совпало ни одно из условий.
Директива #ifdef позволяет интерпретировать часть файла конфигурации в зависимости от того, определена ли указанная переменная. Блок исполняется, если указанная переменная существует. Директива #ifndef определяет обратное условие.
#ifdef имя-переменной
Директива #ifeq позволяет интерпретировать часть файла конфигурации в зависимости от того, равна ли правая строка левой. Блок исполняется, если имеет место равенство. При использовании #ifneq используется обратное условие.
#ifeq строка-1 строка-2
Например:
#ifeq [%VAR%] [True] ... #endif
блок будет исполнен только если переменная VAR имеет значение True. Все сравнения производятся регистро-независимо.
Директива #ifcron позволяет интерпретировать часть файла конфигурации только в определенное время (на момент запуска bmp). Синтаксис:
#ifcron <cron>
Например:
#ifcron * 2-3 utc Direct-Mail 2:5030/#.0 #endif
Данный пример включит прямой роутинг в пределах сети только с 2-х до 3-х часов по Гринвичу.
Помните, что если вы используете формат предтавления крон в UTC, то временная зона, заданная в файле конфигурации, не может быть использована препроцессором до того, как она будет в нем встречена. До этого момента будет использоваться системная информация о временной зоне!
Директива
#include имя_файла
включит файл с указанным именем в разбор конфигурации.
Echo ["]<строка>["]
Комада Echo является специальной и допустима в любой секции, но должна находится в какой-либо секции. Echo выводит свой параметр на экран, а если к этому моенту уже определен лог-файл - и в лог. Например:
echo "Running under %BMP_OS%"
Директива Address служит для задания списка Ваших AKA. Первая из них - основное AKA.
Пример:
Address 2:5030/172.9 Address 2:5030/143.23 Address 135:7000/555.13 Address .50 ; 2:5030/172.50 - относительно главного АКА
ArqTemplate ["]имя файла["]
Задает имя файла-шаблона для создания подтверждений на флаг Arq. Если не указана, то ответ не создается. См. также TemplatePath, Шаблоны.
ArqTemplate audit.tpl
Директива 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
CarbonGenerated указывает на необходимость карбонить письма, созданные самим BMP во время карбона основного письма. П/у запрещено.
CarbonGenerated
П/у bmp не занимается отловом GPF, оставляя это на откуп ОС. Если данное слово указано, то access violation будет перехватываться bmp. Действие bmp в этом случае - сброс посмертного дампа и уход с errorlevel 255. Используйте с осторожностью. При указании ключа /pmd сброс дампа происходит в любом случае по окончании программы.
CriticalHandler
Задает домен для именных выходных каталогов бинка (см. также параметр Outbound). Может быть повторена много раз для разных зон и, соответственно, выходных каталогов. Например:
Domain 135 c:\mail\oopsnet Domain 666 c:\mail\devilnet.666
Директива HoldAsUnlisted предписывает считать, что системы со статусом Hold и Down являются Unlisted. Требует индекса V7+.
HoldAsUnlisted
Переменная LogFile задает имя файла протокола с путем. По умолчанию лог не ведется.
LogFile bmp.log
Переменная LogLevel задает Уровень протоколирования. Сообщения имеют префикс по степени важности. '!' обозначает ошибки. Вы можете управлять уровнем протоколирования, задав значение данной переменной. Значение получается сложением значений, приведенных ниже. В лог-файл попадут только те сообщения, уровень которых присутствует в маске. Значение п/у - 63, т.е. в протокол попадут все сообщения.
1 = !Пример:
LogLevel 47 LogLevel 0x2F
В протокол попадут только сообщения с пробелом и все, выше, но не включая '#' (47=15+32).
Задает шаблон письма-сообщения о зацикливании роутинга и счетчик петель, после которого роутинг будет отвергнут и будет послано такое письмо. П/у счетчик 0, т.е. проверка запрещена.
Например:
LoopCheck 2 loop.tpl
После второй петли (на третий раз) слать обрато письмо по шаблону loop.tpl
MailerRescan путь\файл
Задает путь и имя файла, служащего семафором мэйлера для пересканирования очереди. По умолчанию отсутсвует.
Директива MaxMsgs задает максимальное количество писем, которое разрешается упаковывать за один запуск BMP. По умолчанию упаковываются все письма.
MaxMsgs 40
Параметр MsgReadOnly - отладочный. Если он указан, то письма не будут удаляться и модифицироваться.
MsgReadOnly
NewMsgFlag путь\файл
Задает флаг, выставляемый BMP в случае создания нового письма в почтовой базе.
Переменная Outbound служит для задания вашего выходного каталога бинк-моды без расширения. См. также Domain.
Outbound PATH\OUTBOUND
Параметр PackIfEmpty задается для безусловной запаковки писем, даже если они имеют пустое тело. По умолчанию такие письма вызывают создание полла, если не идут с транзитным аттачем или фреком или не подпадают под действие дикетивы RobotName.
PackIfEmpty
Директива RobotName задает имена роботов - письма этим роботам будут паковаться даже при пустом теле письма.
RobotName sqafix RobotName allfix RobotName "Strange Robot"
Укажите RouteHold, если Вы хотите, чтобы письма с аттрибутом холд паковались как hut, но по роутингу. П/у холд не роутится.
RouteHold
StorageFile задает имя файла, где bmp будет хранить данные для сохранения между запусками. П/у bmp.dat в каталоге bmp, а под Win - в HKLM\Software\BMP\$Version.
StorageFile bmp.dta
TemplatePath ["]каталог["]
Задает каталог, в котором будут искаться шаблоны для создаваемых BMP писем. П/у пусто. Имена шаблонов не должны включать в себя путь при указании этого параметра. В противном случае рекомендуется указывать полный путь к каждому шаблону. Имя конкретного шаблона получается слиянием каталога из данного параметра и собственно имени. См. также описание шаблонов в данной документации.
TemplatePath "%BMP_DIR%\Template"
Переменная 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
Указывает bmp считать локальными письма:
FLAG | только с аттрибутом local |
AKA | только исходящие с нашего АКА |
BOTH | те и другие (п/у) |
UseLocal flag
Директивы Version7 и Version7+, соотвественно, задают путь к индексу нодлиста формата V7 или V7+. П/у нодлист не используется. Указанный каталог должен содержать файлы nodex.* индекса V7.
Для построения индекса Вы можете использовать программу FastList, написанную Alberto Pasquale.
Version7 C:\MAIL\NODELIST Version7+ C:\MAIL\NODELIST
BsyDelayedFlag [["]имя файла["]]
Указывает bmp создавать специальный флаг(и), если почта на определенный адрес не была упакована из-за наличия bsy-флага.
Если используется вариант с именем файла, то созданный файл будет содержать адреса, по одному на строку, для которых обнаружен bsy-флаг. Дупов в файле не будет. Старые адреса из этого файла не удаляются.
В случае, если имя файла не указано, то будут созданы флаги в аутбаунде на каждый из заблокированных адресов. Файлы будут иметь расширения .pak.
При следующем полном рескане все старые флаги будут убиты (в обоих случаях).
BusyDelayedFlag BusyDelayedFlag .\bsydelay.flg
Директива BusyCheck {All|Bsy|None} используется для управления процессом определения занятости данного адреса. Значение All указывает, что надо обрабатывать все флаги, расширение которых подпадает под маску ?sy, либо cs#, где # - номер линии от 0 до 9. Это значение по умолчанию. Значение Bsy указывает, что следует обращать внимание только на флаги bsy. Значение None определяет, что обрабатывать флаги занятости вообще не надо (при этом они не будут проверяться и выставляться).
Используйте этот параметр на свой страх и риск!
Если Вы используете файловые ящики, то упаковка может быть произведена туда при занятости адреса. Более подробно см. описание команды AllowFileBox.
BusyCheck All
KillInTransitFile {None|KFS|All}
Директива KillInTransitFile будет посылать файлы, идущие транзитом через наш узел, как KFS, т.е. убивать после отправки, если установленное значение All. None запретит флаг KFS для транзитных аттачей, и файлы всегда будут оставаться на вашем диске. Значение KFS, по умолчанию, задает действие согласно установленным на письме флагам.
KillInTransitFile All
Директива KillInTransitMail, если указана, заставляет BMP убивать транзитные письма после запаковки, вне зависимости от наличия флага K/S. По умолчанию это не так.
KillInTransitMail
Пользователям Аргуса посящается: укажите это ключевое слово для перекодировки содержимого ?lo из OEM в ANSI. Этот параметр существует только в Win32-версии.
#ifeq %bmp_os% win ANSIflo #endif
AttachShortNames
Указывает bmp преобразовывать имена приаттаченных файлов к короткому виду. Действует только на найденные файлы, доступно только в Win32-версии.
#ifeq %bmp_os% win AttachShortNames #endif
CmdGetTemplate ["]имя файла["]
При запросе файлов из командной строки с модификатором Msg создается письмо, которое может использоваться для транзитных фреков. Данная директива задает имя файла темплета для создания этого письма.
Внимание: в каталоге с темплетами лежит пустой файл для этих целей. Меняйте его только в том случае, если вы отдаете себе отчет, зачем Вы это делаете! Непустое письмо фрека любым пакером будет запаковано и отправлено вместе с req. Вряд ли сисопы больших узлов будут рады видеть в нетмэйле сообщения о том, что кто-то что-то у них запросил... Транзитное же письмо фрека bmp упакует в любом случае.
См. также TemplatePath, Шаблоны, Команда Get
CmdGetTemplate freq.tpl
CmdSendTemplate ["]имя файла["]
При посылке файлов из командной строки с модификатором Msg создается письмо, сопровождающее аттач. Данная директива задает имя файла темплета для создания этого письма. См. также TemplatePath, Шаблоны, Команда Send
CmdSendTemplate attach.tpl
Директива 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 число
Задает количество дней, которые BMP ждет до отправки письма, если хотя бы один приаттаченный к нему файл не найден. Ожидание отсчитывается от даты прибытия письма (arrived). В течении этого времени письмо будет пропускаться при сканировании либо до истечения срока, и будет отправлено как есть, либо до прихода всех файлов. П/у 0, т.е. ожидания нет.
Если Вы используете ластриды, то в следующий раз такое письмо будет проверено только при полном пересканировании базы (минимум - раз в сутки).
Например, ждать два дня:
FileWaitDays 2
Переменная Inbound задает пути для входных каталогов мэйлера. Синтаксис аналогичен FilePath. Здесь ищутся файлы, в независимости от того, был ли указан полный путь, для транзитных аттачей через наш узел.
Эта переменная также задает путь для поиска файлов при запросах на обновление (Update Request). При этом Inbound имеет приоритет перед FilePath.
Inbound "C:\MAIL\INBOUND..."
MisFileTemplate шаблон
Задает шаблон письма-уведомления о том, что один или несколько файлов при письме не были найдены. П/у такое уведомление не посылается.
MisFileTemplate misatth.tpl
Если указана эта команда, то в письмах, идущих через гейт, будет производится поиск инетовского "To:", и если он уже есть, то после него будет добавлена пустая строка (если еще нет).
Это не является обязательным требованием для инета, но соответствует требованиям Сафронова для гейтов (о чем не знает дед). Это необходимо не для всех гейтов, а to, вставляемые самим BMP в любом случае удовлетворяют этому требованию.
Не рекомендуется использовать этот параметр, если он Вам не нужен.
FixExistingTo
Gate <адрес> {["]<Имя гейта>["]|*} {["]<Имя пользователя>["]|[*]}
Задает адрес и имя гейта в инет. Также можно указать имя пользователя (from). Если эти имена не нужны, то вместо них можно указать *. Письма, идущие на этот адрес, проверяются на наличие в toname символа '@', и, если он найден, имя получателя меняется на имя гейта, если задано, а в тело письма вставляется инетовский кладж 'To:' с именем получателя. Если указано имя пользователя, и письмо локальное, то это имя пишется в поле from. Может быть указано несколько гейтов.
Gate 2:5030/172 UUCP * Gate 2:1/2 * "Email User" Gate 1:1/1 "Some Internet gate"
Если указано ScanForRfc, то письма, адресованные на ноду, имеющую гейт, требующий специального имени в поле to: письма, и не содержащие такого имени будут просканированы на предмет нахождения в них rfc-шного поля to:. Если такое поле будет найдено, то в фидо-поле to: будет занесено имя гейта, а письмо будет считаться адресованным в инет.
Требуется для устранения глюков GoldEd, не всегда вписывающего корректный to:, в случае, когда известно реальное имя получателя (отличное от его email-адреса).
Не рекомендуется использовать, если Вас этот глюк не касается.
ScanForRfc
MaxOutSize xxx
Директива MaxOutSize задает максимальный размер ?ut-файла. При достижении пакетом этого размера он переименовывается в файл ????????.pkt и приаттачивается как файл-аттач. Новое письмо упаковывается в свежий ?ut. П/у не определено. См. также MsgExtent.
Эта установка может быть изменена для отдельно взятой системы в секции Links.
MaxOutSize 0x10000
MsgExtent xxx
xxx - предельный размер письма в байтах, которое может быть запаковано в ?ut. Письма, превышающие этот размер будут упакованы по одному письму на пакет и посланы как аттач (это не означает, что они будут архивироваться - удаленная сторона будет считать их нетмэйлом). См. также MaxOutSize
Эта установка может быть изменена для отдельно взятой системы в секции Links.
PacketNames {Radix16|Sequential}
Указывает, какие имена пакетов создавать. П/у Radix16, т.е. создавать имена пакетов в 16-ричной системе счисления (например, ee8a2ce8.pkt) на основе системного времени. Значение Sequential указывает генерить пакеты с именами, возрастающими по порядку. Например: 00000001.pkt, 00000002.pkt. Крайне не рекомендуется, т.к. сильно увеличивает вероятность пакетных дупов.
PacketNames Radix16
Задает каталог, где будут создаваться pkt-файлы. П/у они создаются там же, куда попали бы соответствующие ?ut-файлы.
Для отдельно взятой системы пакеты могут быть положены в отдельную директорию.
PacketPath c:\mail\pkts
Указывает, какие пакеты создавать. Значения: п/у 2+ или FSC-0048. Если пакет отправлен пойнтом, то в сеть отправителя пишется -1. К сожалению, не все программы корректно обрабатывают эту ситуацию. Значение FSC-0039 задает тип пакета 2+ с истинным OrigNet. Это может ввести в заблуждение системы StoneAge, которые будут думать, что пакет исходит от босса, а не от пойнта. Значение 2.0 или FTS-0001 указывает генерить пакеты типа 2.0.
Эта установка может быть изменена для отдельно взятой системы в секции Links.
PacketType FSC-0039
AllowFileBox <тип> [, <тип> ...]
<тип> ::== mail, files, none
Разрешает либо запрещает глобальное использование файловых ящиков, если система занята (имеется флаг bsy при упаковке) для определенных видов писем. П/у - запрещено, т.е. none. Можно разрешить упаковку только нетмэйла (mail), только файловых аттачей (file), либо того и другого вместе.
В этом случае, при обнаружении флага занятости системы, на которую осуществляется упаковка, и при условии, что файловые ящики определены в файле конфигурации либо глобально, либо определен именной ящик для данной системы в секции линков, упаковка почты будет произведена в этот ящик. Есть реальный шанс, что в этом случае почта будет отправлена в эту же сессию.
Если упаковывается файловый аттач, то и письмо, идущее при нем, запаковывается в pkt и кладется в тот же файловый ящик. Нет никакой гарантии, тем не менее, что оно будет отправлено после самих файлов, т.к. файловый ящик по своей природе не сортируется. Кроме того, естественным образом теряется и флавор почты.
Помните также, что файлы из файловых ящиков будут отправлены Вашим мэйлером в батче файлов используемого протокола (если для протокола это понятие имеет смысл), а следовательно, приняты в батче файлов удаленным мэйлером. Если удаленный мэйлер считает, что нетмэйл может придти только в батче нетмэйла, то принятый им пакет он может посчитать за обычный файл, а в этом случае он может остаться лежать в инбаунде удаленной системы ждать тоссинга неопределенно долго. На практике это маловероятно, однако перед тем как разрешать эту установку все же следует убедиться, что удаленная сторона не сделает именно так. Потенциально это опасная установка.
Файловые запросы не могут быть упакованы в файловый ящик ввиду того, что когда они будут отосланы в последнем батче протокола, на них уже некому будет отвечать.
Обратите также внимание, что данная установка не действует на принудительную отправку файлов через файловые ящики при использовании команды Send с модификатором Box из командной строки.
Эта установка может быть перекрыта для конкретного адреса в секции линков.
Например:
AllowFileBox mail, files
FileBoxes T-MAIL [/long] ["]путь["]
Задает путь для файловых ящиков в стиле t-mail'а. Т.е. когда каждому адресу однозначно соответствует уникальное имя каталога в указанном каталоге. Это имя строится автоматически.
Модификатор /long указывает на необходимость использовать длинные имена файловых ящиков. Длинное имя не может быть создано под управлением DOS и в DOS-версии этот модификатор запрещен. Используйте макросы, если это необходимо.
Кроме этого, для конкретного адреса также может быть указан именной файловый ящик в секции линков. Именной файловый ящик, если он определен, имеет приоритет.
См. также установку AllowFileBox.
Пример:
#ifeq %bmp_os% DOS FileBoxes t-mail .\FileBox #else FileBoxes t-mail /long .\FileBox #endif
KillEmptyFileBoxes { all | none | t-mail | named }
Разрешает удаление пустых файловых ящиков при сканировании. Возможные значения:
KillEmptyFileBoxes all
FullScanAt cron
Если bmp запустили в указанное в cron-выражении время, то будет сделано полное сканирование нетмэйла (игнорируя ластриды, как при задании ключа /a). Директива может быть повторена много раз, задавая разные интервалы времени.
Например:
FullScanAt * 10 FullScanAt 0-5 20 * * * 4 utc
FullScanEvery hh[:mm]
Если указано, то делать полное сканирование нетмэйла (игнорируя ластриды, как при задании ключа /a), если с момента последнего прошло времени больше указанного. Формат времени - hh:mm, т.е. часы и минуты. Минуты можно опускать вместе с двоеточием. 00:00 - выключить (п/у).
Кроме того, полное сканирование будет произведено в любом случае при начале новых суток.
FullScanEvery 01
FullScanOnChange ["]имя файла["]
Задает файлы, по изменению которых будет сделано полное сканирование нетмэйла (игнорируя ластриды, как при задании ключа /a). Директива может быть повторена много раз.
FullScanOnChange bmp.cfg
FullScanOnFlag ["]имя файла["]
Задает файловый флаг, указывающий на необходимость полного сканирование нетмэйла (игнорируя ластриды, как при задании ключа /a). Флаг будет удален при любом полном сканировании.
FullScanOnFlag fullscan.now
lastread смещение
Смещение в файле lastread (либо номер пользователя). Если указано, то сканирование происходит, начиная с последнего уже отсканированного письма. Раз в день происходит полное принудительное пересканирование.
Также полное пересканирование приоисходит при задании ключа /a командной строки.
lastread 5
Если в процессе репака были удалены все пакеты, указанные в lo-файле, то п/у этот (и только этот) полл будет удален. Чтобы изменить это поведение укажите эту директиву.
KeepPollOnRepack
RepackAt cron
Если bmp запустили в указанное в cron-выражении время, то будет сделан репак, если указан ключ /r. Директива может быть повторена много раз, задавая разные интервалы времени.
Например:
RepackAt * 10 RepackAt 0-5 20 * * * 4 utc
RepackEvery hh[:mm]
Если указано, то при наличии ключа /r делать репак, если с момента последнего прошло времени больше указанного. Формат времени - hh:mm, т.е. часы и минуты. Минуты можно опускать вместе с двоеточием. 00:00 - выключить (п/у).
RepackEvery 01:00
RepackOnChange ["]имя файла["]
Задает файлы, по изменению которых будет сделан репак при исполнении команды Pack, если указан ключ /r. Директива может быть повторена много раз. Можно указать, например, файл роутинга или (и) индекс нодлиста.
RepackOnChange route.cfg RepackOnChange "C:\MAIL\NODELIST\nodex.dat"
RepackOnFlag ["]имя файла["]
Задает файловый флаг, указывающий на необходимость репака при исполнении команды Pack, если указан ключ /r. Флаг будет удален при любом полном репаке.
RepackOnFlag repack.now
В этой секции задается список почтовых баз netmail'а и опции их сканирования.
AreaDef ["]тэг["] {FIDO|SQUISH|JAM} ["]путь["] [-pАдрес]
AreaDef описывает область нетмэйла, делая ее известной bmp.
Тэг - уникальное имя области, используемое в дальнейшем для идентификации области.
Второй параметр указывает тип области - FIDO, SQUISH или JAM.
Путь задает либо путь до базы FIDO, либо полное имя базы squish/jam с путем но без расширения.
Ключ -p задает приоритетное Aka для данной области. П/у - первый Aka в списке наших адресов. Это адрес, который будет выбран при aka-match'инге при прочих равных условиях, как если бы он был написан в конфиге первым. Обратите внимание, что если письмо исходит с одного из наших адресов, то aka-match'инг вообще не происходит! Исключение составляет явно заданный или форсированный aka для линка, определенный в секции линков.
Также указанный для области aka в AreaDef задает зону по умолчанию для этой области. Если зона в письме не укзана, то используется информация о зоне по умолчанию, а умолчание берется из основного адреса, либо из данного aka.
Пример:
areadef netmail fido %net% areadef Base.Netmail squish %net%\base areadef "Crazy.Netmail" squish "%net%\crazy" -p2:5030/143.23 areadef JBase jam %net%\jbase areadef .Unpack fido unpack areadef .Carbon fido carbon
ScanArea ["]тэг["]
Команды ScanArea задают тэги областей для сканирования при упаковке почты. Все тэги областей должны использоваться только после их объявления в AreaDef. Несколько команд ScanArea могут идти подряд. Только эти области обрабатываются при исполнении команды Pack. После описания ScanArea могут идти опциональные директивы, относящиеся к сканированию только данной области.
Пример:
ScanArea netmail ScanArea "Base.Netmail" ScanArea Crazy.Netmail ScanArea JBase
CarbonArea ["]тэг["]
Команда CarbonArea может идти после команды ScanArea и распространяется на сканирование только этой области (после ScanArea для которой она указана). Параметр указывает тэг области, куда будут складываться копии посланных из данной области писем. Письма карбонятся не в исходном виде, а в том, в котором они были запакованы. Кроме того к ним добавляется кладж "AREA:" с указанием тэга области, откуда это письмо было запаковано. Пустые письма не карбонятся.
См. также CarbonGenerated.
Пример:
ScanArea netmail ScanArea Base.Netmail CarbonArea .Carbon ScanArea Crazy.Netmail CarbonArea .Carbon ScanArea JBase
(Карбонить в область .Carbon письма из Base.Netmail и Crazy.Netmail).
UnpackArea ["]тэг["]
UnpackArea задает тэг области нетмэйла, куда будут распаковываться письма при команде Unpack. Лучше будет, если это будет выделенная специально для этого область (не та, из которой запаковывали), т.к. если при отправке письмо не было убито, а на него был поставлен флаг Sent, то при распаковке его в ту же область с тем же MsgId образуется дуп. Кроме того, это обезопасит вас от случайного срабатывания bmp, запущенного шедулером, который запакует все обратно ;)
UnpackArea .Unpack
Секция роутинга задает правила маршрутизации почты. Правила сканируются сверху-вниз, до первого подходящего. Различаются команды маршрутизации почты (нетмэйла), файловых запросов и файлов (аттачей). Команды, относящиеся к роутингу нетмэйла, оканчиваются словом Mail, файлов - Files, запросов - Freqs. Правил маршрутизации по умолчанию не существует.
на эти адреса почта (файлы, запросы) будут паковаться напрямую
данное правило отправит почту, удовлетворяющую 'сложной маске' через 'адрес', либо на хост сети (Host), либо (Hub) на хаб ноды (или хаб босса пойнта), либо на босса (Boss) пойнта (если не поинт - директом). Для хаб-роутинга должен быть подключен нодлист.
Также Hub означает хост сети/региона/зоны для системы, живущей не под хабом, а под хостом/регионом/зоной.
Подпадающие под это правило письма будут отосланы в /dev/nul. Это не касается локальных писем с аттрибутами Dir и Hold (представляется крайне сомнительным, чтобы это кому-то было надо). Адрес via (^) в этом случае лишен смысла и совпадает с адресом to письма. С приаттаченными файлами будет поступлено по закону гор, т.е. так, как если бы письмо было действительно послано, с некоторыми исключениями: флаг TFS считается равным флагу KFS и поиск файлов осуществляется только по пути Inbound, но не по FilePath. Файлы при локальных письмах при этом не убиваются никогда.
Тоже, что и kill, но будет создано письмо-отлуп по указанному шаблону. Письмо будет либо отослано отправителю исходного письма, либо сохранено в сканируемой почтовой базе, если исходное письмо - локальное. См. также TemplatePath.
Аналогично bounce, но письмо-отлуп будет отправлено на адрес, задаваемый вторым параметром. При этом, если используются Host/Hub/Boss, то имеется в виду соотвестующий узел не для адреса назначения письма, а для адреса отправителя, т.к. считается, что письмо заворачивается в обратном направлении. Например:
Complain-Files pntfiles.tpl Boss -2:5020/#.#
отправит боссу пойнта, шлющего на нас файлы, комплэйн.
Адресом via (^) в данном случае будет адрес назначения комплэйна.
регулирует генерацию поллов при создании файлового запроса. При создании файлового запроса, удовлетворяющего 'сложной маске', будут созданы только поллы с флаворами, перечисленными в параметре 'флаги'. При отсутствии подходящего правила будут созданы все поллы. Для отмены всех поллов надо указать значение первого параметра "-". Данное правило относится только к не-транзитным фрекам.
Например:
Freq-Flavour CI ^*
разрешит создание только Imm и Crash поллов.
Freq-Flavour - *
отменит все поллы для файловых запросов.
позволяет запретить генерацию почты и аттачей с указанными первым параметром флаворами. Если первый параметр '*' - то запрещаются любые флаворы. Когда необходимо создать ?ut или ?lo с указанным аттрибутом, и письмо удовлетворяет 'сложной маске', то вместо него используется флаг. Таким образом можно, например, захолдить любую почту на адреса не в своей сети:
Flavour-kludge * H !^2:5030/*
После того, как найдено подходящее условие роутинга для письма, проверяются все указанные CanRouteIf. Если все условия всех этих команд выполняются, то роутинг принимается. Если нет, то роутинг отвергается. Если команда, отвергшая роутинг, использована в форме в восклицательным знаком, то дальнейших попыток найти подходящее правило роутинга не производится и выдается сообщение о невозможности отправки письма ("constraint prevents msg from beeing routed...").
Так, например, можно запретить слать почту на узлы Hold и Unlisted:
CanRouteIf !^Raw:Hold & ^Listed
или запретить обрабатывать почту от адресов из зоны 999:
CanRouteIf! !-999:*
После того, как найдется подходящее условие роутинга, адреса проверяются на заданное условие. Если оно выполняется, то письмо молча игнорируется.
Например, запретить упаковывать почту на адрес /2:
Ignore /2
Позволяет превращать файловые аттачи в закодированные 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
Необязательная секция, в которой задаются линки и их параметры. Сперва задаются адреса линка, потом относящиеся к нему команды. После них описывается следующий линк.
Указывает список адресов системы, для которой следует применить следующие параметры.
Address /142, /143
Aka адрес
Указанный адрес - один из наших aka - будет выбираться при aka-matching'е (выборе наиболее подходящего адреса) при запаковке пакета на описываемую систему. См. также ForceAka и AreaDef.
Aka 135:7000/555.13
ForceAka адрес
Тоже самое, что и Aka, но задает более жесткое условие: данный адрес будет выбран даже в том случае, если стандартная процедура aka-matching'а не используется (если исходящий адрес письма является одним из наших собственных адресов). См. также AreaDef.
ForceAka 135:7000/555.13
Перекрывает глобальную установку AllowFileBox для данного адреса. Можно также запретить использование файловых ящиков для данного адреса, указав здесь
AllowFileBox none
FileBox ["]каталог["]
Задает именной файловый ящик для данного адреса. Если задан, то будет использоваться именно он, а не глобально определенный каталог для файловых ящиков в стиле t-mail'а.
FileBox .\filebox\Alex
MsgExtent xxx
Перекрывает глобальную установку MsgExtent для пакетов, упаковываемых на данный адрес.
MaxOutSize xxx
Перекрывает глобальную установку MaxOutSize для пакетов, упаковываемых на данный адрес.
PacketPath ["]каталог["]
Перекрывает глобальную установку PacketPath для пакетов, упаковываемых на данный адрес.
PacketPath ["]каталог["]
Перекрывает глобальную установку PacketType для пакетов, упаковываемых на данный адрес.
PktPassword ["]пароль["]
Указывает пароль, который BMP должен поставить на пакет при запаковке на данную систему. Максимальная длина пароля - 8 символов. Например:
PktPassword cumran
Address /172 PktPassword cumran PacketPath .\Pkt\Alex MaxOutSize 300 MsgExtent 140 Address /142, /143 PktPassword sophia PacketType 2.0 forceaka 135:7000/555.13 PacketPath .\Pkt\Crazy Address 2:5030/200
При создании письма 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), или при создании письма-аттача из командной строки (CmdSendTemplate) |
%_??? | - | ??? - одна из перечисленных выше переменных, обозначающая адрес или имя. Задает фиксированную ширину поля. Для имен 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