Mail-Backups mit Getmail

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.

Ein Kommentar

  1. 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

Schreibe einen Kommentar

Die Kommentare auf dieser Seite sind moderiert. Dein Kommentar wird daher erst nach Freischaltung hier erscheinen.