Archive

Kategorien

Maildoubletten finden und löschen

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!

1 comment to Maildoubletten finden und löschen

  • Tobi

    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

    • in allen Clients die lokalen Maildaten löschen
    • ALLE Clients beenden
    • zudem am Besten auch gleich den Dovecot stoppen
    • Suchlauf starten
    • Clients wieder verbinden

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

  

  

  

4 + 13 =

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahren Sie mehr darüber, wie Ihre Kommentardaten verarbeitet werden .