Фильтрация входящей почты по адресу отправителя, теме и содержимому письма. Черные списки

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

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

Также рекомендуется добавлять в "Черный список отправителей письма" адреса серверов исходящей почты.

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

Процесс фильтрации входящей почты реализуется следующим образом:

  1. Пользователь формирует черные списки — заполняет системные справочники:

    • "Черный список отправителей письма";
    • "Черный список значений темы письма";
    • "Черный список значений содержимого письма".

    Название элемента справочника соответствует элементу черного списка. Название может содержать 350 символов и пробелы. При сопоставлении полей письма с элементами черного списка перевод строки как пробел не воспринимается.

    Новые элементы добавляются в справочники по общим правилам, см. Настройка папок и элементов справочника. Код элемента справочника является уникальным идентификатором элемента в справочнике, при формировании черных списков не используется.

  2. Система фильтрует входящие сообщения по адресу отправителя, теме или содержимому письма — на этапе первоначальной обработки входящей почты выполняется системная проверка: значения полей письма: "От: (Адрес отправителя)", "Тема письма", "Содержимое письма" сопоставляются с названиями элементов соответствующих системных справочников.

    Проверка осуществляется по логическому ИЛИ.

    • Для поля "Адрес отправителя" проверяется совпадение значения поля и названия элемента справочника "Черный список отправителей письма" (без учета регистра).
    • Для полей "Тема письма" и "Содержимое письма" в значении поля ищется сочетание, заданное в названии элемента справочника "Черный список значений темы письма" и "Черный список значений содержимого письма".

    В результате проверки заполняется следующие параметры переменной result:

    • result.rejected — true, если письмо отклонено (rejected), иначе false
    • result.rejectReason — код причины отклонения (если письмо было отклонено). В случае отклонения по причине попадания в черный список значение равно константе api.mail.BLACKLIST_REJECT_REASON
    • result.rejectMessage — текстовое описание причины отклонения (если письмо было отклонено). В случае отклонения по причине попадания в черный список данное описание, в частности, содержит название справочника, в котором было найдено соответствие (например, "Черный список значений темы письма").
  3. Скрипт обработки входящей почты определяет логику обработки входящих сообщений, попавших в черные списки. Описание скриптовых методов работы с почтой см. api.mail Обработка почты.

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

    Copy
    if (!api.mail.isSystemEmailAddress(message.from.address))
    {
    String notification = "Уважаемый пользователь!\nВаше письмо было отклонено.\n\nПричина, по которой письмо отклонено: "
    def reason = result.getRejectReason() // получаем причину почему письмо было отклонено
    String message = result.getRejectMessage() // получаем текстовое описание причины
    if (api.string.isEmpty(message))
    {
    result.reject(reason)
    notification += reason.toString()
    }
    else
    {
    result.reject(reason, message)
    notification += message
    }
    def respondBody = "Вы писали: " + message.getBody()
    notifySender(notification + '\n' + respondBody)

Фильтрация входящей почты не производится в следующих случаях:

  • Не задано ни одного значения в справочниках: "Черный список отправителей письма", "Черный список значений темы письма" или "Черный список значений содержимого письма".
  • В скрипте обработки почты не определено отклонение от дальнейшей обработки писем, содержащих в адресе отправителя, теме или содержимом письма элементы черного списка.