The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Postfix - Добавить дату в поле Subject"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Почта)
Изначальное сообщение [ Отслеживать ]

"Postfix - Добавить дату в поле Subject"  +/
Сообщение от Oleg (??) on 27-Апр-12, 15:29 
Добрый день коллеги!

Кто нибудь может подсказать как добавить в поле Subject сообщения отметку текущей даты и времени получения сообщения сервером. Я так понимаю надо копать в сторону header_checks.

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Postfix - Добавить дату в поле Subject"  +/
Сообщение от Etch on 27-Апр-12, 16:32 
Нет, копайте в сторону milter или контент-фильтров. Через контент-фильтр у меня было так:

---- master.cf:

smtp      inet  n       -       y       -       -       smtpd
                   -o content_filter=add-date:dummy

add-date    unix    -   n       n       -       20      pipe
    flags=Rq user=nobody argv=/usr/libexec/postfix/add-date.pl
    -f ${sender} -- ${recipient}


---- add-date.pl:

#!/usr/bin/perl -w

use POSIX qw(setlocale LC_ALL strftime);
POSIX::setlocale( LC_ALL, "C" );

my $SENDMAIL="/usr/sbin/sendmail -G -i @ARGV"; # NEVER NEVER NEVER use "-t" here.

my $line;
my $date_changed_flag=0;
my $blank_line_flag=0;
my $current_date=POSIX::strftime("%a, %d %b %Y %H:%M:%S %z", ( localtime(time()) ));

open (PIPE, " | $SENDMAIL");

while ($line=<STDIN>) {
    $blank_line_flag=1 if $line=~m/^\r?\n$/;
    if ($blank_line_flag==0 && $date_changed_flag==0) {
        if ( $line =~ s/^Date:( |\t)/X-Original-Date: / ) {
            $date_changed_flag=1; print PIPE "Date: $current_date\n";
        }
    }
    print PIPE $line;
}

--------------
Только у меня не в тему дата добавляется, а заголовок 'Date:' меняется на локальный (это оказалось легче, чем научить Thunderbird смотреть на дату сервера, а не в этот заголовок).

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Postfix - Добавить дату в поле Subject"  +/
Сообщение от Oleg (??) on 16-Май-12, 13:10 
Спасибо заработало. Есть еще вопрос применять правило к конкретным получателям.

То есть если получатель test@example.com то скрипт обрабатывать иначе нет

>[оверквотинг удален]
>            
> $date_changed_flag=1; print PIPE "Date: $current_date\n";
>         }
>     }
>     print PIPE $line;
> }
> --------------
> Только у меня не в тему дата добавляется, а заголовок 'Date:' меняется
> на локальный (это оказалось легче, чем научить Thunderbird смотреть на дату
> сервера, а не в этот заголовок).

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

4. "Postfix - Добавить дату в поле Subject"  +/
Сообщение от Oleg (??) on 17-Май-12, 10:03 
Вот так теперь стало
-----
#!/usr/bin/perl -w

use POSIX qw(setlocale LC_ALL strftime);
POSIX::setlocale( LC_ALL, "C" );

my $SENDMAIL="/usr/sbin/sendmail -G -i @ARGV"; # NEVER NEVER NEVER use "-t" here.

my $line;
my $subj_orig;
my $date_changed_flag=0;
my $blank_line_flag=0;
my $current_date=POSIX::strftime("%Y-%m-%d %H:%M:%S %z", ( localtime(time()) ));
open (PIPE, " | $SENDMAIL");

while ($line=<STDIN>)
{
    $blank_line_flag=1 if $line=~m/^\r?\n$/;
    if ($blank_line_flag==0 && $date_changed_flag==0)
        {
        if (  $line =~ s/^Subject:( |\t)/$subj_orig / )
            {
                $date_changed_flag=1; print PIPE "Subject: $current_date: $subj_orig \n";
            }
        }
    print PIPE $line;
}
-----

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Postfix - Добавить дату в поле Subject"  +/
Сообщение от Etch on 17-Май-12, 15:08 
> Спасибо заработало. Есть еще вопрос применять правило к конкретным получателям.
> То есть если получатель test@example.com то скрипт обрабатывать иначе нет

Убираете из master.cf вызов вашего контент-фильтра, а в main.cf в параметре smtpd_recipient_restrictions определяете опцию:
check_recipient_access hash:$config_directory/filters/change-subject

Ну и в файле change-subject:
test@example.com   FILTER add-date:dummy
- ну или как там вы назвали свой фильтр вместо add-date

На практике не проверял, но судя по http://www.postfix.org/access.5.html - должно работать.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

6. "Postfix - Добавить дату в поле Subject"  +/
Сообщение от Oleg (??) on 17-Май-12, 17:55 
Всем спасибо все работет

Сгруппировано получилось следующим образом

Чтобы добавить в поле Subject текущую дату и время сервера создаем скрипт (немного изменив предложенный Etch), размещаем, например, в /usr/local/bin/add-date.pl и выставляем права на исполнение
-----
#!/usr/bin/perl -w

use POSIX qw(setlocale LC_ALL strftime);
POSIX::setlocale( LC_ALL, "C" );

my $SENDMAIL="/usr/sbin/sendmail -G -i @ARGV"; # NEVER NEVER NEVER use "-t" here.

my $line;
my $addr;
my $subj_orig;
my $date_changed_flag=0;
my $blank_line_flag=0;
my $current_date=POSIX::strftime("%Y-%m-%d_%H:%M:%S %z", ( localtime(time()) ));
open (PIPE, " | $SENDMAIL");

while ($line=<STDIN>)
{
    $blank_line_flag=1 if $line=~m/^\r?\n$/;
    if ($blank_line_flag==0 && $date_changed_flag==0)
        {
        if (  $line =~ s/^Subject:( |\t)/$subj_orig / )
            {
                $date_changed_flag=1; print PIPE "Subject: \$TS:$current_date: $subj_orig $addr\n";
            }
        }
    print PIPE $line;
}
-----

Далее необходимо описать (добавить) в master.cf
-----
add-date    unix    -   n       n       -       20      pipe
    flags=Rq user=nobody argv=/usr/local/bin/add-date.pl -f ${sender} -- ${recipient}
-----
Теперь Postfix знает о новом сервисе add-date

Создаем файл /etc/postfix/subjrewrite следующего содержания
-----
test@example.com FILTER add-date:dummy
-----

Создаем hash
-----
postmap subjrewrite
-----

Добавляем или изменяем в main.сf
-----
smtpd_recipient_restrictions =
    check_recipient_access hash:/etc/postfix/subjrewrite
-----

Перегружаем postfix

В моем случае Subject меняется на
$TS:2012-05-17_16:18:26 +0300:   Original_Subj


>> Спасибо заработало. Есть еще вопрос применять правило к конкретным получателям.
>> То есть если получатель test@example.com то скрипт обрабатывать иначе нет
> Убираете из master.cf вызов вашего контент-фильтра, а в main.cf в параметре smtpd_recipient_restrictions
> определяете опцию:
> check_recipient_access hash:$config_directory/filters/change-subject
> Ну и в файле change-subject:
> test@example.com   FILTER add-date:dummy
> - ну или как там вы назвали свой фильтр вместо add-date
> На практике не проверял, но судя по http://www.postfix.org/access.5.html - должно работать.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

8. "Postfix - Добавить дату в поле Subject"  +/
Сообщение от Etch on 17-Май-12, 21:52 
Строку в скрипте:
> if (  $line =~ s/^Subject:( |\t)/$subj_orig / )

замените на:
if ( $line =~ m/^Subject:( |\t)/ )

А после строки:
> $date_changed_flag=1; print PIPE "Subject: \$TS:$current_date: $subj_orig $addr\n";

добавьте строку:
next;

А то в заголовках писем у вас появится мусор после строки с темой, что чревато проблемами в некоторых случаях.

И ещё я бы рекомендовал хранить этот скрипт не в /usr/local/bin/ , а где-нибудь рядом с конфигами - например в /etc/postfix/scripts/. Тогда, в случае чего, они потеряются все вместе, а не что-нибудь одно. А при переносе конфигов почты на другой сервер не придётся выискивать скрипты по всей ФС, вычисляя их по всему конфигу.

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

2. "Postfix - Добавить дату в поле Subject"  +/
Сообщение от Samba (??) on 28-Апр-12, 18:35 
http://serverfault.com/questions/79788/rewrite-email-subject

> Добрый день коллеги!
> Кто нибудь может подсказать как добавить в поле Subject сообщения отметку текущей
> даты и времени получения сообщения сервером. Я так понимаю надо копать
> в сторону header_checks.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "Postfix - Добавить дату в поле Subject"  +/
Сообщение от LSTemp (ok) on 17-Май-12, 20:14 
> Добрый день коллеги!
> Кто нибудь может подсказать как добавить в поле Subject сообщения отметку текущей
> даты и времени получения сообщения сервером. Я так понимаю надо копать
> в сторону header_checks.

Бред собачий. Убить Вас мало - всяк х-ню в сабж писать. Как Вас пользователи терпят?

Если Вам нужна эта дата, то смотрите конверт, а не тело письма.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру