Вот текст...
Коментарии по Skype:BeaconRus
#!/usr/bin/perl
#
# RULE 1
# Any Recipient not in *.localsite,*@localsite
# Header Filed is not X-External: yes
# From in *.localsite,*@localsite
# From is not postmaster*
# Add Header X-External: yes
#
# RULE 2
#
# Header Filed is X-External: yes
# From in xxx@localsite
# Execute [FILE] Scripts/list.pl "=?koi8-r?B?Title From?=" xxx@xxx.com
# Discard
#open(FILEDEBUG, '>>log.txt') || die;
use File::Copy;
my $temp = "/tmp/"; my $basedir = "/var/CommuniGate/"; my $debugfile = "/var/log/cgp_script.log"; my $fullname = "Alex";
if ($ARGV[0] ne "") { $fullname = $ARGV[0]; $email = $ARGV[1]; $pathmail = $ARGV[3];
$datetime = localtime(time);
# Путь, имя и расширение файла с письмом
($paths,$mailname) = split(/[\/\\]/, $pathmail);
open(LogFile, '>>'.$debugfile) || die;
print LogFile "$datetime Path: $paths, Mail name and ext: $mailname\n";
close(LogFile);
($mailname, $mailext) = split(/\./, $mailname);
open(LogFile, '>>'.$debugfile) || die;
print LogFile "$datetime Mail name: $mailname, Mail ext: $mailext\n";
close(LogFile);
my $path_from = $basedir.$pathmail;
my $path_to = $temp;
if (!copy($path_from, $path_to)) {
# Open debug
open(LogFile, '>>'.$debugfile) || die;
print LogFile "$datetime Command: copy($path_from, $path_to)\nError:
$!\n";
# Close debug
close(LogFile);
}
my $mail_read = $path_to.$mailname.".".$mailext; my $mail_write = $path_to.$mailname.".sub"; my $mail_sub = $basedir."Submitted/";
open(LogFile, '>>'.$debugfile) || die;
print LogFile "$datetime Mail read: $mail_read, Mail write: $mail_write\n";
close(LogFile);
#######################################################################
# обработка заголовков
#######################################################################
open(FILEIN, $mail_read);
my $body = 0; my $head = 0; my $recipiets; my $to; my $cc;
# заголовок cgp
if (!$body && !$head && $_ eq "\n") {
$head = 1; $_ = "";
$body = 1; $_ = "";
# обрабоотка заголовока cgp
if (!$body && !$head) {
if ($_ =~ /^R W/) { ($buf, $val) = split(/[<>]/); @recipients = (@recipients, $val); }
# обрабоотка заголовока письма
if (!$body && $head) {
if (!($_ =~ /^\t/) && !($_ =~ /^ /)) { $readto = 0; $readcc = 0; $readfrom = 0; } if ($_ =~ /^From:/) { $readfrom = 1; ($buf, $val) = split(/[<>]/); $realfrom = $val; } if ($_ =~ /^To:/) { $readto = 1; if ($_ =~ /[<>]/) { ($buf, $val) = split(/[<>]/); } else { ($buf, $val) = split(/[ \n]/); } $realto = $val; } if ($readto) { if ($_ =~ /[<>]/) { ($buf, $val) = split(/[<>]/); } else { ($buf, $val) = split(/[ \n]/); } @to = (@to, $val); } if ($_ =~ /^Cc:/) { $readcc = 1; } if ($readcc) { ($buf, $val) = split(/[<>]/); @cc = (@cc, $val); } if ($readfrom && $realfrom eq "") { ($buf, $val) = split(/[<>]/); $realfrom = $val; }
if ($body) {
close(FILEIN);
}
}
foreach $val (@recipients) {
$remove = 0;
foreach $buf (@to) { if ($val eq $buf) { $remove = 1; }
# print FILEDEBUG "To: ", $remove, " ", $val, " ", $buf, "\n";
}
foreach $buf (@cc) { if ($val eq $buf) { $remove = 1; }
# print FILEDEBUG "Cc: ", $remove, " ", $val, " ", $buf, "\n";
}
if (!$remove) {
@newrecipients = (@newrecipients, $val);
# print FILEDEBUG $val, "\n";
}
}
############################################################################
#######################################################################
# переписываем письмо обрабатывая заголовок
#######################################################################
open(FILEIN, $mail_read);
open(FILEOUT, ">>".$mail_write);
my $head = 0; my $body = 0; my $from = 0; my $replace = 0;
$replace = 0;
if (!$head && !$body && $_ eq "\n") {
$head = 1; $_ = "";
$body = 1;
}
if ($head && !$body) {
if ($_ =~ /^From:/) { # Подменяем поле From print FILEOUT "From: \"$fullname\" <$email>\n";
# print FILEOUT "X-Referent: processed\n";
# Добавляем поле Sender #$sender = substr($_, 6); #print FILEOUT "Sender: $sender"; $from = 1; } else { if (!($_ =~ /^\t/) && !($_ =~ /^ /)) { $from = 0; } if ($_ =~ /^Disposition-Notification-To:/) { print FILEOUT "Disposition-Notification-To: $fullname <$email>\n"; $replace = 1; } if (!$from && !$replace) { print FILEOUT $_; } }
print FILEOUT $_;
}
}
close(FILEOUT);
close(FILEIN);
# Перемещаем обработанный файл с письмом
if (!copy($mail_write, $mail_sub)) {
# Open debug
open(LogFile, '>>'.$debugfile) || die;
print LogFile "$datetime Command: move($mail_write,
$mail_sub)\nError: $!\n";
# Close debug
close(LogFile);
} else {
open(LogFile, '>>'.$debugfile) || die;
print LogFile "$datetime Send: from $realfrom as $email to $realto\n";
close(LogFile);
}
unlink($mail_write);
##########################################################################
# создание дополнительных писем для скрытой копии
##########################################################################
$i = 0;
foreach $recipient (@newrecipients) {
my $mail_write = $path_to.$mailname."_".$i++.".sub";
open(FILEIN, $mail_read);
open(FILEOUT, ">>".$mail_write);
my $head = 0; my $body = 0; my $from = 0, $to = 0, $cc = 0; while (<FILEIN>) { $replace = 0; # заголовок письма if (!$head && !$body && $_ eq "\n") { $head = 1; $_ = ""; print FILEOUT "To: <$recipient>\n"; } # тело письма if ($head && !$body && $_ eq "\n") { $body = 1; } # обработка заголока письма if ($head && !$body) { if (!($_ =~ /^\t/) && !($_ =~ /^ /)) { $from = 0; $to = 0; $cc = 0; } if ($_ =~ /^From:/) { # Подменяем поле From print FILEOUT "From: \"$fullname\" <$email>\n";
# print FILEOUT "X-Referent: processed\n";
# Добавляем поле Sender #$sender = substr($_, 6); #print FILEOUT "Sender: $sender"; $from = 1; } if ($_ =~ /^To:/) { $to = 1; } if ($_ =~ /^Cc:/) { $cc = 1; } if ($_ =~ /^Disposition-Notification-To:/) { print FILEOUT "Disposition-Notification-To: $fullname <$email>\n"; $replace = 1; } if (!$from && !$to && !$cc && !$replace) { print FILEOUT $_; } } # обработка тела письма if ($body) { print FILEOUT $_; }
close(FILEOUT);
close(FILEIN);
# Перемещаем обработанный файл с письмом if (!copy($mail_write, $mail_sub)) {
# Open debug open(LogFile, '>>'.$debugfile) || die; print LogFile "$datetime Command: move($mail_write, $mail_sub)\nError: $!\n"; # Close debug close(LogFile); } else { open(LogFile, '>>'.$debugfile) || die; print LogFile "$datetime Send: from $realfrom as $email to $recipient\n"; close(LogFile);
############################################################################
# Удаляем исходный файл с письмом
unlink($mail_read);
#close(FILEDEBUG);
exit 0;
rujet пишет:
> ы писали 7 июня 2007 г., 13:32:50: > Alex Согласен. Пришлите пожайлуста. > >> Скрипт могу дать... Но для внутрених целей и в нем возможны ошибки... > >> rujet пишет: >>> Было бы проще. Если бы не приказы сверху :) >>> Странно, что это реализуется лишь внешними обработчиками. >>> В других программах для домена можно настроить внешний алиас >>> >>> >>> ################################################################## >>> Вы получили это сообщение потому, что подписаны на список рассылки >>> <CGatePro@mx.ru>. >>> >>> Чтобы отписаться, отправьте сообщение на адрес <CGatePro-off@mx.ru> >>> Чтобы переключиться в режим дайджеста - mailto:<CGatePro-digest@mx.ru> >>> Чтобы переключиться в индексный режим - mailto:<CGatePro-index@mx.ru> >>> Для административных запросов адрес <CGatePro-request@mx.ru> >>> Архив списка: http://mx.demos.su/lists/cgp-russian/ >>> >>> >>> >>> >>> >>> > > > ################################################################## > Вы получили это сообщение потому, что подписаны на список рассылки > <CGatePro@mx.ru>. > > Чтобы отписаться, отправьте сообщение на адрес <CGatePro-off@mx.ru> > Чтобы переключиться в режим дайджеста - mailto:<CGatePro-digest@mx.ru> > Чтобы переключиться в индексный режим - mailto:<CGatePro-index@mx.ru> > Для административных запросов адрес <CGatePro-request@mx.ru> > Архив списка: http://mx.demos.su/lists/cgp-russian/ > > > > >Получено Thu Jun 07 08:55:10 2007
Этот архив был сгенерирован hypermail 2.1.8 : Thu 07 Jun 2007 - 13:13:52 MSD