ISPConfig · 5 min read · Nov 15, 2025
ISPConfig 2.x: So fügen Sie Ihrer ISPConfig-Installation eine "Move to SPAM"-Option hinzu
ISPConfig 2.x: So fügen Sie Ihrer ISPConfig-Installation eine “Move to SPAM”-Option hinzu
Version 1.0b
Autor: Jens Groh
Übersicht:
Dieses Dokument beschreibt die Schritte, die erforderlich sind, um eine dritte Spam-Filterstrategie zu Ihrer ISPConfig 2.x-Installation hinzuzufügen. Es ermöglicht Ihnen und Ihren Benutzern, auszuwählen, ob sie Spam löschen, Spam zulassen oder es in den entsprechenden IMAP-Junk-Ordner verschieben möchten.
Dieses Howto wurde von dem Forenthread von ‘grant’ (https://www.howtoforge.com/forums/showthread.php?t=15704) inspiriert, der die Löschstrategie durch das Verschieben ersetzt hat. Wenn Sie die folgenden Schritte befolgen, ersetzen Sie die Löschmethode nicht, sondern gewinnen eine dritte.
Voraussetzungen:
In diesem Howto gehe ich davon aus, dass Sie die folgende oder eine ähnliche Konfiguration verwenden:
- ISPConfig (v2.2.23 oder später)
- Mindestens eine Domain mit einem eingerichteten und laufenden Postfach
- IMAP verwendet das Maildir-Format (dies funktioniert nicht mit mbox!)
Schritt 1 - Formulare ändern
Der erste Schritt besteht darin, sich mit dem Admin-Konto in Ihr ISPConfig-Panel einzuloggen. Gehen Sie dann zum Tab Administration und öffnen Sie den Form Designer mit Form bearbeiten. Suchen Sie nach isp - ISP User und klicken Sie auf bearbeiten.
Sie sollten nun die vollständige Formulardescription dieses speziellen Formulars sehen. Achten Sie auf spam_strategy und klicken Sie erneut auf bearbeiten.
Ändern Sie nun die Werteliste dieses Formularelements, indem Sie eine Zeile für unsere zukünftige Verschiebeoption einfügen, sodass sie wie folgt aussieht:
accept,accept;
move,move;
discard,discard;
und speichern Sie dieses Formular. Ihre Mailbenutzeroptionen in Ihrer Domain sollten jetzt diese neue Option im Dropdown-Feld für die Spam-Strategie anzeigen - auch wenn sie noch keine Funktion hat. Jetzt zum Konsolenteil: Lassen Sie uns einige ISPConfig-Dateien bearbeiten, um der neuen Option Leben einzuhauchen.
Schritt 2 - Bearbeiten der ISPConfig-Quell Dateien
Jetzt müssen wir eine Reihe von Dateien bearbeiten. Ich werde sie einfach aufschreiben und später erklären:
vi /root/ispconfig/scripts/lib/classes/ispconfig_procmail.lib.php(ungefähr Zeile 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__);
// HINZUFÜGEN: IMAP-Unterordner erstellen
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__);
// HINZUFÜGEN: IMAP-Unterordner erstellen
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");
// HINZUFÜGEN: IMAP-Unterordner erstellen
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__);
(ungefähr Zeile 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/";
}
}
(ungefähr Zeile 330)
if(is_file('/home/admispconfig/ispconfig/tools/spamassassin/usr/local/bin/spamassassin')){
@@ -302,6 +333,7 @@
// Variablen zuweisen
$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));
Dies fügt die Kernfunktionalität hinzu. Die Änderung fügt Benutzern standardmäßige Maildir-Postfächer wie Trash, Sent, Junk und Drafts jedes Mal hinzu, wenn ein Mailbenutzer erstellt wird, sodass wir Spam in den entsprechenden Junk-Ordner verschieben können.
Suchen Sie nach dem Verschiebe-String und fügen Sie ihn in den nächsten Dateien hinzu, wie gezeigt:
vi /home/admispconfig/ispconfig/lib/classes/ispconfig_isp_user.lib.php(ungefähr Zeile 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(ungefähr Zeile 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(Beispiel für en.lng, ungefähr Zeile 33)
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
vi /home/admispconfig/ispconfig/web/isp_manager/lib/lang/.lng
(Beispiel für en.lng, ungefähr Zeile 268 und Zeile 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"] = "Individual Settings";
$wb["Keine Vorlage vorhanden"] = "No Hostingplan Available";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Properties";
$wb["ISP Datenbank"] = "ISP Database";
vi /home/admispconfig/ispconfig/web/isp_kunde/lib/lang/**.lng(Beispiel für en.lng, ungefähr Zeile 268 und Zeile 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"] = "Individual Settings";
$wb["Keine Vorlage vorhanden"] = "No Hostingplan Available";
$wb["txt_accept"] = "accept";
$wb["txt_move"] = "move";
$wb["txt_discard"] = "discard";
$wb["Eigenschaften"] = "Properties";
$wb["ISP Datenbank"] = "ISP Database";
Die letzten drei Änderungen müssen Sie in jeder Sprachdatei vornehmen, oder Ihre Benutzeroberfläche zeigt einfach move anstelle des entsprechenden Begriffs in Ihrer Sprache an. Die drei Beispiel-Snippets stammen aus den en.lng-Dateien in diesen Verzeichnissen, bearbeiten Sie andere Sprachen auf die gleiche Weise (fügen Sie die move-Einträge zwischen den anderen ein).
Schritt 3 - Erstellen von benutzerdefinierten Vorlagen
Wechseln Sie jetzt in das Verzeichnis /root/ispconfig/isp/conf und erstellen Sie eine benutzerdefinierte Kopie von spamassassin.rc.master:
cd /root/ispconfig/isp/conf
cp -pr spamassassin.rc.master ./customized_templates/ cd customized_templatesJetzt bearbeiten Sie die benutzerdefinierte Vorlage, um die erforderlichen Änderungen widerzuspiegeln:
# Alle als Spam gekennzeichneten E-Mails (z. B. mit einem Punktestand höher als der festgelegte Schwellenwert)
# werden nach "/dev/null" verschoben.
{SPAM_COMMENT}:0:
{SPAM_COMMENT}* ^X-Spam-Status: Yes
{SPAM_COMMENT}{SPAM_COMMAND}
Schritt 4 (optional) - Implementierung der Bereinigung Ihrer Trash- und Spam-Ordner
Dies wurde bereits von MuisjeNL im folgenden HowTo angesprochen: Automatische Bereinigung von Trash- und/oder Junk-Ordnern mit ISPConfig (mit Roundcube + Tmpreaper / Tmpwatch)
Schritt 5 (optional) - Implementierung von Benutzerfreundlichkeit und Erstellung von Status-E-Mails
Dies befindet sich in der intensiven Entwicklung, da wir im Moment einige ziemlich gehackte Perl-Codes verwenden. Ich werde versuchen, das zu bereinigen oder in ein hübsches kleines Skript zu übertragen.
Fazit
Jetzt können Sie einen Mailbenutzer hinzufügen (oder einen bestehenden ändern), um die neue move-Methode zu verwenden. Ich habe es mit einem Benutzer getestet, der täglich etwa 100-200 Spam-E-Mails erhält und seine Strategie auf move geändert hat. Mit einem Webmailer wie Roundcube oder durch die Verbindung zum Postfach über IMAP hatte ich fast sofortige Ergebnisse, da die ersten E-Mails in den Junk-Ordner und nicht in sein Posteingang fielen.
Stellen Sie sicher, dass Sie dies überprüfen, bevor Sie es tatsächlich auf Produktionsservern ausführen.
Dieses Tutorial kommt ohne jegliche Garantie. Seien Sie weise, testen Sie es!
Da dies das erste HowTo auf HowtoForge für mich ist (und ich kein Muttersprachler bin), hoffe ich, dass Sie keine Probleme haben, es an Ihre Bedürfnisse anzupassen. Viel Spaß mit einer großartigen Software: ISPConfig!
Jens Groh für SANlutions Ltd.
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.