Перейти к содержимому


Фото
- - - - -

Проверка почты по контексту


  • Please log in to reply
8 ответов в этой теме

#1 AlexZ_NSK

AlexZ_NSK

    Newbie

  • Posters
  • 12 Сообщений:

Отправлено 01 Июнь 2019 - 17:05

Добрый день!

 

Подскажите пожалуйста, можно ли использовать Dr.Web для почтовых серверов UNIX для поиска определенного контекста в письмах и выполнения некоторых действий?

Например, если в теме письма(или в содержимом) есть слово "Продам" то переслать это письмо на определенные адреса администратора, но не доставлять письмо получателю?

Либо тоже самое делать по содержанию ключевых слов или доменов в поле From.

 

Не могу найти легкого решения этой задачи.

 



#2 Denis G.

Denis G.

    Newbie

  • Members
  • 27 Сообщений:

Отправлено 01 Июнь 2019 - 20:24

Добрый день.

Начиная с версии 11.1 появилась возможность написания собственных сценариев обработки писем на Lua. Все изложенные вами сценарии реализуемы и некоторые из них разбирались в соседней теме. Если будут трудности или какие-то вопросы, обращайтесь, мы постараемся помочь.


Сообщение было изменено Denis G.: 01 Июнь 2019 - 20:25


#3 AlexZ_NSK

AlexZ_NSK

    Newbie

  • Posters
  • 12 Сообщений:

Отправлено 01 Июнь 2019 - 20:35

Спасибо за информацию, пока не вдавался в изучение Lua. Хочется понять, реализуемы ли мои хотелки технически.

 

Еще один ньюанс забыл упомянуть, слок которые ищем в контенте может быть много(20-100) и они должны храниться либо в БД либо в файле(построчно).

Кроме того не должно быть проблем с кодировкой при поиске русских ключевых слов.

 

Способен ли на такое Lua ?



#4 Denis G.

Denis G.

    Newbie

  • Members
  • 27 Сообщений:

Отправлено 01 Июнь 2019 - 20:47

Да, с помощью сценариев на Lua, использующих наше API, этот функционал можно реализовать. Это не очень сложно. Примеры поиска текста в заголовке и теле сообщения есть опять таки в соседней теме (тут и тут). Поддержка запросов к базам данных тоже есть, про это подробнее в документации (модуль drweb.lookup и соответствующий компонент Dr.Web LookupD).



#5 Boris Savelev

Boris Savelev

    Member

  • Beta Testers
  • 154 Сообщений:

Отправлено 03 Июнь 2019 - 12:46

как раз в https://forum.drweb.com/index.php?showtopic=331517&p=865700 дан пример с хранением слов в файле:

local dw = require 'drweb'
local rx = require 'drweb.regex'

-- загрузка списка слов для поиска в теме
local subject_bad_words = dw.load_array('/opt/drweb.com/lists/bad_words_subject.txt')

-- загрузка списка слов для поиска в теле сообщения
local body_bad_words = dw.load_array('/opt/drweb.com/lists/bad_words_body.txt')

function milter_hook(ctx)
    -- поиск по заголовку Subject
    local subject = ctx.message.header.value('Subject') or ''

    if rx.search(subject_bad_words, tostring(subject), rx.ignore_case) then
        return {action = 'reject'}
    end

    -- поиск слов в текстовых частях сообщения
    for text_part in ctx.message.text_parts() do
        if text_part.search(body_bad_words) then
            return {action = 'reject'}
        end 
    end

    return {action = 'accept'}
end

Сообщение было изменено Boris Savelev: 03 Июнь 2019 - 12:47

telegram: @bsavelev


#6 Afalin

Afalin

    Guru

  • Dr.Web Staff
  • 5 835 Сообщений:

Отправлено 03 Июнь 2019 - 15:36

Оно тут загружается на каждый вызов скрипта или где-то внутри кэшируется, кстати?


Семь раз отрежь – один раз проверь

#7 Denis G.

Denis G.

    Newbie

  • Members
  • 27 Сообщений:

Отправлено 03 Июнь 2019 - 17:27

В таком виде один раз загружается и кэшируется в локальной переменной. При обновлении конфига будет загружаться заново. Если же написать внутри хука, то load_array будет каждый раз выполняться.



#8 usverg

usverg

    Advanced Member

  • Posters
  • 700 Сообщений:

Отправлено 18 Июнь 2019 - 09:14

Хм.... А не проще эту задачу решать фильтрами транспорта (exim-а, к примеру)? А то как-то похоже на новый велосипед становится....


But a thing of beauty, I know, will never fade away...


#9 Boris Savelev

Boris Savelev

    Member

  • Beta Testers
  • 154 Сообщений:

Отправлено 18 Июнь 2019 - 17:36

фильтр exim не умеет по нашим dws url проверять.

А раз нам пришлось разбирать содержимое, то остальное досталось почти даром.


telegram: @bsavelev



Читают тему: 0

0 пользователей, 0 гостей, 0 скрытых