diff -Nur smeserver-learn-1.0/root/usr/bin/Learn.pl.MESSYOUTPUT smeserver-learn-1.0/root/usr/bin/Learn.pl --- smeserver-learn-1.0/root/usr/bin/Learn.pl.MESSYOUTPUT 2016-03-07 11:00:23.000000000 +0100 +++ smeserver-learn-1.0/root/usr/bin/Learn.pl 2016-03-08 08:21:55.000000000 +0100 @@ -85,8 +85,8 @@ if (! @logdirs and ($sadb->get_prop($mode, "Uniq") eq "enabled")) { ($login,$pass,$uid,$gid) = getpwnam($key) or die "$key not in passwd file"; + print "+->mkdir :". $MailDir . "/" . $dirname . "\n"; foreach $a ('','/cur','/tmp','/new'){ - print "mkdir :". $MailDir . "/" . $dirname . "$a\n"; mkdir $MailDir . "/" . $dirname . "$a"; chown $uid,$gid,$MailDir . "/" . $dirname . "$a"; } @@ -100,7 +100,7 @@ $a=(substr($a, 0, 1) eq '.')? $a: ".$a"; my $Link= $MailDir . "/" . $a; if (! -e $Link) { - print "create link $Link on $junkdir\n"; + print "+->create link $Link on $junkdir\n"; symlink($junkdir, $Link) or die "Can't create symlink from $Link to $junkdir: $!"; }; } @@ -137,20 +137,21 @@ #sa-learn here to avoid its loading for each files, when it can walk in directories on itself! my $SpamDir = ($sadb->get_prop($mode, "LearnNew") eq "enabled")? $MailDir . "/" . $logdir : $MailDir . "/" . $logdir . "/cur/" ; #taking action according to actual mode - if ($mode eq "LearnAsSpam") { - my $result = `/usr/bin/sa-learn --spam --showdots $SpamDir`; - printf("Learning Spam from %s: %s\n",$SpamDir,$result); + my $counter = 0; + find( { wanted => sub { -f && $counter++;}, no_chdir => 1, follow_fast => 1 }, $SpamDir ); + if ($mode eq "LearnAsSpam" and $counter>0) { + my $result = `/usr/bin/sa-learn --spam $SpamDir`; + chomp($result); printf("+Learning Spam from %s: %s\n",$logdir,$result); } - elsif ($mode eq "LearnAsHam") { - my $result = `/usr/bin/sa-learn --ham --showdots $SpamDir`; - printf("Learning Ham from %s: %s\n",$SpamDir,$result); + elsif ($mode eq "LearnAsHam" and $counter>0) { + my $result = `/usr/bin/sa-learn --ham $SpamDir`; + chomp($result);printf("+Learning Ham from %s: %s\n",$logdir,$result); } @list= ($sadb->get_prop($mode, "LearnNew") eq "enabled") ? ('/cur/','/new/'):('/cur/'); foreach $a (@list){ - my $SpamDir = $MailDir . "/" . $logdir . "$a";#JPP why only the cur and not the new? + my $SpamDir = $MailDir . "/" . $logdir . "$a"; # list and sort file in dir - printf("Checking Dir: %s\n",$SpamDir); opendir(SPAMDIR, $SpamDir); my @spamfiles = sort grep { /$hostname/ } readdir(SPAMDIR); closedir(SPAMDIR); @@ -164,7 +165,7 @@ #taking action according to actual mode if ($mode eq "LearnInWL") { - printf("Learning in WhiteList: %s\n",$filetolearnbash); + printf("+Learning in WhiteList: %s\n",$filetolearnbash); `/usr/bin/LearnInWL.pl $filetolearnbash`; } # if we are in LearnAsSpam mode and DeleteAfterLearn is enabled delete message, else tagging a move message