URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 84946
[ Назад ]

Исходное сообщение
"postfix content_filter perl"

Отправлено gorecs , 17-Апр-09 18:29 
Добрый день! Подскажите как при помощи postfix запротоколировать письмо
content_filter и отправить его дальше, postfix сконифгурирован с SASL

master.cf
smtp      inet  n       -       n       -       -       smtpd
                -o content_filter=filter:dummy

filter    unix    -    n    n    -    -    pipe  
    user=filter argv=/etc/postfix/test.pl -f ${sender} -- ${recipient}

test.pl
#!/usr/bin/perl

open(eml,">/var/spool/postfix/filter/$ARGV[0].$$.eml");
open(sendmail,"| /usr/sbin/sendmail -G -i @ARGV")or die "Sendmail ERROR: $!\n";
while(<STDIN>) {  print eml"$_";  print sendmail"$_"; }
    close(eml); close(sendmail);

при отправке в логаз пришел такое


Apr 17 18:18:45 mail sendmail[24609]: n3HEIjRe024609: to=user@gmail.com, ctladdr=from@domain.ru (626/627), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30497, relay=[0.0.0.0] [0.0.0.0], dsn=4.0.0, stat=Deferred: Connection refused by [0.0.0.0]


Содержание

Сообщения в этом обсуждении
"postfix content_filter perl"
Отправлено Sarge , 17-Апр-09 20:26 
У меня так:

=== master.cf: ===
smtp      inet  n   -    y   -    12    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.

#open (PIPE, "> /tmp/add-date.txt");

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;

}


PS. кстати, кто знает нормальное решение для постфикса изменить дату в письмах на текущаю локальную? А то через перл как-то слишком уж жирно :(