Описание параметра conditions
Элементарное (единичное, простое) Условие, в общем случае, состоит из трех элементов: Поля, Предиката и Образца.
- Поле (field) — «что сравниваем», какое-то свойство письма, которое требуется проверить.
- Предикат (matcher) — «как сравниваем», операция сравнения (равно, не равно, содержит, существует и т.п.)
- Образец (pattern) — «с чем сравниваем», строка-образец с которой осуществляется сравнение выбранного поля.
Запись условия | Описание | Примеры |
---|---|---|
{ "field": "value" } |
Значение поля field равно value | { "address:from": "friend@mail.ru" } { "attach:filename": "Квитанция.pdf" } |
{ "field": [ "value1", "value2", ... ] } |
Значение поля field равно или value1 , или value2 и т.д. | { "from": [ "Alice", "Bob" ] } |
{ "field": { "operation": "value" } } |
Значение поля field сравнивается со значением value с помощью операции operation | { "subject": { "$contains": "выигрыш" } } { "header:return-path": { "$not-contains": "@gmail.com" } } |
{ "field": { "$base64": "dmFsdWU=" } } |
Значение поля field равно value , записанному в формате base64 | { "address:from": { "$base64": "ZnJpZW5kQG1haWwucnU=" } } |
{ "field": { "$exists": true/false } } |
Поле field существует /не существует (имеет смысл для проверки заголовков) | { "header:return-path": { "$exists": true } } { "header:x-yandex-forward": { "$exists": false } } |
{ "field": { "operation": { "group": [ "value1", { "$base64": "dmFsdWUy" }, ... ] } } } |
Поле field проверяется в соответствии с operation с группой group значений value1 , value2 (задано в base64) и т.д. | { "subject": { "$contains": { "$any": [ "hello", "bye" ] } } } { "body": { "$not-contains": { "$all": [ { "$base64": "0J/RgNC40LLQtdGC" }, { "$base64": "0J/QvtC60LA=" } ] } } |
Запись условия | Описание | Примеры |
---|---|---|
{ "field": "value" } |
Значение поля field равно value | { "address:from": "friend@mail.ru" } { "attach:filename": "Квитанция.pdf" } |
{ "field": [ "value1", "value2", ... ] } |
Значение поля field равно или value1 , или value2 и т.д. | { "from": [ "Alice", "Bob" ] } |
{ "field": { "operation": "value" } } |
Значение поля field сравнивается со значением value с помощью операции operation | { "subject": { "$contains": "выигрыш" } } { "header:return-path": { "$not-contains": "@gmail.com" } } |
{ "field": { "$base64": "dmFsdWU=" } } |
Значение поля field равно value , записанному в формате base64 | { "address:from": { "$base64": "ZnJpZW5kQG1haWwucnU=" } } |
{ "field": { "$exists": true/false } } |
Поле field существует /не существует (имеет смысл для проверки заголовков) | { "header:return-path": { "$exists": true } } { "header:x-yandex-forward": { "$exists": false } } |
{ "field": { "operation": { "group": [ "value1", { "$base64": "dmFsdWUy" }, ... ] } } } |
Поле field проверяется в соответствии с operation с группой group значений value1 , value2 (задано в base64) и т.д. | { "subject": { "$contains": { "$any": [ "hello", "bye" ] } } } { "body": { "$not-contains": { "$all": [ { "$base64": "0J/RgNC40LLQtdGC" }, { "$base64": "0J/QvtC60LA=" } ] } } |
Составные (сложные) условия могут быть образованы из других условий, как простых так и сложных, с помощью объединения их в логические группы по «И» (все должны быть выполнены) или по «ИЛИ» (достаточно выполнения хотя бы одного).
Запись условия | Описание | Примеры |
---|---|---|
{ "field1": "value1", "field2": { "operation": "value2" } } |
Значение поля field1 равно value1 , И при этом значение field2 соответсвует value2 (согласно предикату operation ) |
{ "from": "friend@mail.ru", "attach:filename": "Квитанция.pdf" } |
{ "logic-operation": [ { "field1": "value1" }, { "field2": { "operation": "value2" } } ]} |
Условия: - значение поля field1 равно value1 - значение field2 соответсвует value2 (согласно предикату operation )объединены в соответствии с logic-operation (И или ИЛИ) |
{ "$and": [ { "from": "friend@mail.ru" }, { "attach:filename": "Квитанция.pdf" }]} { "$or": [ { "from": "friend@mail.ru" }, { "attach:filename": "Квитанция.pdf" }]} |
Запись условия | Описание | Примеры |
---|---|---|
{ "field1": "value1", "field2": { "operation": "value2" } } |
Значение поля field1 равно value1 , И при этом значение field2 соответсвует value2 (согласно предикату operation ) |
{ "from": "friend@mail.ru", "attach:filename": "Квитанция.pdf" } |
{ "logic-operation": [ { "field1": "value1" }, { "field2": { "operation": "value2" } } ]} |
Условия: - значение поля field1 равно value1 - значение field2 соответсвует value2 (согласно предикату operation )объединены в соответствии с logic-operation (И или ИЛИ) |
{ "$and": [ { "from": "friend@mail.ru" }, { "attach:filename": "Квитанция.pdf" }]} { "$or": [ { "from": "friend@mail.ru" }, { "attach:filename": "Квитанция.pdf" }]} |
Поле
Полное название поля формируется из названия группы (если присутствует) и названия поля разделенных символом :
- "группа:поле"
или "поле"
. Некоторые группы, например address
, могут быть опущены, а некоторые, например header
, обязательны.
Множество допустимых полей
Группа | Поле | Описание | Примеры |
---|---|---|---|
address | from to cc tocc |
email или display-name - отправителя - получателя - получателя копии - получателя или получателя копии |
address:from from address:to ... address:tocc tocc |
subject | Тема письма | subject |
|
header | произвольная строка | Заголовок письма | header:x-yandex-spam header:return-path ... |
body | Тело письма | body |
|
attach | filename | Название файла-вложения | attach:filename |
Группа | Поле | Описание | Примеры |
---|---|---|---|
address | from to cc tocc |
email или display-name - отправителя - получателя - получателя копии - получателя или получателя копии |
address:from from address:to ... address:tocc tocc |
subject | Тема письма | subject |
|
header | произвольная строка | Заголовок письма | header:x-yandex-spam header:return-path ... |
body | Тело письма | body |
|
attach | filename | Название файла-вложения | attach:filename |
Предикат
Предикат | Описание |
---|---|
$eq |
Совпадает, равно |
$ne |
Не совпадает, не равно |
$contains |
Содержит |
$not-contains |
Не содержит |
$exists |
Существует (не существует) |
Предикат | Описание |
---|---|
$eq |
Совпадает, равно |
$ne |
Не совпадает, не равно |
$contains |
Содержит |
$not-contains |
Не содержит |
$exists |
Существует (не существует) |
Образец
Образец обычно представляет строку для сравнения заданным способом с содержимым некоторого поля. Если образец трудно представить непосредственно в виде строки, то можно передать его в закодированном виде, base64.
Запись условия | Описание | Примеры |
---|---|---|
{ "field": { "$base64": "dmFsdWU=" } } |
Значение поля field равно value , записанному в формате base64 | { "address:from": { "$base64": "ZnJpZW5kQG1haWwucnU=" } } |
Запись условия | Описание | Примеры |
---|---|---|
{ "field": { "$base64": "dmFsdWU=" } } |
Значение поля field равно value , записанному в формате base64 | { "address:from": { "$base64": "ZnJpZW5kQG1haWwucnU=" } } |
address:from=="hello@ya.ru"
{ "address:from": "hello@ya.ru" }
Скопировано
address:from=="fromBase64('aGVsbG9AeWEucnU=')"
{ "from": { "$base64": "aGVsbG9AeWEucnU=" } }
Скопировано
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"} } ] } ] }
Скопировано
header:x-spam-flag EXISTS
{ "header:x-spam-flag": { "$exists": true } }
Скопировано
header:x-spam-flag=="yes"
{ "header:x-spam-flag": "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
Скопировано