Фильтрация почты · 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, пожалуйста, смотрите нашу

онлайн-документацию .

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.