Приветствие

Многим при создании сообщений хочется видеть что-то типа «Доброе утро, уважаемый Иван Петрович», когда на дворе 2 часа пополудни, и «Добрый вечер, Иван Петрович», когда 8 часов вечера. Ниже мы именно этому и будем обучать нашего любимого The Bat!

Итак, время представлено в виде строк, то есть «8:00», «9:00», «17:00», «5:00».

Сравнивая время, программа на самом деле сравнивает его строковое представление, а принцип сравнения строк элементарен – сравнение идет посимвольно.

Чем это грозит? А смотрите сами:

  1. Сравним 17:00 и 20:00 Первый символ в строке «17:00», это символ «1» Первый символ в строке «20:00», это символ «2» 1 < 2? Ага. Соответственно, 17:00 < 20:00 логично, не правда ли?
  2. Сравним теперь 18:00 и 10:00 Первый символ в строке «18:00», это символ «1» Первый символ в строке «10:00», это символ «1» 1 < 1? Нет. 1 > 1? Нет. 1 = 1? Да. Переходим ко второму символу. Второй символ в строке «18:00», это символ «8» Второй символ в строке «10:00», это символ «0» 8 < 0? Нет. 8 = 0? Нет. 8 > 0? Да. Соответственно, 18:00 > 10:00

В данном случае ошибки не происходит, все дело в этом самом принципе сравнения. При установленном у вас формате представления даты, у чисел меньше десяти в начале отсутствует лидирующий ноль. И что в итоге?

  1. Сравним 8:00 и 12:00 Первый символ в строке «8:00», это символ «8» Первый символ в строке «12:00», это символ «1» 8 > 1? Ага. Соответственно, 8:00 > 12:00. А как правильно? А вот так:
  2. Сравним 08:00 и 12:00 Первый символ в строке «08:00», это символ «0» Первый символ в строке «12:00», это символ «1» 0 < 1? Ага. Соответственно, 08:00 < 12:00. Чтобы этого избежать, можно воспользоваться средствами последних версий The Bat!, которые позволяют явно указывать формат времени и даты.

Предлагаю вот такой вот шаблон:

%IF:»%TIME=’hh:mm:ss'»>»06:00:00″:»%IF:’%TIME=»»hh:mm:ss»»‘<’11:59:59′: ‘Доброе утро':»»%%IF:»%TIME=’hh:mm:ss'»>»11:59:59″:»%IF:’%TIME=»»hh:mm:ss»»‘<’17:59:59′: ‘Добрый день':»»%%IF:»%TIME=’hh:mm:ss'»>»17:59:59″:»%IF:’%TIME=»»hh:mm:ss»»‘<’23:59:59′: ‘Добрый вечер':»»%%IF:»%TIME=’hh:mm:ss'»>»00:00:00″:»%IF:’%TIME=»»hh:mm:ss»»‘<’05:59:59′: ‘Доброй ночи':»»%%IF:»%TIME=’hh:mm:ss'»=»00:00:00″:»Доброго времени суток»:»»%

Макрос IF

Многим из нас очень хочется удобства при работе с почтовой программой – и это правильно. Но как этого добиться? Вот в чем вопрос. Пожалуй, одним из достоинств The Bat! является возможность использования макросов. И именно на этих страницах мы рассмотрим макрос %IF. Как же работает этот макрос?

Общий вид

%IF:»Var1″оператор сравнения»Var2″:»Then»:»Else»

Var1 и Var2

Переменные, которые необходимо сравнить. Оператор сравнения: > Больше, < Меньше, = Равно.

Then

Текст, который будет вставлен в шаблон в том случае, если выражение верно, то есть Var1 оператор Var2 = TRUE.

Else

Текст, который будет вставлен в шаблон в том случае, если выражение неверно. Вместо Else можно поставить еще один IF. Все переменные заключены в кавычки. Варианты подстановки текста разделяются символом «:». Наряду со всеми этими переменными можно проставлять результат работы быстрых шаблонов и других макросов.

Рассмотрим пример:

%IF:»%QINCLUDE=»»month»»»=»Jan»:»января»:»»

В роли Var1 используем результат работы быстрого шаблона month: %QINCLUDE=»»month»». Шаблон возвращает некий текст (в данном случае, название месяца), которое извлекается им из поля Date, расположенного в заголовке письма. Две кавычки ставим, чтобы программа не приняла первую из них за закрывающую кавычку переменной Var1.

В роли второй переменной – слово «Jan». Таким образом, мы проверяем, возвращает ли этот быстрый шаблон текст «Jan». ЕСЛИ (Результат работы шаблона) = Jan.

В роли Then выступает текст «января», то есть ЕСЛИ (Результат шаблона) = Jan ТОГДА (Вставить в текст слово Января). А переменная Else пустует. Соответственно, имеем:

ЕСЛИ (Результат) = Jan

ТОГДА (Января)

ИНАЧЕ (Оставить текст в покое)>

Макрос «Цепочка ответов: Re(N)»

Этот макрос подставит вместо себя Re[n], если в оригинальном сообщении (на которое отвечаешь) есть номер, и подставит просто Re без номера в случае, если в оригинальном сообщения номера нет.

%If:’%SetPattRegExp=»Re\[(\d+)\]»%RegExpMatch=»%ReCount»'< >’2′ :’%ReCount':’Re:’

Другими словами, нумерованную цепь он не начнет, но и уже начатую не разорвет. Следовательно, если почтовик вашего собеседника не начнет нумеровать ответы, вся переписка будет с обычным Re:, что и требовалось.

Удаление из писем прикрепленных файлов

Иногда случается так, что приходят письма с большим количеством прикрепленных файлов, а вам необходимо само письмо оставить, а все эти файлы благополучно удалить. И приходиться щелкать мышью каждый файл, нажимать Del и еще отвечать: «Да, я хочу». А можно ли сделать это как-то быстрее? На пример, сразу выделив все файлы, прикрепленные к письму. При хранении отдельно удаление из письма прикрепленных файлов сводится к обычной операции над файлами, хоть из фильтра, хоть при загрузке.

Но имя прикрепленного файла в фильтре извлечь сложно и остается только чистить каталог ATTACH от всех файлов. Если некий ящик используется так, что никакие прикрепленные файлы не нужны, то и всего делов-то – хранение отдельно, фильтр на отправление любого/особого сообщения чистит весь каталог.

Отправлять почту из обычного ящика, а потом создавать копию в специальном – вряд ли можно назвать удачным решением, так как в этом случае, как оказалось, The Bat! не отделяет прикрепленные файлы, а так прямо в теле и сохраняет.

Итак, один способ – ящик с хранением прикрепленных файлов отдельно + DOS команда erace /Q …\ATTACH\*.*

Другой способ – фильтр после отправки экспортирует сообщение по шаблону, удаляет исходное и оставляет The Bat! команду на импорт сохраненного. Хороший способ, красивый, но не столь 100% надежный, первое время за ним надо последить в боевых условиях.

На всякий случай отдельно привожу шаблон сохранения:

FROM TextOnly %SetPattRegexp=»(\w{3})\w*,\s(\w{3})»%RegexpBlindMatch=»%ODateEn»%%SubPatt=»1″ %SubPatt=»2″ %TIME=»d hh:mm:ss yyyy» %SetPattRegexp=»(?ms).*Content-Type»%RegexpMatch=»%HEADERS»: text/plain; charset=windows-1251 Content-Transfer-Encoding: 8bit %TEXT