Sieve — язык описания правил фильтрации для почтовых сообщений. Создан компанией Cyrusoft International, Inc./ISAMET, которая объявила о банкротстве 1 октября 2005 года.
Комментарии
Как и любой язык, 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","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;
}
Ссылки
- Sieve.Info — Wiki-сайт с информацией о Sieve (Английский)
- RFC 5228 — Спецификация языка Sieve (Английский)
- Онлайн проверка синтаксиса Sieve