SDB:Besser arbeiten mit Mailboxen über NFS

aus openSUSE, der freien Wissensdatenbank


Inhaltsverzeichnis

Symptom

mutt erkennt neue Mails in Mailboxen auf NFS-Shares, die via "mailboxes" konfiguriert wurden nicht zuverlässig oder Mails gehen sporadisch verloren.

Ursache

NFS ist in vielen Bereichen einfach total "buggy" Attributcaching und Locking via NFS ist nicht richtig möglich.

Lösung

Die beste Lösung besteht darin, sein Mailboxformat von mbox auf maildir umzustellen. Hierbei wird jede Mail in einer separaten Datei gespeichert und sämtliche Mailattribute stehen im Dateinamen. Die Dateinamen sind einzigartig und somit ist ein Locking nicht mehr nötig. Nachteil dabei ist, dass das Einlesen großer Mailboxen etwas länger dauern kann; dafür geht das Schreiben von Mailboxen (dies geschieht fast bei jedem Mailfolder-Wechsel) umso schneller, da nur die geänderten Mails geschrieben werden müssen. Außerdem gehen keine Mails mehr durch Lockingprobleme verloren.

Vorgehen

"Maildir" wird sowohl von mutt als auch von procmail unterstützt. Es ist zumindest empfehlenswert, Mailboxen, in denen man häufig arbeitet und in die Mail eingeliefert wird auf maildir umzustellen. Dafür hängt man in seiner .procmailrc an jeden Mailbox-Namen einen Slash (/) an. Bevor man nun seine procmailrc sichert und Procmail bei der nächsten eingehenden Mail versucht ein Verzeichnis zu erstellen, was so heißt wie die alte Mailbox muss man seine alten Mailboxen umbenennen und direkt im Anschluss die neue procmailrc schreiben. Das Umbenennen kann man z.B. mit

mmv "*" "#1.oldmbox"

bewerkstelligen. Nachdem man dann die procmailrc geschrieben hat, kann man entweder seine alten Mailboxen nochmals durch procmail "jagen", wobei diese dann so sortiert werden, als kämen sie gerade neu an. Dies kann man mit

for i in `ls *.oldmbox`;do formail -s procmail < $i ;done

machen. Will man die Mailboxen von Hand (besser gesagt mit mutt) umkopieren (das würde ich eigentlich empfehlen), so sollte man vorher in seine .muttrc die Zeile

set mbox_type=maildir

eintragen, damit neue Mailboxen im maildir-Format erzeugt werden. Danach wechselt man in seine "alten" Mailboxen, "taggt" z.B. mit

T.[return]

alle Mails und kopiert diese dann z.B. mit

s+neuermailboxname[return]

in den neuen Mailboxfolder (mit dem alten Namen). Wenn die Umkopieraktion beendet ist können die .oldmbox-Dateien gelöscht werden.

Erweiterte Features

Es gibt eine Möglichkeit, gelöschte Mails aus maildir-Ordnern lokal auf der Platte zu speichern, anstatt sie im Datennirvana verschwinden zu lassen. Dies ist relativ einfach, weil man gelöschte Mails einfach als gelöscht markieren kann, anstatt sie wirklich zu eliminieren. In der muttrc muss man dafür die Zeile

set maildir_trash

eintragen. Nun macht man sich einfach ein kleines Shell-Skript in ~/bin/move-deleted-mails:

 #!/bin/sh
 # make sure to have this directories:
 # /tmp/deleted-mails
 # /tmp/deleted-mails/cur
 # /tmp/deleted-mails/new
 # /tmp/deleted-mails/tmp

 # in mutt deleted mails will be moved to this directory. You may want to
 # delete this from time to time or just keep it for nostalgic reasons ...

 /usr/bin/find ~/Mail/*/{cur,new}/ -name "*,*T" |/usr/bin/xargs -r /bin/mv -b --target-directory /tmp/deleted-mails/cur
 

Wenn man auf seinem lokalen Rechner dann einen Cronjob à la

0 * * * *       ~/bin/move-deleted-mails

aufsetzt, werden stündlich alle gelöschten Mails nach /tmp/deleted-mails verschoben, die IntEDV freut sich, weil das Homeverzeichnis etwas kleiner wird und man muss keine Angst haben eine evtl. wichtige Mail zu vernichten.