ISPConfig · 6 min read · Nov 15, 2025
ISPConfig 2.x : Comment ajouter une option "Déplacer vers SPAM" à votre installation ISPConfig
ISPConfig 2.x : Comment ajouter une option “Déplacer vers SPAM” à votre installation ISPConfig
Version 1.0b
Auteur : Jens Groh
Aperçu :
Ce document décrit les étapes nécessaires pour ajouter une troisième stratégie de filtre anti-spam à votre installation ISPConfig 2.x. Cela permettra à vous et à vos utilisateurs de sélectionner s’ils souhaitent supprimer les spams, autoriser les spams ou les déplacer vers le dossier de courrier indésirable IMAP correspondant.
Ce guide a été inspiré par le fil de discussion du forum de ‘grant’ (https://www.howtoforge.com/forums/showthread.php?t=15704) qui a décrit l’échange de la stratégie de suppression par le déplacement. En suivant les étapes ci-dessous, vous ne remplacerez pas la méthode de suppression, mais vous en gagnerez une troisième.
Prérequis :
Dans ce guide, je vais supposer que vous utilisez la configuration suivante ou une configuration similaire :
- ISPConfig (v2.2.23 ou ultérieur)
- Au moins un domaine avec une boîte aux lettres configurée et en fonctionnement
- IMAP utilise le format Maildir (cela ne fonctionnera pas avec mbox !)
Étape 1 - Changer les formulaires
La première étape consiste à se connecter à votre panneau ISPConfig avec le compte Admin. Ensuite, entrez dans l’onglet Administration et ouvrez le Concepteur de Formulaires avec Modifier le Formulaire. Recherchez isp - Utilisateur ISP et cliquez sur modifier.
Vous devriez maintenant voir la description complète du formulaire de ce formulaire particulier. Recherchez spam_strategy et cliquez à nouveau sur modifier.
Maintenant, changez la Liste des valeurs de cet élément de formulaire en insérant une ligne pour notre future option de déplacement afin qu’elle apparaisse :
accept,accept;
move,move;
discard,discard;
et enregistrez ce formulaire. Vos options d’utilisateur de messagerie dans votre domaine devraient maintenant afficher cette nouvelle option dans la boîte déroulante de la stratégie anti-spam - même si elle n’a pas encore de fonction. Maintenant, pour la partie console : Éditons quelques fichiers ISPConfig pour donner vie à la nouvelle option.
Étape 2 - Édition des fichiers source ISPConfig
Maintenant, nous devons éditer un certain nombre de fichiers. Je vais simplement les écrire et expliquer plus tard :
vi /root/ispconfig/scripts/lib/classes/ispconfig_procmail.lib.php(vers la ligne 109) :
if(!is_dir($web_path."/user/".$user_username."/Maildir"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir &> /dev/null", "maildirmake
".$web_path."/user/".$user_username."/Maildir &> /dev/null", __LINE__);
// AJOUTER : créer des sous-dossiers IMAP
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Drafts"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir/.Drafts &> /dev/null",
"maildirmake ".$web_path."/user/".$user_username."/Maildir/.Drafts &>
/dev/null", __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Junk"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir/.Junk &> /dev/null",
"maildirmake ".$web_path."/user/".$user_username."/Maildir/.Junk &>
/dev/null", __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Sent"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir/.Sent &> /dev/null",
"maildirmake ".$web_path."/user/".$user_username."/Maildir/.Sent &>
/dev/null", __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Trash"))
$mod->log->caselog("maildirmake
".$web_path."/user/".$user_username."/Maildir/.Trash &> /dev/null",
"maildirmake ".$web_path."/user/".$user_username."/Maildir/.Trash &>
/dev/null", __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir",
0700), "create ".$web_path."/user/".$user_username."/Maildir", $this->FILE,
__LINE__);
// AJOUTER : créer des sous-dossiers IMAP
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Drafts"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir/.Drafts",
0700), "create ".$web_path."/user/".$user_username."/Maildir/.Drafts",
$this->FILE, __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Junk"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir/.Junk",
0700), "create ".$web_path."/user/".$user_username."/Maildir/.Junk",
$this->FILE, __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Sent"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir/.Sent",
0700), "create ".$web_path."/user/".$user_username."/Maildir/.Sent",
$this->FILE, __LINE__);
if(!is_dir($web_path."/user/".$user_username."/Maildir/.Trash"))
$mod->log->phpcaselog(mkdir($web_path."/user/".$user_username."/Maildir/.Trash",
0700), "create ".$web_path."/user/".$user_username."/Maildir/.Trash",
$this->FILE, __LINE__);
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir");
// AJOUTER : créer des sous-dossiers IMAP
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir/.Drafts");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir/.Drafts");
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir/.Junk");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir/.Junk");
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir/.Sent");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir/.Sent");
exec("chown -R ".$user_username.":web".$web_doc_id."
".$web_path."/user/".$user_username."/Maildir/.Trash");
exec("chmod 700 ".$web_path."/user/".$user_username."/Maildir/.Trash");
if($user["user_admin"]){
exec("rm -f $web_path/Maildir &> /dev/null");
$mod->log->phpcaselog(@symlink($web_path."/user/".$user_username."/Maildir",
$web_path."/Maildir"), "symlink ".$web_path."/Maildir", $this->FILE,
__LINE__);
(vers la ligne 300)
$mod->tpl->define( array(table => "spamassassin.rc.master"));
if(!isset($user["spam_strategy"])) $user["spam_strategy"] = "accept";
if($user["spam_strategy"] == "accept"){
$spam_comment = "#";
$spam_command = ".Junk/";
} else {
$spam_comment = "";
if($user["spam_strategy"] == "discard"){
$spam_command = "/dev/null";
} else {
$spam_command = ".Junk/";
}
}
(vers la ligne 330)
if(is_file('/home/admispconfig/ispconfig/tools/spamassassin/usr/local/bin/spamassassin')){
@@ -302,6 +333,7 @@
// Variables à assigner
$mod->tpl->assign( array(PREFS_FILE =>
$web_path."/user/".$user_username."/.user_prefs",
SPAM_COMMENT => $spam_comment,
SPAM_COMMAND => $spam_command,
SPAMASSASSIN_PATH => $spamassassin_path,
USERNAME =>
$user_username));
Cela ajoute la fonctionnalité de base. Le changement ajoute des boîtes aux lettres Maildir standard aux utilisateurs comme Trash, Sent, Junk et Drafts chaque fois qu’un utilisateur de messagerie est créé, afin que nous puissions déplacer les spams dans le dossier de courrier indésirable correspondant.
Trouvez et ajoutez la chaîne de déplacement dans les fichiers suivants comme indiqué :
vi /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_user.lib.php(vers la ligne 102)
$doc->deck[1]->elements[11]->visible = 0;
}
$doc->deck[2]->elements[2]->values["accept"] =
$go_api->lng("txt_accept");
$doc->deck[2]->elements[2]->values["move"] =
$go_api->lng("txt_move");
$doc->deck[2]->elements[2]->values["discard"] =
$go_api->lng("txt_discard");
}
vi /home/admispconfig/ispconfig/web/mailuser/mail/table/user.table.php(vers la ligne 135)
'regex'
=> "",
'errmsg'
=> "",
'value'
=> array( "accept" => $app->lng("txt_accept"),
"move" =>
$app->lng("txt_move"),
"discard" =>
$app->lng("txt_discard"));
$table['spam_hits'] = array('datatype' => "VARCHAR",
vi /home/admispconfig/ispconfig/web/mailuser/lib/lang/.lng(exemple pour en.lng, vers la ligne 33)
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
vi /home/admispconfig/ispconfig/web/isp_manager/lib/lang/.lng
(exemple pour en.lng, vers la ligne 268 et ligne 452)
$wb["Spamfilter"] = 'Spamfilter';
$wb["Antivirus"] = 'Antivirus';
$wb["accept"] = 'accept';
$wb["move"] = 'move';
$wb["discard"] = 'discard';
$wb["Spam Strategie"] = 'Spam Strategy';
$wb["Spam Hits"] = 'Spam Hits';
(...)
$wb["Keine Vorlage verwenden"] = "Paramètres individuels";
$wb["Keine Vorlage vorhanden"] = "Aucun plan d'hébergement disponible";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Propriétés";
$wb["ISP Datenbank"] = "Base de données ISP";
vi /home/admispconfig/ispconfig/web/isp_kunde/lib/lang/**.lng(exemple pour en.lng, vers la ligne 268 et ligne 449)
$wb["Spamfilter"] = 'Spamfilter';
$wb["Antivirus"] = 'Antivirus';
$wb["accept"] = 'accept';
$wb["move"] = 'move';
$wb["discard"] = 'discard';
$wb["Spam Strategie"] = 'Spam Strategy';
$wb["Spam Hits"] = 'Spam Hits';
(...)
$wb["Keine Vorlage verwenden"] = "Paramètres individuels";
$wb["Keine Vorlage vorhanden"] = "Aucun plan d'hébergement disponible";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Propriétés";
$wb["ISP Datenbank"] = "Base de données ISP";
Les trois derniers changements que vous devez effectuer par fichier de langue ou votre interface affichera simplement move au lieu du terme correspondant dans votre langue. Les trois extraits d’exemple proviennent des fichiers en.lng dans ces répertoires, éditez d’autres langues de la même manière (insérez les entrées move entre les autres).
Étape 3 - Créer des modèles personnalisés
Maintenant, changez de répertoire vers /root/ispconfig/isp/conf et créez une copie personnalisée de spamassassin.rc.master :
cd /root/ispconfig/isp/conf
cp -pr spamassassin.rc.master ./customized_templates/ cd customized_templatesMaintenant, éditez le modèle personnalisé pour refléter les changements nécessaires :
# Tous les mails étiquetés comme spam (par exemple avec un score supérieur au seuil défini)
# sont déplacés vers "/dev/null".
{SPAM_COMMENT}:0:
{SPAM_COMMENT}* ^X-Spam-Status: Yes
{SPAM_COMMENT}{SPAM_COMMAND}
Étape 4 (optionnelle) - Implémenter le nettoyage de vos dossiers de corbeille et de spam
Cela a déjà été abordé par MuisjeNL dans le guide suivant : Nettoyage automatique des dossiers de corbeille et/ou de spam avec ISPConfig (avec Roundcube + Tmpreaper / Tmpwatch)
Étape 5 (optionnelle) - Implémenter un peu de convivialité et créer des mails de statut
Cela est en cours de développement intensif car nous utilisons actuellement un code perl assez bricolé. J’essaierai de le nettoyer ou de le transférer dans un joli petit script.
Conclusion
Vous pouvez maintenant ajouter un utilisateur de messagerie (ou modifier un existant) pour utiliser la nouvelle méthode move. Je l’ai testé avec un utilisateur recevant environ 100 à 200 spams par jour et j’ai changé sa stratégie en move. Avec un webmail comme Roundcube ou en se connectant à la boîte aux lettres via IMAP, j’ai presque eu des résultats immédiats car les premiers mails sont tombés dans le dossier de courrier indésirable plutôt que dans sa boîte de réception.
Assurez-vous de vérifier cela avant de l’exécuter sur des serveurs de production.
Ce tutoriel ne vient avec aucune garantie. Soyez sage, testez-le !
Comme c’est le premier guide sur HowtoForge pour moi (et je ne suis pas un locuteur natif), j’espère que vous n’aurez pas de problèmes pour l’adapter à vos besoins. Amusez-vous avec un excellent logiciel : ISPConfig !
Jens Groh pour SANlutions Ltd.
Recevez de nouveaux articles dans votre boîte de réception.
Aucun spam. Désabonnez-vous à tout moment.