Sieve


Sieve

Sieve — язык описания правил фильтрации для почтовых сообщений. Создан компанией Cyrusoft International, Inc./ISAMET во время работы над почтовым сервером Cyrus (англ.).

Содержание

История

  • В январе 2001 года спецификация языка была описана в RFC 3028 (автор — Tim Showalter).
  • В сентябре 2003 года было утверждено расширение «Sieve Email Filtering — Subaddress Extension»: RFC 3598 (K. Murchison, Oceana Matrix Ltd.)
  • В феврале 2004 года было утверждено расширение «SIEVE Email Filtering: Spamtest and VirusTest Extensions»: RFC 3685 (C. Daboo, Cyrusoft International, Inc.)
  • Компания Cyrusoft объявила о банкротстве 1 октября 2005 года. После этого работа над Sieve была продолжена сообществом opensource, в том числе рабочей группой Sieve организации IETF.
  • В 2008 году была утверждена новая спецификация языка в RFC 5228 и множество расширений.

Расширения

В январе 2008 года рабочая группа Sieve[1] обновила базовую спецификацию языка, создав RFC 5228 на замену первоначальному RFC 3028, и добавила следующие расширения в статусе "Предложение к стандартизации" (англ. Proposed Standard):

  • RFC 5173 (англ.) — «Sieve Email Filtering: Body Extension» — расширение для проверки скриптом не только заголовков, но и тела (текста) сообщения.
  • RFC 5229 (англ.) — «Sieve Email Filtering: Variables Extension» — позволяет скрипту сохранять и читать значения переменных.
  • RFC 5230 (англ.) — «Sieve Email Filtering: Vacation Extension» — описывает действия по отправке ответа, информирующего отправителя о том, что получатель может отсутствовать.
  • RFC 5231 (англ.) — «Sieve Email Filtering: Relational Extension» — описывает относительные проверки, также пожно проверять не только значение поля, но и число вхождений проверямого значения в поля заголовка и конверта сообщения.
  • RFC 5232 (англ.) — «Sieve Email Filtering: Imap4flags Extension» — позволяет скрипту проверять и устанавливать флаги IMAP4 для сообщения.
  • RFC 5233 (англ.) — «Sieve Email Filtering: Subaddress Extension» — позволяет скрипту проверять «субадреса» — адреса вида "user+detail@domain.example" (адреса такого вида используются в sendmail в virtusertable).
  • RFC 5235 (англ.) — «Sieve Email Filtering: Spamtest and Virustest Extensions» — позволяют скрипту взаимодействовать с антивирусами и программами детектирования спама.

В дальнейшем этой рабочей группой было добавлено множество расширений в том же статусе "Предложение к стандартизации":

  • RFC 5293 (англ.) — «Sieve Email Filtering: Editheader Extension» — позволяет скрипту добавлять и удалять поля заголовка письма.
  • RFC 5429 (англ.) — «Sieve Email Filtering: Reject and Extended Reject Extensions» — позволяет отвергнуть сообщения на этапе LMTP/SMTP либо с уведомлением MDN (англ. Message Disposition Notifications) или DSN ((англ. Delivery Status Notification).
  • RFC 5435 (англ.) — «Sieve Email Filtering: Extension for Notifications» — позволяет скрипту переключить «внешние» уведомления об ожидающей доставки почты (например, отправить SMS или сообщение XMPP).
  • RFC 5436 (англ.) — «Sieve Notification Mechanism: mailto» — описывает уведомления по электронной почте.
  • RFC 5437 (англ.) — «Sieve Notification Mechanism: Extensible Messaging and Presence Protocol (XMPP)» — описывает профиль для отправки уведомлений посредством XMPP (Jabber).
  • RFC 5490 (англ.) — «The Sieve Mail-Filtering Language — Extensions for Checking Mailbox Status and Accessing Mailbox Metadata» — позволяет проверить наличие почтового ящика и создать почтовый ящик.
  • RFC 5703 (англ.) — «Sieve Email Filtering: MIME Part Tests, Iteration, Extraction, Replacement, and Enclosure» — позволяет анализировать и манипулировать MIME-частями тела сообщения.

Документы в разработке (статус «Draft»):

Разработка новых расширений продолжается.

Синтаксис языка

Комментарии

Как и любой язык, Sieve имеет комментарии. Существуют два типа комментариев: многострочные и однострочные.

Многострочные комментарии состоят из нескольких строк, должны начинаться с символов «/*» и заканчиваться «*/».

/*
это 
многострочный 
комментарий 
*/ 

Однострочные комментарии комментируют только одну строку, в начале которой стоит «#».

# это 
# однострочные 
# комментарии

Структурные операторы

[ .. ] 
Квадратные скобки используются для группировки элементов. Например, ["user1@domain.ru", "user2@domain.ru", "user3@domain.ru"] определяет группу почтовых ящиков.
{ .. } 
Фигурные скобки используются для создания группы действий, который будут выполнены, если условие выполняется.
if 
Сравнивает определённые параметры. Если они истинны, то выполняется определённый блок операторов.
elsif 
Если используется несколько сравнений, то лучше всего использовать elsif. Действие аналогично if.
else 
Если ни одно из вышеследующих условий не выполнилось, то выполняются операторы, заключенные в { .. } после else.
stop 
Останавливает обработку письма.

Действия над письмами

keep 
Сохраняет копию сообщения в каталоге по умолчанию.
fileinto "каталог" 
Перемещает письмо в указанный каталог. Если он не существует, то письмо сохраняется в каталоге по умолчанию, и больше никаких действий не выполняется.
discard 
Удаляет письмо. Уведомление об удалении не отсылается.
reject "<причина>" 
Возвращает отправителю письмо, в котором указывается причина ошибки доставки.
redirect "<почтовый ящик>" 
Перенаправляет сообщение на указанный почтовый ящик. Копия сообщения не создается.
vacation <параметры> 
Автоматически отвечает на письмо.

Операторы сравнения

size 
Сравнивает размер полученного письма с определённым размером. Можно указать размер в байтах, килобайтах и мегабайтах, для этого нужно указать KB или MB (для килобайт или мегабайт соответственно) после необходимого размера файла.
header 
Сравнивает заголовок письма с определёнными параметрами.
address 
Сравнивает только поле адреса.
allof(<параметры>) 
Сравнивает несколько значений, которые указаны как параметры. Возвращает истину, если все условия выполняются.
anyof(<параметры>) 
Сравнивает несколько значений, которые указаны как параметры. Возвращает истину, если хотя бы одно условие выполняется.
true 
Имеет всегда истиное значение.
false 
Имеет всегда ложное значение.
not <параметр> 
Если параметр имеет значение ложь, то всё выражение имеет значение истина.

Пример

require ["fileinto", "vacation"];

#
# удаляем все письма, отмеченные сервером как спам
#

if header :is "X-Spam-Flag" "YES" {
    discard; # поверим Spam Assassin
}

#
# Письма, относящиеся к Важному Проекту, положим в специальную папку
#

if anyof(
    address :domain "from" "important.ru",
    address "from" [
        "important.personal@gmail.com",
        "important.other@gmail.com"
    ],
    address ["to","cc","bcc"] "projects.important@mycompany.ru"
) {
    fileinto "Customers.Important";
}

#
# В ответ на письмо из своей компании с запросом отчёта, немедленно ответим :)
#

if allof (address :domain "from" "mycompany.ru", header :contains "subject" ["отчет", "отчёт"]) {
    vacation :days 1 :addresses "reports@mycompany.ru" :subject "В ответ на ваш запрос" :mime
"MIME-Version: 1.0
Content-Type: text/html; charset=KOI8-R
Content-Transfer-Encoding: 7bit
<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
<HTML><HEAD><META http-equiv=Content-Type content=\"text/html; charset=windows-KOI8-R\">
</HEAD><BODY>К сожалению, отчёт пока выслать не могу. (Это пример ответа на письмо с заданным заголовком.)</BODY></HTML>";
}

Ссылки

  1. Sieve working group charter (англ.)



Wikimedia Foundation. 2010.

Смотреть что такое "Sieve" в других словарях:

  • Sieve — ist eine domänenspezifische Sprache, die zum Konfigurieren von Mailfiltern auf Mailservern durch Benutzer konzipiert wurde. Die genaue Spezifikation kann im RFC 5228 nachgelesen werden. Sieve ist spezifiziert worden, um Nutzern die Möglichkeit zu …   Deutsch Wikipedia

  • Sieve — (du mot anglais crible comme dans le crible d Ératosthène) est un langage de filtrage du courrier électronique. Il est normalisé dans le RFC 5228. Sieve permet de filtrer sur les en têtes d un message qui suit le format du RFC 5322, c est à dire… …   Wikipédia en Français

  • Sieve — Sieve, n. [OE. sive, AS. sife; akin to D. zeef, zift, OHG. sib, G. sieb. [root]151a. Cf. {Sift}.] 1. A utensil for separating the finer and coarser parts of a pulverized or granulated substance from each other. It consist of a vessel, usually… …   The Collaborative International Dictionary of English

  • sieve — ► NOUN ▪ a utensil consisting of a wire or plastic mesh held in a frame, used for straining solids from liquids or separating coarser from finer particles. ► VERB 1) put through a sieve. 2) (sieve through) examine in detail. ORIGIN Old English …   English terms dictionary

  • sieve — sieve; sub·sieve; …   English syllables

  • sieve — [siv] n. [ME sive < OE sife, akin to Ger sieb < IE base * seip , to drip > SEEP] a utensil having many small meshed or perforated openings, used to strain solids from liquids, to separate fine particles of loose matter from coarser ones …   English World dictionary

  • Sieve — Sieve. См. Сито. (Источник: «Металлы и сплавы. Справочник.» Под редакцией Ю.П. Солнцева; НПО Профессионал , НПО Мир и семья ; Санкт Петербург, 2003 г.) …   Словарь металлургических терминов

  • Sieve — Sieve, Nebenfluß des Arno in der toscanischen Provinz Florenz, entspringt auf den Monti della Calvaua, mündet nach 61/2 Meilen langem Laufe durch ein schönes Thal bei Pontasieve …   Pierer's Universal-Lexikon

  • Siēve — Siēve, rechter Nebenfluß des Arno in der ital. Provinz Florenz, entspringt am Südabhang des Etruskischen Apennin, durchfließt in südöstlich, dann südwestlich gerichtetem Lauf die Landschaft Mugello und mündet, 64 km lang, bei Pontassieve …   Meyers Großes Konversations-Lexikon

  • sieve — index screen (select), sort Burton s Legal Thesaurus. William C. Burton. 2006 …   Law dictionary