Mise à jour addon smeserver-learn SPAM

Forum dédié à la distribution du même nom et que vous pourrez télécharger sur http://www.contribs.org. La nouvelle version de cette distribution se nomme SME Server. Une description est donnée sur le portail phénIXUS : http://www.ixus.net/sme-server/.

Mise à jour addon smeserver-learn SPAM

Message par mab » 04 Déc 2011 22:36

Bonjour,

Je souhaiterais entrer en contact avec le développeur de ce module. En effet, l'apprentissage ne se fait pas correctement, et ne connaissant pas le perl, je voudrais de l'aide pour modifier ce script (quelque chose de mineur pour un connaisseur).
Le problème est que le script scrute le répertoire mail cur, et pas le new, il faudrait scruter les 2.

Je ne trouve pas cet addon dans la liste de http://bugs.contribs.org , et un mail direct au développeur renvoie systématiquement un
Code : Tout sélectionner
host firewall-services.com[88.190.227.183] said: 550
relaying denied emmanuel.jooris@firewall-services.com
Dernière édition par mab le 26 Déc 2011 10:44, édité 2 fois.
mab
 
Message(s) : 33
Inscription : 08 Nov 2011 22:16
Localisation : centre sud

Re: demande de mise à jour addon smeserver-learn

Message par Franck78 » 04 Déc 2011 23:58

Salut,
Inutile de traiter les deux.

Un mail sera stocké dans 'new' jusqu'a ce que son destinataire en prenne connaissance.
Ensuite direction 'cur' (current) ou poubelle.

Donc l'état 'new' est un peu à considérer comme un mail pas encore arrivé, en cours d'acheminement ou ce que tu veux, donc pas encore prêt.

bye
Franck78
 
Message(s) : 525
Inscription : 11 Sep 2011 16:04
Localisation : France

Re: demande de mise à jour addon smeserver-learn

Message par mab » 05 Déc 2011 09:54

Merci de ta réponse.

Cependant, c'est exactement le problème :
Quand tu viens de traiter une page de mail avec comme titre "on vous offre 2 places pour le concert de Truc Muche" ou "PROMOs SON de fin d'ann?e ? ne pas rater. STOCKS LIMITES !", etc, tu n'as même pas besoin de les lire : tu les colles directement dans le répertoire LearnAsSpam, sans les ouvrir (surtout pas :D ), du coup, ils restent dans le répertoire new, jusqu'à ce que tu en ouvres un. Et là, la liste entière de mail se déplace dans cur.
Ca n'est pas pratique.
mab
 
Message(s) : 33
Inscription : 08 Nov 2011 22:16
Localisation : centre sud

Re: demande de mise à jour addon smeserver-learn

Message par Franck78 » 05 Déc 2011 20:37

Ok, admettons.
Si tu sais que c'est du perl, tu sais sans doute faire un grep sur les fichiers du programme.

Cherches donc 'cur' pour le remplacer par 'new'. Si il n'y a pas d'occurence, c'est sans doute qu'une lib perl est utilisée pour lire la boite à lettre.

Bon, il faut quand même essayer de comprendre que le bout code modifié concerne bien ce que l'on cherche.
Franck78
 
Message(s) : 525
Inscription : 11 Sep 2011 16:04
Localisation : France

Re: demande de mise à jour addon smeserver-learn

Message par mab » 05 Déc 2011 22:12

Ok, je vais donc modifier moi-même ce script, avec des pincettes, car je ne connais rien de ce langage... :mrgreen:

... les cur ET les new, j'm'en va tester à faire un genre de "in" :? Allez, courage...

Dommage tout de même que le créateur de ce script soit injoignable, et que l'addon soit inexistant dans bugs.contrib. :cry:
mab
 
Message(s) : 33
Inscription : 08 Nov 2011 22:16
Localisation : centre sud

Re: Mise à jour addon smeserver-learn SPAM

Message par mab » 15 Déc 2011 12:16

Salut à tous,
Je me réponds donc à moi-même, et je vous en fait profiter en même temps :D .
L'auteur de ce script ne réponds pas aux mails, et le mainteneur n'est pas/plus joignable par courriel (erreur smtp 550).
Je ne peux donc leur remonter la modification pour qu'elle soit intégré, générant une nouvelle version de cet excellent addon.

Pour rappel, j'ai fait cette mise à jour du script d'apprentissage "Learn.pl", qui correspond à cette page http://wiki.contribs.org/Learn/fr. Ce script est à mettre dans /usr/bin/ , et doit donc remplacer l'ancien.

Maintenant, ça lit bien aussi les courriels lus et non lus mis dans un des 3 répertoires LearnAsSpam, LearAsHam ou LearnInWL. En effet, je trouve aberrant d'avoir à lire les mails pour qu'ils soient traités par le script d'apprentissage dans le dossier d'apprentissage alors que certains objets sont suffisamment clairs et évocateurs de leur contenu pour en établir une règle.

Voici donc ce script :
Code : Tout sélectionner
#!/usr/bin/perl

#############################################################################
#
# This script has been developed
# by Jesper Knudsen at http://sme.swerts-knudsen.dk
# And modified by Emmanuel Jooris at http://sme.firewall-services.com
#
# Revision History:
#
# January 18, 2006: Initial version
# June 06, 2008: Modification for add LearnAsHam and LearnInWL
# 12/dec/2011 MAB - add cur on already existing new directories to learn
#############################################################################

use Sys::Hostname;
use Email::Simple;
use esmith::AccountsDB;
use esmith::ConfigDB;
use Digest::MD5 qw(md5 md5_hex md5_base64);

my $hostname = hostname();

#Opening databases
my $adb = esmith::AccountsDB->open_ro()
   or die "Could not open AccountsDB ( reason : ".esmith::DB->error." )\n";
my $sadb = esmith::ConfigDB->open_ro()
   or die "Could not open SpamAssasinDB ( reason : ".esmith::DB->error." )\n";

#getting user list
my @users = $adb->users;
open(SADB, "/home/e-smith/db/spamassassin");
binmode(SADB);
my $md5 = Digest::MD5->new->addfile(SADB)->b64digest;
close(SADB);
foreach my $user (@users) {
   my $firstname = $user->prop('FirstName');
   my $lastname = $user->prop('LastName');
   my $key = $user->key;

   printf("Checking for user (%s): %s %s\n", $key,$firstname, $lastname);

   my $MailDir = "/home/e-smith/files/users/" . $key . "/Maildir";

   my @modes = ("LearnAsSpam","LearnAsHam","LearnInWL");
   foreach my $mode (@modes) {
      # verificating mode is enabled
      if ($sadb->get_prop($mode, "status") ne "enabled") { next; }

      # getting dir name to search according to actual mode
      my $dirname = $sadb->get_prop($mode, "dir");
      if ( !(defined($dirname)) ) {
         print "Errors in DB, dir subkey not present for key $mode\n";
         next;
      }
      
      #searching dir
      opendir(LOGDIR, $MailDir);
      my @logdirs = sort grep { /$dirname/ } readdir(LOGDIR);
      closedir(LOGDIR);
      
      #
           my @newcurs = ("new","cur");
      foreach my $newcur (@newcurs){
        foreach my $logdir (@logdirs) {
                 my $SpamDir = $MailDir . "/" . $logdir . "/" . $newcur . "/";
         
           # list and sort file in dir
           printf("Checking Dir: %s\n",$SpamDir);
           opendir(SPAMDIR, $SpamDir);
           my @spamfiles = sort grep { /$hostname/ } readdir(SPAMDIR);
           closedir(SPAMDIR);

           #
           foreach my $spamfile (@spamfiles) {
                   my $filetolearn = $SpamDir . $spamfile;
              my $filetolearnbash = $filetolearn;
              $filetolearnbash =~ s/;/\\;/g;
              $filetolearnbash =~ s/:/\\:/g;

              #taking action according to actual mode
              if ($mode eq "LearnAsSpam") {
                    printf("Learning Spam: %s\n",$filetolearnbash);
               `/usr/bin/sa-learn --spam $filetolearnbash`;
               
              }
              elsif ($mode eq "LearnAsHam") {
               printf("Learning Ham: %s\n",$filetolearnbash);
               `/usr/bin/sa-learn --ham $filetolearnbash`;
              }
              elsif ($mode eq "LearnInWL") {
               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
              if ($mode eq "LearnAsSpam" and $sadb->get_prop($mode, "DeleteAfterLearn") eq "enabled") {
               `rm -f $filetolearn`;
              }
              else {
               if (defined($sadb->get_prop($mode, "tag"))) {
                  # Opening, reading in one scalar and parsing mail
                  $/=undef;
                  open(MAILFILE,$filetolearn);
                  my $emailbrut = <MAILFILE>;
                  close(MAILFILE);
                  $/="\n";
                  my $email = Email::Simple->new($emailbrut);
                  
                  #changing subject (tagging), opening and writing new mail
                  $email->header_set("Subject", $sadb->get_prop($mode, "tag").$email->header("Subject"));
                  open(MAILFILEWRITE,">$filetolearn");
                  print(MAILFILEWRITE $email->as_string);
                  close(MAILFILEWRITE)
               }
               my $mvdir;
               if ($mode eq "LearnAsSpam") {
                  $mvdir = $SpamDir."../../.junkmail/cur/";
               }
               else {
                  $mvdir = $SpamDir."../../cur/";
               }
               `mv $filetolearn $mvdir`;
            }
         }
        }
                }
   }

}

open(SADB, "/home/e-smith/db/spamassassin");
binmode(SADB);
my $newmd5 = Digest::MD5->new->addfile(SADB)->b64digest;
close(SADB);

if ($newmd5 ne $md5) {
   `expand-template /etc/mail/spamassassin/local.cf`;
   `/etc/init.d/spamd restart`;
   print "\n";
}

Merci de vos retours.
mab
 
Message(s) : 33
Inscription : 08 Nov 2011 22:16
Localisation : centre sud

Re: Mise à jour addon smeserver-learn SPAM

Message par jibe » 16 Déc 2011 01:53

Salut,

mab a écrit :En effet, je trouve aberrant d'avoir à lire les mails pour qu'ils soient traités par le script d'apprentissage dans le dossier d'apprentissage alors que certains objets sont suffisamment clairs et évocateurs de leur contenu pour en établir une règle.

Que veux-tu dire par là ? De quelle règle s'agit-il ?

Note que pour les mails à sujet (ou autre champ) évocateur, il me parait plus judicieux de créer une règle dans local.cf où tu peux attribuer directement une note adéquate, au lieu que les règles se créent automatiquement et s'affinent peu à peu au fur et à mesure de l'apprentissage !

[Edit]Correction du lien vers le fil sur local.cf
jibe. En vert ou en rouge-orangé : je modère - En noir ou autre couleur : je parle à titre personnel.

L'idée que quand on n'a pas quelque chose, on puisse se bouger pour l'avoir, c'est une démarche qui parait absolument normale pour les gens du Logiciel Libre et totalement surnaturelle pour tout le reste de la population. (Benjamin Bayart)
jibe
 
Message(s) : 943
Inscription : 09 Sep 2011 23:19
Localisation : Haute Savoie

Re: Mise à jour addon smeserver-learn SPAM

Message par mab » 16 Déc 2011 13:14

Salut,

jibe a écrit :Que veux-tu dire par là ? De quelle règle s'agit-il ?
Je veux parler des autoapprentissages.

Définir une règle par mail, oui, mais, à la longue, c'est pénible.

Tu as mis un lien qui semble erroné, étant toujours à l'affût de méconnaissance, je serais intéressé par ton lien.
mab
 
Message(s) : 33
Inscription : 08 Nov 2011 22:16
Localisation : centre sud

Re: Mise à jour addon smeserver-learn SPAM

Message par jibe » 16 Déc 2011 23:09

Salut,

mab a écrit :Tu as mis un lien qui semble erroné, étant toujours à l'affût de méconnaissance, je serais intéressé par ton lien.

:oops: Effectivement, je ne sais pas ce qui s'est passé, mais il manquait le dernier caractère du lien. J'ai corrigé. Note qu'en voyant que c'était un lien vers phénIXUS, tu aurais pu trouver facilement ce post en cherchant local.cf ;)

mab a écrit :Je veux parler des autoapprentissages.

Définir une règle par mail, oui, mais, à la longue, c'est pénible.

Image Comprends toujours pas ? Quel rapport entre l'auto-apprentissage et le fait de définir une règle par mail ? Où définis-tu cette règle ? Que cherches-tu à faire exactement ?

Soit tu veux un truc automatisé capable de s'adapter à tes spams et l'auto-apprentissage est parfait... et automatique, soit tu veux un truc que tu maîtrises totalement et tu utilises local.cf, soit encore tu combines les deux. Mais pourquoi parles-tu d'avoir une règle par mail à définir ? L'auto-apprentissage s'en débrouille, et pour local.cf, en utilisant les expressions régulières, on limite pas mal les règles. J'ai établi celui que j'ai donné dans le post indiqué sur une SME qui recevait plus de 3000 spams/jour, dont en moyenne 150 n'étaient pas filtrés et on trouvait entre 10 et 20 faux positifs chaque semaine. Après mise en place de ce local.cf, il ne restait plus que 0 à 4 non filtrés et aucun faux positif. Comme tu peux le voir, il n'y a pas 3000 règles ;)
jibe. En vert ou en rouge-orangé : je modère - En noir ou autre couleur : je parle à titre personnel.

L'idée que quand on n'a pas quelque chose, on puisse se bouger pour l'avoir, c'est une démarche qui parait absolument normale pour les gens du Logiciel Libre et totalement surnaturelle pour tout le reste de la population. (Benjamin Bayart)
jibe
 
Message(s) : 943
Inscription : 09 Sep 2011 23:19
Localisation : Haute Savoie

Re: Mise à jour addon smeserver-learn SPAM

Message par mab » 23 Déc 2011 23:45

salut tous,
Ahah !! désolé pour le délai, je n'avais pas de clavier à portée, et il n'y a pas de wifi sur les pistes !
jibe a écrit :Quel rapport entre l'auto-apprentissage et le fait de définir une règle par mail


Je veux tout simplement parler de l'autoapprentissage, que le filtre bayésien gère en terme de score, je m'étais mal exprimé.

Et en voyant ton script, j'avoue que je n'avais pas compris l'usage des "règles" tels que toi tu les décrits. Le terme règle est évidemment plus à propos en parlant de ton fichier local.cf, et pas dans mon cas.

On ne sait pas tout, et heureusement, ixus est là !
mab
 
Message(s) : 33
Inscription : 08 Nov 2011 22:16
Localisation : centre sud

Suivant

Retour vers SME

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 1 invité

cron