diff -up smeserver-learn-1.0/root/usr/bin/Learn.pl.SME9282 smeserver-learn-1.0/root/usr/bin/Learn.pl --- smeserver-learn-1.0/root/usr/bin/Learn.pl.SME9282 2016-03-16 07:38:34.092000000 -0400 +++ smeserver-learn-1.0/root/usr/bin/Learn.pl 2016-03-16 07:32:47.000000000 -0400 @@ -22,6 +22,8 @@ use File::Find; use File::Copy; use File::Basename; use File::Path; +use Encode qw/encode decode/; +use utf8; my $hostname = hostname(); @@ -32,7 +34,8 @@ my $sadb = esmith::ConfigDB->open_ro() or die "Could not open ConfigurationDB ( reason : ".esmith::DB->error." )\n"; # some variables of interest -my $subjectTAG=quotemeta $sadb->get_prop("spamassassin", "Subject"); +my $subjectTAG= $sadb->get_prop("spamassassin", "Subject"); +my $tag= $sadb->get_prop("LearnAsSpam", "tag"); my $MessageRetentionTime = $sadb->get_prop('spamassassin', '$MessageRetentionTime')|| "15"; my $DelayToMove = $sadb->get_prop("LearnAsSpam", "DelayToMove") || $MessageRetentionTime ; # delay in day before moving files $DelayToMove= $DelayToMove<$MessageRetentionTime ? $DelayToMove : 0; # set 0 to disable @@ -184,7 +187,7 @@ foreach my $user (@users) { if (defined($sadb->get_prop($mode, "tag"))) { # Opening, reading in one scalar and parsing mail $/=undef; - open(MAILFILE,$filetolearn); + open(MAILFILE,"<:encoding(UTF-8)",$filetolearn); my $emailbrut = ; close(MAILFILE); $/="\n"; @@ -193,12 +196,14 @@ foreach my $user (@users) { #changing subject (tagging), opening and writing new mail my $Subject= $email->header("Subject"); if ( ($mode ne "LearnAsSpam") && ($sadb->get_prop($mode, "RemoveSPAMTag") eq "enabled") ) { - ($Subject= $Subject) =~ s/$subjectTAG//; - my $tag= $sadb->get_prop("LearnAsSpam", "tag"); - ($Subject= $Subject) =~ s/$tag//; + for my $test ( quotemeta $subjectTAG , quotemeta $tag) { + ($Subject= $Subject) =~ s/$test//; + } } - $email->header_set("Subject", $sadb->get_prop($mode, "tag").$Subject); - open(MAILFILEWRITE,">$filetolearn"); + # encoding as MIME Q (not B) with UTF8 as default. + my $cleanTag= encode("MIME-Q",$sadb->get_prop($mode, "tag")); + $email->header_set("Subject",$cleanTag.$Subject); + open(MAILFILEWRITE,">","$filetolearn"); print(MAILFILEWRITE $email->as_string); close(MAILFILEWRITE) }