Описание параметра conditions
(условие проверки письма)
Элементарное (единичное, простое) условие в общем случае состоит из трех элементов: Поля, Предиката и Образца.
- Поле (field) — «что сравниваем»: какое-то свойство письма, которое требуется проверить.
- Предикат (matcher) — «как сравниваем»: операция сравнения (равно, не равно, содержит, существует и т. п.).
- Образец (pattern) — «с чем сравниваем»: строка-образец с которой осуществляется сравнение выбранного поля.
Условие |
Примеры |
Значение поля
|
|
Значение поля
|
|
Значение поля
|
|
Значение поля
|
|
Поле
|
|
Поле
|
|
Составные (сложные) условия образованы из других условий, как простых так и сложных, с помощью объединения их в логические группы по «И» (все должны быть выполнены) или по «ИЛИ» (достаточно выполнения хотя бы одного).
Условие |
Примеры |
Значение поля
|
|
Условия:
объединены в соответствии с
|
|
Поле
Полное название поля формируется из названия группы (если присутствует) и названия поля, разделенных символом :
— "группа:поле"
или "поле"
.
Некоторые группы, например address
, могут быть опущены, а некоторые, например header
, обязательны.
Множество допустимых полей:
Группа |
Поле |
Описание |
Примеры |
address |
|
email или display-name
|
|
— |
subject |
Тема письма |
|
header |
произвольная строка |
Заголовок письма |
|
— |
body |
Тело письма |
|
attach |
filename |
Название файла-вложения |
|
Предикат
Предикат | Описание |
---|---|
$eq |
Совпадает, равно |
$ne |
Не совпадает, не равно |
$contains |
Содержит |
$not-contains |
Не содержит |
$exists |
Существует (не существует) |
Образец
Образец обычно представляет строку для сравнения заданным способом с содержимым некоторого поля. Если образец трудно представить непосредственно в виде строки, то можно передать его в закодированном виде (base64).
Условие |
Примеры |
Значение поля
|
|
Пример 1: 'От кого' совпадает c 'hello@ya.ru'
address:from=="hello@ya.ru"
{ "address:from": "hello@ya.ru" }
Пример 2: 'От кого' совпадает c 'hello@ya.ru' (задано в base64)
address:from=="fromBase64('aGVsbG9AeWEucnU=')"
{ "from": { "$base64": "aGVsbG9AeWEucnU=" } }
Пример 3: 'От кого' содержит '@yandex.ru' И в теме письма есть 'hello' ИЛИ 'bye'
address:from=="%@yandex.ru%" AND (header:subject=="%hello%" OR header:subject=="%bye%")
{
"address:from": { "$contains": "@yandex.ru" },
"subject": { "$contains": [ "hello", "bye" ] }
}
или
{
"$and": [
{ "address:from": { "$contains": "@yandex.ru" } },
{ "subject": { "$contains": { "$any": [ "hello", "bye" ] } } }
]
}
или
{
"$and": [
{ "address:from": { "$contains": "@yandex.ru" } },
{ "$or": [
{"subject": { "$contains": "hello" } },
{ "subject": { "$contains": "bye"} }
] }
]
}
Пример 4: Присутствует заголовок 'x-yandex-spam'
header:x-spam-flag EXISTS
{ "header:x-spam-flag": { "$exists": true } }
Пример 5: Для заголовока 'x-yandex-spam' задано значение 'yes'
header:x-spam-flag=="yes"
{ "header:x-spam-flag": "yes" }
Пример 6: Для заголовока 'x-yandex-spam' задано значение отличное от 'yes'
header:x-spam-flag!="yes"
{ "header:x-spam-flag": { "$ne": "yes" } }
Грамматика описания условий
%start
: CONDITION
CONDITION
: {}
| { CONDITION_PAIR, ... }
CONDITION_PAIR
: KEY: COMPARISON
| HEADER_KEY: EXIST_VALUE
| "$and": [ CONDITION, ... ]
| "$or": [ CONDITION, ... ]
COMPARISON
: VALUE
| VALUE_LIST
| { OP: VALUE }
| { OP: VALUE_LIST }
KEY
: "address:from"
| "address:to"
| "address:cc"
| "address:tocc"
| "from"
| "to"
| "cc"
| "tocc"
| "subject"
| "body"
| "attach:filename"
| HEADER_KEY
HEADER_KEY
: "header:HEADER_NAME"
OP
: "$eq"
| "$ne"
| "$contains"
| "$not-contains"
VALUE
: STRING
| { "$base64": STRING }
VALUE_LIST
: [ VALUE, ... ]
| { "$any": [ VALUE, ... ] }
| { "$all": [ VALUE, ... ] }
EXIST_VALUE
: { "$exists": BOOLEAN }
HEADER_NAME
: [-_a-zA-Z0-9]+
STRING
: ".*"
BOOLEAN
: true
| false