Фильтрация почты · 4 min read · Dec 29, 2025
Язык SIEVE для фильтрации почты: краткое руководство
Язык SIEVE для фильтрации почты: краткое руководство
Что такое SIEVE?
SIEVE — это язык, созданный и используемый для фильтрации почты, который расширяет возможности фильтрации, обычно предоставляемые почтовыми серверами или приложениями Antispam/Antivirus. Они работают, в основном, сравнивая разные ключи с использованием различных компараторов и методов сравнения по заголовкам почтового сообщения. В зависимости от результата сравнения вы можете применять различные действия к соответствующему почтовому сообщению, т.е. отклонять,discard, перенаправлять и т.д.
Этот язык предоставляет чрезвычайно гибкую методологию фильтрации, так как пользователи могут определять любое количество скриптовых фильтров в соответствии со своими потребностями. Он разработан для легкой реализации как на почтовом клиенте, так и на почтовом сервере (таких как Sendmail, Qmail, Axigen и т.д.), использование скриптов SIEVE не зависит от протокола доступа, архитектуры почты и операционной системы.
SIEVE разработан как предлагаемый интернет-стандарт, в результате многопоставщицкого усилия, которое обсуждалось на различных технических и стандартных публичных и частных встречах как минимум с 1994 года.
Почему использовать фильтры SIEVE
Почтовый трафик для большинства пользователей увеличивается из-за возросшего использования электронной почты, появления нежелательной почты в качестве формы рекламы и увеличения использования почтовых списков.
Существует несколько причин для использования системы фильтрации SIEVE:
- Вы можете создавать эффективные и гибкие правила. Скрипты, написанные на SIEVE, выполняются во время окончательной доставки, когда сообщение перемещается в почтовый ящик, доступный пользователю. Поэтому разумно сортировать, когда MTA помещает почту в почтовый ящик пользователя.
- Скрипты SIEVE являются безопасным методом фильтрации, так как они не работают с содержимым почты, а только извлекают информацию из заголовка почты и принимают меры в соответствии с заранее определенными правилами.
- В дополнение к приложениям Antispam и Antivirus вы можете использовать скрипты SIEVE для фильтрации всех легитимных электронных писем, тем самым повышая скорость и эффективность при использовании электронной почты.
Язык SIEVE
1. Общие аспекты
SIEVE имеет фиксированную форму, описанную как стандарт, но ее можно улучшить с помощью расширений. Механизм расширения работает, если система реализует эти расширения. Чтобы использовать расширение, оно должно быть объявлено в начале файла (скрипта) с помощью директивы require.
require "extension_name"
or
require ["extension_name1", "extension_name2"]Структура SIEVE, как описано в стандарте, определяет 5 действий: keep, fileinto, reject, discard, redirect, которые говорят сами за себя. Она также определяет 3 управляющие команды:
- которая останавливает обработку на этом этапе - структура
- команда require - которая определяет расширение языка.
Структура if имеет следующий вид:
if
elsif
else
где блок — это блок команд (действий и управляющих команд - включая другие if)
В стандартной форме, без каких-либо расширений, тест может быть одним из следующих:
- address - тестирует набор заголовков адреса по отношению к набору ключей с использованием различных методов сравнения;
- envelope - необязательный тест;
- header - тестирует набор заголовков по отношению к набору ключей с использованием различных методов сравнения;
- true, false – константы;
- allof <другие тесты> - логика и между несколькими тестами;
- anyof <другие тесты> - логика или между несколькими тестами;
- not
- отрицание теста; - exists - тест, если набор заголовков существует;
- size - тест по размеру сообщения;
Тест может принимать 2 значения: true или false.
2. Примеры
Простой пример скрипта SIEVE, который переместит все письма, в которых есть “Spam” в теме или которые получены от “[email protected]”, в папку Спам, может быть написан следующим образом:
require "fileinto"
if anyof(address :is ["From", "Sender"] "[email protected]", header :matches "Subject" "Spam")
{
fileinto "Spam";
}Другой, более сложный пример — это фильтр, который отклонит все письма, содержащие вирус, и которые являются исходящими, а не входящими. Этот последний пример использует несколько расширений, которые необходимо реализовать.
require ["envelope","virustest","relational","comparator-i;ascii-numeric","reject"];
if allof(virustest :value "eq" :comparator "i;ascii-numeric" "5",
envelope :contains "From" ["domain1.org", "domain2.org"],
not envelope :contains "To" ["domain1.org", "domain2.org"]) {
reject "Это письмо из domain.org в мир и содержит вирус";
}Для более подробного представления языка SIEVE мы также рекомендуем вам прочитать посвященный
RFC 3028
.
Фильтры SIEVE в почтовом сервере AXIGEN
В настоящее время AXIGEN использует язык SIEVE для определения скриптовых фильтров. Разные пользовательские скрипты SIEVE могут быть включены в любую систему фильтрации AXIGEN. При активации в AXIGEN каждому фильтру присваивается значение приоритета. Понятие приоритета используется для определения порядка фильтров в цепочке фильтрации. Это означает, что фильтры с более высоким приоритетом будут применяться первыми. Все фильтры SIEVE могут быть активированы на нескольких уровнях: сервер, домен или учетная запись/почтовый список.
AXIGEN также реализует расширение SIEVE для отпуска. Это означает, что файлы скриптов SIEVE могут быть созданы и применены для генерации автоматических ответов типа “вне офиса”. Таким образом, автоматически сгенерированные сообщения могут быть отправлены, когда пользователь учетной записи, к которой применяется отпуск, находится в отпуске, вне офиса или в общем отсутствует в течение длительного времени. Хотя это не функция безопасности, расширение отпуска является дополнительной функциональностью, доступной через файлы скриптов. Для простого внедрения “вне офиса” в нашем почтовом сервере, пожалуйста, смотрите этот пример, доступный в нашей базе знаний:
Для получения подробных инструкций по языку SIEVE и реализации скриптов в AXIGEN, пожалуйста, смотрите нашу
онлайн-документацию .
Get new posts in your inbox
No spam. Unsubscribe anytime.