Meine E-Mail-Konten rufe ich für gewöhnlich per IMAP ab. Das ist zwar einerseits komfortabel, weil auf all meinen Geräten derselbe Stand vorhanden ist, andererseits bin ich natürlich von der Verfügbarkeit des Mailservers und dem Ausbleiben technischer Pannen beim jeweiligen Provider abhängig. Hinzu kommt das Risiko versehentlich gelöschter E-Mails.
Aus diesem Grund habe ich mir mithilfe von Getmail 5.4 eine eine Archivierung auf meinem Homeserver gebastelt. Diese läuft alle paar Stunden, holt neue Mails aus den Postfächern ab und speichert sie in einem lokalen Maildir. Dabei werden ungelesene Mails nicht als gelesen markiert und es werden auch keine Mails auf dem Server gelöscht. Das einzige Problem, das ich noch nicht lösen konnte: Wenn ich eine Mail in einen anderen IMAP-Ordner verschiebe, lädt Getmail sie erneut herunter. Aber damit kann ich leben.
Ich habe dazu folgende Ordnerstruktur und einige Dateien angelegt:
/data/mail ├── getall.sh ├── getall.log ├── example@gmail.com │ ├── conf │ │ └── getmailrc │ ├── log │ │ └── getmail.log │ └── maildir │ ├── cur │ ├── new │ └── tmp ├── me@example.com │ ├── conf │ │ └── getmailrc │ ├── log │ │ └── getmail.log │ └── maildir │ ├── cur │ ├── new │ └── tmp └── <weitere E-Mail-Adressen> └── …
getall.sh
ruft Getmail mit den entsprechenden Konfigurationsdateien pro Unterverzeichnis auf:
#!/bin/bash DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo "Script run $(date)" for i in ${DIR}/*/conf do echo $i cd $i getmail -g./ done echo "-------------------"
Ich rufe getall.sh
einmal am Tag via cron auf.
0 3 * * * /bin/bash /data/mail/getall.sh >> /data/mail/getall.log 2>&1
Für die Gmail-Adresse sieht meine Getmail-Konfiguration getmailrc
wie folgt aus:
[retriever] type = SimpleIMAPSSLRetriever server = imap.gmail.com username = example@gmail.com password = PASSWORD1234 mailboxes = ALL use_peek = true [destination] type = Maildir path = /data/mail/example@gmail.com/maildir/ [options] verbose = 1 message_log = /data/mail/example@gmail.com/log/getmail.log read_all = false
Die heruntergeladenen Mails landen als einzelne Dateien in maildir/new
. Die IMAP-Ordnerstruktur geht dabei zunächst verloren, ist in den Mail-Dateien aber in einem zusätzlichen Header-Feld X-getmail-retrieved-from-mailbox
noch vermerkt, sodass man sie bei Bedarf schon rekonstruieren könnte.
Hi,
danke für deinen Blogbeitrag.
Ich mache das Backup manuell ohne Cronjob.
Das Script hat kleinere Korrekturen.
#!/bin/bash
email="max@mustermann.de"
if [ -d mail/$email/conf ] && \
[ -d mail/$email/log ] && \
[ -d mail/$email/maildir/new ] && \
[ -d mail/$email/maildir/tmp ] && \
[ -d mail/$email/maildir/cur ]; then
echo "All folders exist."
else
mkdir -p mail/$email/{conf,log,maildir/{new,tmp,cur}}
fi
echo "Script run $(date)"
for i in mail/*/conf
do
echo $i
getmail -g $i
done
echo "-------------------"
getmailrc:
[retriever]
type = SimpleIMAPSSLRetriever
server = mail.your-server.de
username = max@mustermann.de
password = verrateIchNicht
mailboxes = ALL
use_peek = true
[destination]
type = Maildir
path = mail/max@mustermann.de/maildir/
[options]
verbose = 1
message_log = mail/max@mustermann.de/log/getmail.log
read_all = false