T-mail

8.Очередь. Принципы организации.

Понятие почтовой очереди является одним из наиболее важных для любого мэйлера. Более того, большую часть времени мэйлер занимается именно обслуживанием очереди. Некоторые мэйлеры, такие как FrontDoor, способны сами создавать очередь, просматривая письма, которые необходимо отправить по назначению, другие, как например, BinkleyTerm, обслуживают очередь, которую им готовит какая-либо другая программа (например, эхопроцессор). Таким образом, почтовые программы-мэйлеры разделяются на две группы: ArcMail-Attach мэйлеры и OutboundArea-style (или Bink-Style) мэйлеры. T-Mail способен совмещать в своей работе оба этих режима, причем может поддерживать их совместно. Кроме того, T-Mail имеет третий способ отсылки файлов - файловые почтовые ящики.

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

письма, адресованные на эту систему;

письма, которые маршрутизируются через эту систему;

файлы, которые могут пересылаться вместе с этими письмами (attached);

файловые запросы на эту систему;

файлы из различных файловых ящиков;

файлы, указанные для пересылки в Bink-Style Outbound.

Дальше в тексте мы будем пользоваться следующими терминами: технологию пересылки файлов и писем, а также формирования очереди на основе просмотра обычных писем назовем режимом Arcmail-Attach; файлы, каталоги и систему адресации Bink-Style режима будем называть Bink-Style Outbound. Файловые адресные почтовые ящики подробно рассмотрены в главе 13.

Режим Arcmail-Attach

В режиме ArcMail-attach основой для помещения информации в очередь является нетмэйл (сетевая почта). Он представляет собой файлы - письма (*.msg) формата, определенного в документе FTS-0001, располагающиеся в каталоге, заданном переменной Mail_Out (t-mail.ctl). Встроенный упаковщик просматривает эти письма и в соответствии с правилами маршрутизации и атрибутами писем формирует очередь T-Mail на их отправку.

Bink-Style Outbound

Bink-Style Outbound полностью формируется внешними программами (упаковщиками, эхопроцессорами, файлэхопроцессорами и т.д.). Эта технология базируется на том, что в определенные каталоги (см. переменную BinkOutbound в t-mail.ctl) помещаются файлы заданной структуры. Эти файлы содержат либо письма (файлы имеют имена *.?UT), либо ссылки на файлы, которые необходимо отправить (эти ссылки хранятся в файлах с именами *.?LO). Файлы *.?LO имеют текстовый формат. Каждая строка такого файла содержит полное имя отправляемого файла.

Первая буква расширения этих файлов соответствует атрибуту, присвоенному отправляемой информации:

Атрибут

Пакеты с нетмэйлом

Файлы.?LO

Crash

*.CUT

*.CLO

Immediate

*.IUT

*.ILO

Direct

*.DUT(.NUT)

*.DLO (.NLO)

(Normal)

*.OUT

*.FLO

Hold

*.HUT

*.HLO

Так, например, пакет с нетмэйлом, которому присвоен атрибут hold будет иметь расширение *.HUT. Имя же файлов формируется в соответствии со специальными правилами исходя из адреса системы-адресата.

Каталог "outbound", заданный в переменной BinkOutbound (t-mail.ctl) используется для размещения этих специальных файлов (*.?UT, *.?LO) с информацией, предназначенной дляотправки в ту же зону,которая указана в основномадресе нашейсистемы. Дляотправки информациив другиезоны в каталоге, содержащем подкаталог сименем, заданным переменной BinkOutbound (t-mail.ctl),создаются подкаталогис темже именем,но срасширением, соответствующимшестнадцатиричномуномерузоны.Принципыработы с ними аналогичны принципам работы с подкаталогом "outbound". И, наконец, в каждом такомкаталогемогутбытьсозданыподкаталогидля размещения файлов и писем,которые необходимоотправить пойнтовымсистемам в соответствующей зоне. При использовании Bink-Style Outbound нельзя использовать адреса с номером зоны больше, чем 4095. T-Mail не поддерживает доменные имена каталогов (так называемая, 5-D адресация).

Анализ очереди и формирование исходящих вызовов

Если система "попала" в очередь, это еще не значит, что T-Mail будет вызывать ее и пытаться отправить туда почту. Ниже описывается алгоритм, который используется при анализе текущей позиции в очереди.

Итак, когда же T-Mail будет пытаться вызвать систему Х, находящуюся в очереди?

1.        Проверяется, разрешает ли значение переменной Call_Time исходящие вызовы.

2.        Имеет ли хоть один узел в очереди статус priority? Если да, то анализируется имеет ли Х этот статус. Если да, то вызов возможен, если нет - то в первую очередь будут обслужены те узлы, для которых этот статус задан.

3.        Анализируется, можно ли в настоящее время вызывать узел Х:

1)       значению переменной Default_OH (t-mail.ctl);

2)       нодлисту - флаги СМ, OH (FSC-0020), Txy (FSC-0062), #nn и !nn (FTS-0005) (см. раздел IV);

3)       subst.lst- заданные параметрами time.

Если не принимает, то вызов не производится. Следует иметь ввиду, что при использовании флага Txy подразумевается время UTC, поэтому для правильной интерпретации необходимо, чтобы переменная UTC (t-mail.ctl) была установлена правильно.

4.        Затем анализируется, какого рода есть почта для узла Х:

         есть ли письма (в том числе, с присоединенными файлами)?

         есть ли файлы в активном файлбоксе по умолчанию?

         есть ли файлы в Bink-Style Outbound?

         есть ли файловые запросы?

Если выясняется, что для отправки есть только файлы, то проверяется - не была ли задержана отправка файлов для узла X (например, вследствие получения флага HXT в EMSI), и если была, то вызов не производится.

Если выясняется, что есть только файловые запросы, то анализируется имеющаяся информация о том, когда узел Х обслуживает файловые запросы:

Если текущее время не совпадает с заданным в этих источниках, вызов не производится. Если совпадает, то проверяется - не были ли задержаны файловые запросы (например, вследствие получения флага HFR в EMSI), и если были, то вызов не производится.

1.        Анализируется, не превысило ли число попыток вызова этого узла значение переменной Call_Tries. Если это значение превышено, вызов не производится.

2.        В многолинейной системеанализируется, не вызываетли уже другаялиния этотузел══ (busy-флаги,флагизанятости).══ Еслида,то══ вызовне производится.

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

         если хотя бы одно письмо в пакете для узла X имеет атрибут Crash или Imm, то директивы Hold будут проигнорированы. При наличии у письма атрибутов Crash и Hold одновременно T-Mail считает, что вместо них у этого письма установлен только атрибут Direct;

         если все письма в пакете для узла X имеют атрибут Hold, то вызов не производится.

На самом деле этот алгоритм иногда выглядит несколько иначе из-за необходимости оптимизации, но все перечисленные ступени так или иначе в нем присутствуют.

Если вызов разрешен, то T-Mail приступает к формированию строки для пересылки в модем. Эта строка формируется из четырех составных частей:

1.        Префикс. Эта часть берется из переменной Dial_Prefix (t-mail.ctl), соответствующей флагам вызываемой системы, либо из параметра Dial в subst.lst.

2.        Номер телефона. Эта часть берется из соответствующего этой системе нодлиста/пойнтлиста или из файла subst.lst (поле Phone). При использовании номера из нодлиста/пойнтлиста производится трансляция номера в соответствии с переменными Dial (t-mail.ctl). При использовании номера из файла subst.lst такая трансляция не производится. В любом случае все символы '_' в номере заменяются на пробелы.

3.        Суффикс трансляции. Эта часть берется из поля <суффикс> соответствующей переменной Dial (t-mail.ctl).

4.        Суффикс. Эта часть берется из переменной Dial_Suffix (t-mail.ctl).

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

Действия при исходящем вызове

Сформированная управляющая строка посылается в модем, после чего T-Mail начинает ожидать соединения. Время этого ожидания определяется переменной Wait_Carrier (t-mail.ctl). Оператор может увеличить или уменьшить это время клавишами '+' или '-', или прервать ожидание, нажав клавишу пробела или 'ESC'.

Если от модема была получена хотя бы одна из строк, указанных в переменной AttemptOn (t-mail.ctl), попытка вызова будет считаться не завершившейся успешно. При этом увеличивается на единицу значение счетчика попыток дозвона и, если его значение достигло величины, заданной в Undial_On_CallTries (t-mail.ctl), то системе будет присвоен статус Undialable. При успешном установлении соединения при исходящем вызове накопленное значение этого счетчика сбрасывается.

Если же соединение было установлено, но попытка проведения процедуры handshake (см. ниже) была безуспешной, то связь прерывается и увеличивается на единицу счетчик безуспешных попыток проведения процедуры handshake. Если значение этого счетчика превысит значение, заданное в переменной Undial_On_HSTries (t-mail.ctl), то системе также будет присвоен статус Undialable. При успешном проведении процедуры handshake накопленное значение этого счетчика сбрасывается.

Если в процессе исходящего сеанса связи произошел обрыв, то на единицу увеличивается счетчик числа обрывов сеансов связи с данной системой. Если значение этого счетчика превысит значение, заданное в переменной Undial_On_SessionAborts (t-mail.ctl), то системе также будет присвоен статус Undialable. Счетчик обрывов сбрасывается после первого успешно завершившегося исходящего сеанса связи.

Кроме того, есть возможность при определенном ответе модема (например, NO DIALTONE) во время исходящего вызова прервать его и запустить процедуру ответа на вызов . Эта возможность реализуется с помощью переменной AnswerOn (t-mail.ctl). Для реализации этой возможности необходимо настроить модем соответствующим образом (модем не должен отключаться от линии при получении ответа NO DIALTONE).

Когда появляется сигнал несущей (carrier) и получена строка от модема, соответствующая одной из скоростей соединения или внешнему обработчику соединения (все строки задаются в файле t-mail.ctl), T-Mail переходит к фазе обработки соединения. В коммерческой версии можно также определить возможность выполнения соответствующего сценария (см. главу 29).

Если в ответе модема присутствовала строка, определенная в одной из переменных Extern (t-mail.ctl), то все дальнейшее управление передается внешнему обработчику соединения. Если ни один внешний обработчик не запущен, то T-Mail отправляет посылку handshake и ждет поступления информации из линии.

Время этого ожидания задается в переменной Wait_Mailer (t-mail.ctl). Если в течение этого времени из линии не будет принято осмысленной информации, T-Mail выполняет действия, описанные в переменной Process Handshake_Timeout (t-mail.ctl). Если же информация будет принята, то возможны следующие варианты дальнейших действий T-Mail:

  1. Управление передается внешнему обработчику ключевого слова (External Mailer), если из модема поступило ключевое слово, описанное в одной из переменных Extern_Mail (t-mail.ctl). Если сеанс связи внешнего обработчика закончился с кодом завершения 0 (т.е., благополучно), то T-Mail удаляет из очереди тот фиктивный адрес узла, с помощью которого T-Mail вызывал систему, используя внешний мэйлер;
  2. Если получена посылка EMSI или YOOHOO, то выполняется процедура handshaking (начальное "рукопожатие" систем, выполнение подстановок Set и AKA из subst.lst, проверка паролей), проверяется скорость соединения (она должна быть больше или равна указанной в переменной Min_Baud_Out (t-mail.ctl)), после чего T-Mail приступает к выполнению сеанса связи - отправляет и принимает файлы и почту, обрабатывает файловые запросы и т.д.

Просмотр и оперативное управление очередью. Статусы

Текущая очередь показывается в нижнем окне основного экрана T-Mail в два столбика. Для каждого пункта очереди показывается адрес узла ("Node"), число предпринятых попыток вызова ("Try"), объем почты (без Hold) в байтах или килобайтах ("Mail"), объем файлов (без Hold), в байтах или килобайтах ("File"), объем почты и файлов с атрибутом Hold для данного узла ("Hold") и статусы данного элемента очереди ("St.").

Если очередь так велика, что не помещается в отведенном окне, то можно воспользоваться клавишами <up>, <down>, <PgUр>, <PgDown>, <Home>, <End> для "прокрутки" очереди в окне. Клавиша Alt-M "разворачивает" очередь на весь экран. С помощью клавиши Alt-F в коммерческой версии можно переключать просмотр обычной и факсовой очереди.

Изменение текущей позиции в очереди осуществляется клавишами <left>, <right> (или <Ctrl-up>, <Ctrl-down>), <Ctrl-PgUр>, <Ctrl-PgDown>, <Ctrl-Home>, <Ctrl-End>. Текущая позиция отмечается маленьким треугольничком слева от адреса.

Переменная Sort_Queue (t-mail.ctl) задает критерий сортировки и порядок, в котором будут отсортированы системы в очереди (по адресам, по количеству почты и т.п.).

Пользователь имеет возможность оперативно изменить статус узла/узлов в очереди. Статус отображается следующими буквами напротив каждого адреса:

H √ hold status

C √ crash status

I √ immediate status

P √ priority status

U undialable status

Если узел получил соответству ющий статус в результате действий оператора, то этот статус будет действителен в течение ограниченного отрезка времени, определяемого специальной переменной CH_Interval (по умолчанию 1 час). Исключение составляет статус Undialable - он действует до отмены оператором.

Статус Hold В том случае,если система получила статус, это равнозначнотому,чтона соответствующий интервал будет действоватьправило Holdдля этойсистемы. Проще говоря, будут задержаны вызовы этого узла. Временно отменить статус Hold можно лишь более сильным средством - установив статус Immediate или Crash.

Клавиши для ручной установки

и отмены статуса Hold:

Установить

Отменить

для текущей системы в очереди

<H>

<H>

для списка адресов систем

<Ctrl-H>

<Ctrl-U>

Статус Crash Если система получила этот══ статус, тоT-Mailвтечение описанногопериодавр емениигнорируетправилаHold, но учитывает ограничения по времени приема вызовов этой системой. Если же для системы действует правило Freeze, то эта система вызываться не будет.

Статус будет установлен автоматически, если хотя бы одно письмо на данный адрес имеет атрибут или существуют файлы *.CLO и *.CUT для данной системы. Отмена статуса произойдет тоже автоматически после отправки соответствующих писем и файлов.

Клавиши для ручной установки

и отмены статуса Crash:

Установить

Отменить

для текущей системы в очереди

<C>

<C>

для списка адресов систем

Ctrl-D>

<Ctrl-B>

Статус Immediate Если система получила этот══ статус, тоT-Mailвтечение описанногопериодавремениигнорируетправилаHold,и ограничения по времени приема вызовов этой системой. Однако если действует правило Freeze для этой системы, то она не будет вызываться.

Статус Immediate будет установлен автоматически, если хотя бы одно письмо на данный адрес имеет атрибут Imm или существуют файлы *.ILO и *.IUT для данной системы. Если переменная Crash_as_Imm имеет значение "Yes", то статус Immediate будет установлен и при наличии атрибута Crash на письмах, а также файлов *.CLO и *.CUT. Отмена статуса Immediate произойдет автоматически после отправки соответствующих писем и файлов.

Клавиши для ручной установки

и отмены статуса Immediate:

Установить

Отменить

для текущей системы в очереди

<I>

<I>

для списка адресов систем

<Tab>,<Ctrl-I>

<Ctrl-R>

Статус Priority Назначение статуса Priorityравнозначно действию директивы priorityevents.ctl).Системы,имеющиеэтот статус, будут "обслуживаться" мэйлером в первую очередь.

Статус Priority устанавливается для системы автоматически при начале действия директивы Priority для этой системы (см. файл events.ctl). Если этот статус был установлен с клавиатуры, то он автоматически будет отменен после успешного сеанса связи с соответствующей системой, при установке статуса Undialable, при превышении максимального числа попыток (Call_Tries) или после истечения периода времени, заданного в переменной CH_Interval (по умолчанию - 1 час). Если этот статус был установлен директивой Priority, то он автоматически будет отменен только после окончания времени действия этой директивы.

Клавиши для ручной установки

и отмены статуса Priority:

Установить

Отменить

для текущей системы в очереди

<P>

<P>

для списка адресов систем

<Ctrl-O>

<Alt-C>

Статус Undialable Если приисходящем вызове определенной системыни один из предъявленных ею AKA-адресов не совпал с адресом в очереди, илиотудаленнойсистемы══ былаполученаинформацияо несовпадении паролейна сеанс связи,то для этойсистемы автоматическибудетустановленстатусUndialiable.Это действие будет зафиксировано в лог-файле.

Кроме того, статус undialable устанавливается после превышения ограничений, установленных переменными Undial_On_CallTries, Undial_On_HSTries, Undial_On_SessionAborts (см описание t-mail.ctl, глава 7).

Клавиши для ручной установки

и отмены статуса Undialable:

Установить

Отменить

для текущей системы в очереди

<U>

<U>

для списка адресов систем

нет

<Alt-U>

 

Кроме того, пользователь имеет возможность вручную изменить некоторые атрибуты писем и типы файлов в Bink-Style Outbound (flavour). Это можно сделать с помощью нажатия клавиш <Ctrl-F>. При этом в диалоговом окне будет предложен выбор атрибута/типа Crash, Hold или Normal (отмена атрибутов), а затем адрес или список адресов систем, для которых необходимо произвести эти изменения в очереди. В отличие от действий, описанных выше, которые изменяют статус системы только в очереди, это действие корректирует сами письма и файлы в Bink-Style Outbound и их автоматической отмены через час или любой другой промежуток времени, естественно, не происходит.