Wenn man auf seinem Mailserver viel an den Mailboxen rumdoktort, kann es passieren, dass man Maildoubletten erzeugt. Das ist recht mühsam, weil dann die Clients die Mails doppelt laden und damit Bandbreite und Zeit verschwenden. So geschehen bei meiner Mailbox und den «gesendeten Elementen»
Daher habe ich mir folgendes Helferlein geschrieben, welches die Doubletten eines Maildir ermittelt und löscht.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/bash h_file=/tmp/mailHashes.txt i=0 # das File muss VOR jedem Durchlauf gelöscht werden # sonst sind die Chancen gross, dass man nicht nur Dubletten löscht [ -e $h_file ] && rm -f $h_file >/dev/null 2>&1 touch $h_file for f in $(find ./new ./cur ./tmp -type f) ; do hash=$(sha512sum $f | awk '{print $1}') [ "x$(grep $hash $h_file)" != 'x' ] && i=$(( i+1 )) && printf "$i\r" && rm -f $f && continue printf "$i\r" echo "$hash" >> $h_file done echo "Found $i dupes" [ $i -gt 0 ] && echo "Found and removed $i dupes therefore need to rebuild dovecot index" && find ./ -type f -regex '.*\(dovecot-\|dovecot\.\|\.uidvalidity\).*' -delete |
Das Script geht davon aus, dass das aktuelle Arbeitsverzeichnis ein Maildir ist. Also erst mittels cd dorthin wechseln z.B.
1 2 | cd /home/vmail/domain.tld/user/.Maildir/.Sent bash /pfad/zum/script |
Das Script muss pro Verzeichnis im Maildir ausgeführt werden und kann nicht rekursiv über die ganze Mailbox gehen!
Es ist wichtig, dass man ALLE Mailclients beendet, welche noch mit der Mailbox verbunden sind. Zusätzlich kann es auch Sinn machen den Dovecot Dienst zu stoppen. Sonst baut ein verbundener Client, den man vergessen hat zu beenden z.B. der Mailclient auf dem Smartphone, die Index Files neu auf während der Löschjob noch am Laufen ist.
Desweiteren ist es wichtig, dass man die lokalen Maildaten in den Clients löscht. Sonst hat man razfaz wieder Doubletten. So geschehen mit meinem Thunderbird, der ich zuvor beendet habe, den Suchlauf machte und wieder gestartet habe. Zuerst sah die Box gut aus, aber nach ein paar Minuten waren wieder Doubletten drin.
Daher habe ich für TB erstmal die fragliche Mailbox gesichert und dann die Mails im TB gelöscht. Dann TB beendet, Backup zurückkopiert und den Doublettensuchlauf gestartet. Nach dem erneuten Starten des TB war dann Ruhe mit den Doubletten.
Also folgendes ist wichtig