Работа со строковыми значениями

Пожалуйста, обратите внимание, что во всех правилах и параметрах подключаемых модулей, использующих значение некоторого заголовка или части письма, следует учитывать кодировку, в которой встречается искомый текст.

Значения не на латинице, заданные «напрямую», будут совпадать только в том случае, если кодировка искомого текста совпадет с кодировкой, в которой создан конфигурационный файл. Если требуется использовать значения в других кодировках, следует вставить в качестве значения строку, преобразованную в нужную кодировку и закодированную с использованием транспортного кода, например base64. Итоговое строковое значение должно быть приведено к выражению вида:

=?<source_enc>?<B|Q>?<coded_text>?=

где:

<source_enc> – исходная кодировка текста (например, UTF-8, CP1251 и т.п.);

<B|Q> – обозначение использованной транспортной кодировки (B - base64, Q - quoted-printable);

<coded_text> – закодированное строковое значение.

Обратите внимание, что если полученное значение должно трактоваться как регулярное выражение, то символы, которые играют в регулярных выражениях роль специальных (например, сам символ ?), должны быть дополнительно экранированы двойным обратным слэшем '\\'.

Пример:

Пусть требуется искать письма, содержащие в заголовке слово «тест», написанное на русском языке, с использованием кириллицы в кодировке CP1251. В этой кодировке, если ее перевести в транспортную кодировку base64, строка будет иметь вид 8uXx8go=.

Для получения строк в нужной кодировке воспользуйтесь, например, утилитами iconv и base64. Нижеприведенный пример преобразует строку символов «тест», введенную в кодировке UTF-8, в строку символов в кодировке CP1251, а затем получается ее представление с использованием base64:

echo "тест" | iconv -f utf-8 -t cp1251 | base64

Примеры использования в подключаемых модулях:

1. Чтобы модуль Dr.Web Modifier мог выбрать заголовок, состоящий из слова «тест» в кодировке CP1251, необходимо написать следующее условие выборки в правиле модификации:

select mime.headers Subject "=\\?cp1251\\?B\\?8uXx8go=\\?="

2. Чтобы модуль Vaderetro прибавлял к заголовкам писем слово «тест» в кодировке CP1251, необходимо написать:

SubjectPrefix = "=?cp1251?B?8uXx8go=?="

3. Чтобы модуль Dr.Web HeadersFilter отклонял письма, заголовок которых содержит слово «тест» в кодировке CP1251, необходимо написать:

RejectCondition = Subject = "=\\?cp1251\\?B\\?8uXx8go=\\?="