Вот текст...
Коментарии по 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