Страница 1 из 1

exim анализ даты

Добавлено: 2007-10-05 10:55:30
cyrus_user
Привет. просматривая спам нашёл несуществующие даты или дата 01.01.1770 в хедере письма.

Код: Выделить всё

Date: Wed, 35 Sep 2007 16:57:11 +0600
где то в exim уже организованна проверка вот таких дат?

Re: exim анализ даты

Добавлено: 2007-10-05 15:21:20
Alex Keda
помоему - нет.
да и зачем? может оно и правда тогда отправлено было, просто в очереди лежало? :))
=========
однако - можешь руками привернуть

Re: exim анализ даты

Добавлено: 2007-10-08 4:23:14
cyrus_user
отправлено 35 сентября?
поиск по корпоративному имапу выявил такие даты только в письмах спам ящиков (около 90 тыс писем). думаю выборка неплохая, чтобы составить правило и накинуть балы. И раз в exim нет, сделаю сам.

Re: exim анализ даты

Добавлено: 2007-10-08 7:50:25
Alex Keda
в exim есть средства для реализации такого.
а остальное - вопрос рук :)
=========
а про 35 сентября - прикольно :) Надо глянуть.

Re: exim анализ даты

Добавлено: 2007-10-08 13:30:07
cyrus_user
что-то полдня ломал голову как это сделать средствами exim :)
написал на перл, если это действительно нужно, можно будет поместить в советы.
где-то в exim-овском файле perl функций:

Код: Выделить всё

sub check_h_date () {                                                                                                   
#возвращаем 10 балов если: формат заголовка, дата, день недели и время неверны
#UTC не проверяем
my $s = Exim::expand_string('$h_date');                                                                                 
use Date::Calc qw(:all);                                                                                                
while ($s=~/^([A-Za-z]+),\s+([0-9]+)\s+([A-Za-z]+)\s+([0-9]+)\s+([0-9:]+).*/g) {                                     
    if (check_date($4,Decode_Month($3),$2)) {
    my ($year,$week,$dow) = Standard_to_Business($4,Decode_Month($3),$2);                                               
        if (Decode_Day_of_Week($1) == $dow) {                                                                           
            if (check_time(split /:/, $5)) {                                                                            
            return "0";
            }                                                                                                           
        }                                                                                                               
    }                                                                                                                   
}                                                                                                                       
return "10";                                                                                                            
}         
где-то в acl_smtp_data:

Код: Выделить всё

warn
set acl_m120     = ${perl{check_h_date}}