Sieve

Материал из Provizorii
Перейти к: навигация, поиск

Sieveязык программирования, при помощи которого можно фильтровать почтовые сообщения. Он был создан Cyrusoft International, Inc./ISAMET, которые заявили о банкротстве 1 октября 2005 года.

Комментарии

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

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

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

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

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

Структура языка

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

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

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

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

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

Пример

require ["fileinto","reject", "vacation"];
if allof (header :contains  "X-Spam-Flag" "YES") {
     discard ;
}
elsif allof (header :contains "subject" "Заголовок") {
vacation 
:days 1
:addresses "xxx@xxx"
:subject "Project statistics" 
: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>";
 discard ;
}
else {
     keep;
}