MailMirror – Lokales IMAP‑Backup mit systemd‑Automatisierung

MailMirror ist ein leichtgewichtiges Werkzeug zum lokalen Spiegeln von IMAP‑Postfächern. Es holt alle Mails aus deinen Ordnern ab, zerlegt Punkt‑Notation automatisch in Unterordner und speichert jede Nachricht strukturiert nach Jahr, Monat und Datum mit Betreff. So entsteht eine nachvollziehbare Ablage mit HTML‑Darstellung, Rohdatei, Anhängen und Metadaten. Dank systemd‑Integration lässt sich der Prozess bequem automatisieren und regelmäßig ausführen, ohne manuelles Eingreifen.



📖 MailMirror – Dokumentation

1. Zweck

MailMirror dient zum lokalen Spiegeln von IMAP‑Postfächern. Es speichert jede Mail in einer klaren Ordnerstruktur mit Jahr/Monat und einem Unterordner nach Schema:

Ordner/Unterordner/Jahr/Monat/YYYY-MM-DD_Betreff/
   ├── mail.html
   ├── raw.eml
   ├── meta.json
   └── Anhang.pdf

Damit erhältst du eine chronologische und nachvollziehbare Ablage deiner Mails, inklusive Anhängen und Metadaten.


2. Funktionen

  • Holt alle IMAP‑Ordner (inkl. Unterordner).
  • Zerlegt Punkt‑Notation (Archiv.Internet.Hosting.Synology) in echte Unterordner (Archiv/Internet/Hosting/Synology).
  • Speichert jede Mail mit:
    • HTML‑Darstellung inkl. Header (Betreff, Absender, Datum, Message‑ID).
    • Rohdatei (raw.eml).
    • Anhänge im gleichen Ordner.
    • Metadaten (meta.json).
  • Ordnername: YYYY-MM-DD_Betreff unter Jahr/Monat.
  • Logging:
    • Text‑Log (mailmirror.log) für Statusmeldungen.
    • JSON‑Log (mailmirror.jsonl) für Admin‑Panel‑Integration.

3. Projektstruktur

mailmirror/
├── config.env
├── mirror_mail.sh
├── fetch_mail.py
├── utils/
   ├── helpers.py
   └── logger.py
└── logs/
    ├── mailmirror.log
    └── mailmirror.jsonl

4. Installation

Abhängigkeiten

sudo apt update
sudo apt install -y python3

Deployment

sudo mkdir -p /opt/mailmirror
sudo cp -r mailmirror/* /opt/mailmirror/
sudo chmod -R 750 /opt/mailmirror
sudo chown -R root:root /opt/mailmirror

sudo mkdir -p /var/lib/mailmirror/work /var/lib/mailmirror/logs
sudo chown -R root:root /var/lib/mailmirror
sudo chmod -R 750 /var/lib/mailmirror

5. Konfiguration

Passe config.env an:

IMAP_SERVER=imap.deinmailserver.de
IMAP_USER=deinuser
IMAP_PASS=deinpasswort

WORKDIR=/var/lib/mailmirror/work

LOG_DIR=/var/lib/mailmirror/logs
TEXT_LOGFILE=/var/lib/mailmirror/logs/mailmirror.log
JSON_LOGFILE=/var/lib/mailmirror/logs/mailmirror.jsonl

MAIL_ID_SCHEME=DATE_SUBJECT
MAX_SUBJECT_DIRLEN=120

6. Nutzung

Manuell starten:

cd /opt/mailmirror
./mirror_mail.sh

Die Mails werden lokal im WORKDIR gespeichert.


7. Automatisierung mit systemd

Service

Erstelle /etc/systemd/system/mailmirror.service:

[Unit]
Description=Mail Mirror (lokal)
After=network-online.target

[Service]
Type=oneshot
WorkingDirectory=/opt/mailmirror
ExecStart=/opt/mailmirror/mirror_mail.sh
User=root
Group=root

[Install]
WantedBy=multi-user.target

Timer (optional)

Erstelle /etc/systemd/system/mailmirror.timer:

[Unit]
Description=Nightly Mail Mirror

[Timer]
OnCalendar=02:00
Persistent=true

[Install]
WantedBy=timers.target

Aktivieren

sudo systemctl daemon-reload
sudo systemctl enable --now mailmirror.timer

8. Logs

  • Text‑Log: /var/lib/mailmirror/logs/mailmirror.log
  • JSON‑Log: /var/lib/mailmirror/logs/mailmirror.jsonl

Beispielauszug:

2025-12-03 02:00:01 - INFO - Starte Mail-Fetch
2025-12-03 02:00:02 - INFO - Bearbeite Ordner: INBOX
2025-12-03 02:00:03 - INFO - [OK] UID=123 | Ordner=INBOX | Pfad='INBOX/2025/12/2025-12-02_Projektstatus' | Betreff='Projektstatus' | Anhänge=1
2025-12-03 02:00:04 - INFO - Mail-Fetch abgeschlossen

9. Hinweise

  • Punkt‑Notation wird automatisch in Unterordner zerlegt.
  • Betreff wird bereinigt und auf MAX_SUBJECT_DIRLEN gekürzt.
  • Bei fehlendem Datum oder Betreff wird UID als Fallback genutzt.
  • Nur lokales Speichern – kein Upload mehr.
  • Für große Postfächer kannst du später Delta‑Sync (UID‑Cache) ergänzen.

© 2025 MaDe-Online