(gesucht) script oder cron zum junk und spam löschen

Vaio

New Member
hallo,

ich hoffe ich bin im richtigen forum, oder hätte ich es lieber im script bereich erstellen sollen?

als erstes ich habe leider keine ahnung vom script schreiben.
ich bin auf der suche nach einem script zum automatischen löschen von spam und junk welcher von mir aus 30 Tage alt ist.

wir haben hier folgende mailverzeichnis struktur:
z.b. /var/mail/vmail1/domain/i/n/f/info-2012.09.15.14.50.54/maildir/
und ab hier dann die ordner .spam .junk

jetzt habe ich folgendes script schon im netz gefunden und auch getestet welches aber bei mir nicht funzt, hoffe ihr könnt mir helfen.

Code:
#!/bin/sh
# Time to wait before removing mails from the Junk folder (Default: 7 days) Set 0 to turn off.
junk_max_hours=$((24*7))
# Time to wait before removing mails from the Trash folder (Default: 30 days) Set 0 to turn off.
trash_max_hours=$((24*30))
for domain in /var/mail/vmail1
do
  if [ -d "$domain" ]
  then
    for user in $domain/*
    do
      if [ "$junk_max_hours" -gt "0" ]
      then
        if [ -d "$user/.Junk" ]
        then
          tmpreaper -m $junk_max_hours $user/.Junk/{cur,new}
        fi
      fi
      if [ "$trash_max_hours" -gt "0" ]
      then
        if [ -d "$user/.Trash" ]
        then
          tmpreaper -m $trash_max_hours $user/.Trash/{cur,new}
        fi
      fi
    done
  fi
done
 
nein ist es nicht, gibt es noch eine andere möglichkeit das problem zu lösen?
 
Last edited by a moderator:
Das Script ist zu lang :-p

Probiere mal folgendes aus:

Code:
find /var/mail/vmail1/domain/i/n/f/info-2012.09.15.14.50.54/maildir/.junk -type f -mtime +7
#findet Dateien in '/var/mail/vmail1/domain/i/n/f/info-2012.09.15.14.50.54/maildir/.junk', die älter als 7 Tage sind

Du kannst auch mit einem Befehl alles Postfachübergreifend löschen.
Einfach mit find in '/var/mail/vmail1/' suchen und mit -path '*/.junk/*' mit anhängen. Das ganze kann man noch verodern. Am Ende hast du einen Befehl, mit dem du Junk und Spam löschen kannst. Diesen dann als Cronjob eintragen.

Wenn die Ausgabe richtig ist, kannst du am Ende -delete mit anhängen.
Für die Besserwisser, noch die POSIX-Variante:
Code:
find xxxxx -print0 | xargs -0 rm

EDIT: Ich hab keine Ahnung von Mailkram. So wie es aussieht, speichert euer Mailserver die E-Mails als Dateien. Ich kann dir aber nicht sagen, ob der Server einfach nur die Dateien abfragt oder auch eine Art Index schreibt. Im zweiten Fall, würde es zu Komplikationen führen.
 
Last edited by a moderator:
danke DeaD_EyE,

aber kannst du mir das mal bitte genauer erklären mit dem postfach übergreifend, weil das kling sehr gut für unsere Server konfig.

denn hinter den verschiedenen domains stecken ein paar postfächer mehr, und wenn man das mit einem wisch erledigen kann wäre das top
 
auch an dich ein danke bibabu,

habe das jetzt so per cron erldigt welcher täglich um 0 uhr ausgeführt wird:

find /var/mail/vmail1 -path '*/.Junk/*' -type f -mtime +30 -exec rm -r {} \;

damit sollte jetzt ja Junk der älter ist als 30 tage gelöscht werden
solltet ihr da noch einen fehler entdecken dann sagt mir bitte bescheid
 
rm --help

-r, -R, --recursive remove directories and their contents recursively

Ich würde dein Script nicht verwenden, weil du alle Dateien im Ordner .Junk löschst die alter als 30 Tage sind. Liegen die Emails denn direkt im Ordner .Junk oder ist dieser noch weiter Unterteilt? Bei mir zum Beispiel unterteilt der IMAP/POP3-Server das noch in cur, new und legt noch einige eigenen Dateien dort ab.

ls -alh /var/vmail/mail@***/maildir/.Junk

total 4.4M
drwx------ 5 vmail vmail 4.0K Sep 30 12:57 .
drwx------ 19 vmail vmail 4.0K Sep 30 17:03 ..
drwx------ 2 vmail vmail 2.5M Sep 30 12:56 cur
-rw------- 1 vmail vmail 61K Sep 28 00:14 dovecot.index
-rw------- 1 vmail vmail 1.6M Sep 30 12:56 dovecot.index.cache
-rw------- 1 vmail vmail 22K Sep 30 12:57 dovecot.index.log
-rw------- 1 vmail vmail 47 Sep 25 15:02 dovecot-keywords
-rw------- 1 vmail vmail 182K Sep 30 01:42 dovecot-uidlist
-rw------- 1 vmail vmail 0 Mar 11 2011 maildirfolder
drwx------ 2 vmail vmail 80K Sep 30 12:56 new
drwx------ 2 vmail vmail 4.0K Sep 30 12:56 tmp
 
Last edited by a moderator:
Der Hinweis ist angebracht.

Da er
Code:
-type f
verwendet, findet find auch nur Dateien und keine Verzeichnisse.

Selbst -type d würde nicht die Verweise . und .. finden (wie heißen die eigentlich?). Ich würde es aber nicht drauf anlegen. Viele haben schon schmerzlich erfahren müssen, das 'ls -a | rm -rf' eine scheiß Idee gewesen ist. Schlimmer sind noch Scripts, die in ein Verzeichnis wechseln und dann Dateien im Verzeichnis löschen. Wenn das Verzeichnis mal nicht existieren sollte, löscht das Script halt die Dateien im aktuellen Verzeichnis. Den Optionsschalter -r sollte man in Cronjobs/Scripts nur verwenden, wenn man weiß was man macht und ggf. eine Logik mit einbaut, die schlimmeres verhindert. Dieser Fehler wird sehr häufig gemacht. So ein Script kann Monate lang das machen was es soll, bis der Admin mal das Verzeichnis aus irgendeinem Grund verschiebt oder löscht.
 
Last edited by a moderator:
Back
Top