Мобильная версия

Электронная библиотека

Программисту веб-дизайнеру

Другие материалы

Клиентский JavaScript. Руководство по Использованию

Приложение A
Почтовые Фильтры

В этом приложении показано, как применять JavaScript для фильтрации входящей почты и новостей при использовании Netscape Messenger.

Процесс фильтрации состоит из двух этапов:

  • Написать функцию JavaScript для работы в качестве фильтра и поместить ее в файл фильтров. Эта функция принимает один аргумент, объект сообщения, и может изменять это сообщение.
  • Добавить вхождения этой JavaScript-функции в файл правил/mail rules file. Ваш rules-файл может содержать несколько фильтров. Messenger применяет каждый фильтр к сообщению, пока один из них не сработает.
  • В приложении имеются следующие разделы:

  • Создание фильтра и добавление его в rules-файл
  • Фильтры новостей
  • Обращение к объекту сообщения
  • Отладка фильтров
  • Более сложный пример
  • Создание фильтра и добавление его в rules-файл

    Сначала нужно написать файл filters.js. Он содержит функции JavaScript, которые выполняют фильтрацию почты. Эти функции могут использовать все возможности клиентского JavaScript. Размещение этого файла зависит от платформы, как показано в следующей таблице.


    Платформа
    Размещение файла

    Unix

    $(HOME)/.netscape/filters.js

    где $(HOME) это директория, в которой установлен Navigator.

    Windows

    \Program Files\Communicator\Users\<username>\Mail\filters.js

    Macintosh

    filters.js в корневой директории каталога Вашего профиля.

    Вот пример простого файла фильтра. Он сохраняет все сообщения от my_mom в папке "FromMom" и помечает их как имеющие приоритет high. Он также высылает все сообщения из my_sister в папку trash.

    // файл filters.js
    
    function MomFilter(message) {
    if (message.from.indexOf("my_mom@mothers.net") != -1) {
       message.priority = "High";
       message.folder = "mailbox:FromMom";
    }
    else if (message.subject.indexOf("my_sister@sisters.net") != -1) {
       message.trash();
    }
    }

    ПРИМЕЧАНИЕ: Нет способа специфицировать папку IMAP через использование синтаксиса mailbox:. Поэтому, если Вы перераспределяете что-либо с использованием IMAP, все это будет происходить на Вашей локальной машине.

    После того как функция фильтра JavaScript написана, Вы добавляете ссылку на этот фильтр в Ваш файл почтовых правил/mail rules file. Размещение rules-файла также зависит от платформы, как показано в следующей таблице.


    Платформа
    Размещение файла

    Unix

    $(HOME)/.netscape/mailrule
    где $(HOME) это директория, в которой установлен Navigator.

    Windows

    \Program Files\Communicator\Users\<username>\Mail\rules.dat

    Macintosh

    Filter Rules в корневой директории каталога Вашего профиля.

    Как правило этот файл записывается системой фильтрации Netscape Messenger'а. Если у Вас уже есть файл фильтров, добавьте в него следующие строки:

    name="filterName"
    enabled="yes"
    type="2"
    scriptName="scriptName"

    где

    name="filterName"

    Описательное имя фильтра.

    enabled="yes"

    Использовать этот фильтр. Для отключения фильтра запишите enabled="no".

    type="2"

    Пометить этот фильтр как фильтр JavaScript.

    scriptName="scriptName"

    Выполняемая функция JavaScript.

    Реальный ввод может быть таким:

    name="Filter for Mom"
    enabled="yes"
    type="2"
    scriptName="MomFilter"

    Вы можете добавлять несколько таких групп строк в Ваш rules-файл, добавляя таким образом несколько фильтров. Они выполняются в указанном в файле порядке, пока один из ник не выполнит действия над сообщением (установит свойство или вызовет метод).

    Если у Вас еще нет rule-файла почты, Вы должны будете добавить две строки вверху файла (до любых ссылок на фильтры):

    version="6"
    logging="no"

    Фильтры новостей

    Все сказанное выше rule-файла относится и к фильтрам новостей. Единственное  отличие - в строке type. Для фильтров почты Вы используете type="2". Для фильтров новостей Вы используете type="8".

    Обращение к объекту сообщения

    Функции фильтра принимают один аргумент, объект сообщения. Для фильтров новостей это объект News Message, а для фильтров почты - объект Mail Message.

    Почтовые сообщения

    Объект почтового сообщения имеет следующие методы:


    Метод
    Описание
    killThread()

    Помечает поток как игнорируемый.

    watchThread()

    Помечает поток как наблюдаемый.

    trash()

    Помечает сообщение как прочитанное и перемещает его в папку trash/мусор.

    Объект почтового сообщения имеет следующие свойства:


    Свойство
    Описание
    folder

    Папка, содержащая данное сообщение.

    read

    Прочитано сообщение или нет.

    priority

    Приоритет сообщения.

    Для перемещения почтового сообщения Вы устанавливаете свойство folder объекта сообщения. Можно использовать полный путь или синтаксис mailbox: в URL для специфицирования папки назначения.

    Свойство priority можно устанавливать, используя целые числа или строки. Возможные значения:

  • None
  • Lowest
  • Low
  • Normal
  • High
  • Highest
  • Шапки/Headers сообщений

    Помимо свойств, приведенных выше, объект почтового сообщения предоставляет все шапки /headers сообщения как свойства только для чтения. Так, тема сообщения может быть получена как message.subject, а список CC как message.cc. Шапки с дефисами в именах (как Resent-from) не могут быть получены с dot-синтаксисом. Запрашивайте их с использованием синтаксиса массива для значения свойства (как message["Resent-from"]).

    Сообщение новостей

    Объект сообщения новостей/News Message имеет следующие методы:


    Метод
    Описание
    killThread()

    Помечает поток как игнорируемый.

    watchThread()

    Помечает поток как наблюдаемый.

    Объект сообщения новостей имеет следующие свойства:


    Свойство
    Описание
    group

    (Только для чтения) Группа новостей, содержащая данное сообщение.

    read

    Прочитано сообщение или нет.

    sender

    (Только для чтения) Отправитель сообщения.

    subject

    (Только для чтения) Тема сообщения.

    Отладка фильтров

    Если с фильтрами имеются какие-нибудь проблемы, Вы можете получить стандартное предупреждение JavaScript о природе ошибки. При наличии проблем, фильтры не используются для фильтрации сообщений. Соответственно, если проблемы имеются, вся почта в папке Inbox остается без изменений.

    Более сложный пример

    Этот файл фильтра дает Вам возможность легко выполнять различные изменения сообщения. Сначала используются инициализаторы объектов для создания массива объектов. Каждый их этих объектов представляет набор сообщений и действия функции с сообщениями этого набора. Эти объекты могут иметь следующие свойства:

    field

    Поле, относительно которого выполняется подстановка (такое как From или Resent-From).

    probe

    Значение совпадающего поля.

    folder

    Почтовая папка, в которую поместить сообщение.

    trash

    True, если сообщение нужно поместить в папку Trash.

    priority

    Новый приоритет сообщения.

    После получения массива фильтров, код создает из этих фильтров регулярные выражения для использования при подстановках к конкретным сообщениям. Если Messenger вызывает ApplyFilters для сообщения, производится поиск совпадений в массиве MyFilters. Если совпадение найдено, функция помещает сообщение в trash, перемещает сообщение в новую папку или изменяет приоритет сообщения.

    var MyFilters = [
    {field:"From",        probe:"cltbld@netscape.com",      folder:"mailbox:Client Build"},
    {field:"From",        probe:"scopus@netscape.com",      folder:"mailbox:Scopus"},
    {field:"Resent-From", probe:"bonsai-hook@warp.mcom.com", trash:true"},
    {field:"Resent-From", probe:"xheads@netscape.com",       folder:"mailbox:X Heads"},
    {field:"Resent-From", probe:"layers@netscape.com",       priority:"High"}
    ];
    // Инициализация путем компиляции регулярного выражения для каждого фильтра
    for (var i = 0; i < MyFilters.length; i++) {
    var f = MyFilters[i];
    f.regexp = new RegExp("^" + f.field + " *:.*" + f.probe, "i");
    }
    function ApplyFilters(message)
    {
    trace("Applying mail filters");
    for (var i = 0; i < MyFilters.length; i++) {
       var f = MyFilters[i];
       if (f.regexp.test()) {
          if (f.trash) {
             message.trash();
          } else if (f.folder) {
             message.folder = f.folder;
          } else {
             message.priority = f.priority;
             continue;
          }
          break;
       }
    }
    }

    Оглавление | Назад | Вперед | Индекс

    Мобильная версия

    Сайт для компьютера
    http://www.mat.net.ua