[[Uebersicht|← Zurück zur Homepage]]
# PaperSafe – E-Mail-Postfächer (laufender Abruf, Teil B)
> **Rolle dieser Note:** Der **laufende Abruf aus aktiven Postfächern** per IMAP. Ausgegliedert aus [[09-E-Mail-Import]] (dort steht Teil A – der einmalige Import alter PST-Archive), weil beide Vorhaben unterschiedliche Technik und einen eigenen Umfang haben.
>
> **Stand 21.07.2026:** Konzept steht, **zwei konkrete Postfächer** entschieden (Proton + Outlook, siehe unten). **Noch nicht eingerichtet** – nächster Schritt ist die Proton-Bridge im eigenen LXC.
## Grundentscheidungen (21.07.2026)
| Entscheidung | Wahl |
|---|---|
| **Was wird eingelesen** | **Stufe 3** – Mail als `.eml` *und* Anhänge als eigene Dokumente |
| **Auswahl der Mails** | Der Nutzer **verschiebt zu archivierende Mails selbst in spezielle Ordner**. Diese Ordner sind die Importquelle |
| **Tag je Ordner** | Ordnername wird zum Tag – über **eine Regel je Ordner** (kein Automatismus, siehe unten) |
| **Korrespondent** | **automatisch aus der Absenderadresse** |
## Die zwei Postfächer (entschieden 21.07.2026)
| | Postfach 1 – Proton | Postfach 2 – Outlook |
|---|---|---|
| Kontotyp | Proton Mail, **kostenpflichtiger Plan** | **persönliches** Microsoft-Konto (outlook.com) |
| Anbindung | **Proton Bridge** (lokaler IMAP-Proxy) | ~~direkt IMAP~~ **IMAP tot** → Export in Ablegeordner + Cron (siehe Korrektur unten) |
| Auth | Bridge-Passwort (von der Bridge erzeugt) | kein Live-Zugriff |
| Ablageordner | **mehrere** → je Ordner eine Regel | `Ablage` → Export als `.eml` |
| OAuth nötig? | nein (Bridge liefert IMAP) | entfällt (kein Live-IMAP) |
> ### ⚠ Korrektur 22.07.2026: Outlook-IMAP funktioniert nicht
>
> Die obige Annahme („persönliches Konto erlaubt App-Passwort-IMAP") ist **überholt**. Am System getestet (`imaplib` gegen `outlook.office365.com` und `imap-mail.outlook.com`): **`AUTHENTICATE failed`**, auch nach Einschalten des IMAP-Schalters und mit aktiver 2FA. Der Nutzer hat es zusätzlich mit **Thunderbird** geprüft (das OAuth2 nativ kann) – **ebenfalls kein IMAP**.
>
> **Schlussfolgerung:** IMAP ist für dieses Konto bei Microsoft schlicht **abgeschaltet/blockiert**. Wichtig: Der Paperless-Kontotyp „Outlook OAuth" spricht **trotzdem IMAP** (nur mit Token statt Passwort) – er würde also **auch scheitern**. Eine Azure-App-Registrierung wäre vergeblich. **Live-IMAP ist für dieses Konto vom Tisch.**
>
> **Gewählter Weg (Nutzer, 22.07.2026): Export in einen Ablegeordner.** Der Nutzer exportiert die Mails aus „Ablage" als `.eml` in einen **eigenen Ablegeordner** auf der Freigabe (nicht direkt Consume – sonst kommen Anhänge nur als Namensliste). Ein **Cron-Job** ruft dort `pst-aufbereiten.py` auf → Stufe 3 bleibt erhalten (Mail + Anhänge getrennt) → Paperless importiert automatisch. Der Export selbst kann manuell erfolgen oder über **Power Automate** (Graph-basiert, umgeht IMAP) weitgehend automatisiert werden. **Noch nicht eingerichtet.**
### Architektur Proton Bridge
```
Proton-Server ──(HTTPS, Login+2FA)──► Proton Bridge [eigener neuer LXC]
│ lokaler IMAP 127.0.0.1:1143 (STARTTLS, self-signed)
▼
Erreichbarkeit über LXC-Grenze ⚠ zu lösen
▼
Paperless (CT 110) ── Mail-Konto ──► Regeln je Ordner
```
**Entscheidung: eigener kleiner LXC** nur für die Bridge – getrennt von Paperless und Host.
### Umsetzungsweg gewählt (22.07.2026): Community-Script
Statt Handaufbau nutzen wir das fertige **Proxmox-VE-Helper-Script „Proton Mail Bridge"** ([community-scripts.org](https://community-scripts.org/scripts/protonmail-bridge)). Es legt genau den gewünschten eigenen LXC an und nimmt uns `pass`/GPG, Dienst-Setup und den Forwarder ab:
| Aspekt | Was das Script macht |
|---|---|
| **LXC-Default** | Debian **13**, **2 Kerne / 1024 MB RAM / 8 GB Disk** |
| **Bridge** | headless als Dienst |
| **LAN-Erreichbarkeit** | über `systemd-socket-proxyd`: **IMAP 143 → 127.0.0.1:1143**, SMTP 587 → 127.0.0.1:1025 — d. h. die Bridge ist **von CT 110 aus über die LXC-IP:143 erreichbar** |
| **Erstanmeldung** | `protonmailbridge-configure` im Container (CLI-Login inkl. 2FA); Bridge erzeugt das IMAP-Passwort |
**Damit ist offener Punkt 1 (Erreichbarkeit über die LXC-Grenze) gelöst** – der Socket-Proxy ersetzt den zuvor geplanten `socat`-Forwarder. Offen bleibt nur das selbstsignierte Zertifikat (Punkt 2).
> **⚠ RAM-Timing:** Der Proxmox-Host swappt bereits im Normalbetrieb (16 GB, siehe [[07 Hardware-Ersatzplanung]]). Ein weiterer LXC mit 1 GB verschärft genau diesen Engpass. **Empfehlung: Ausrollen an den Hardwaretausch koppeln** – oder bewusst knapp früher, falls die Proton-Archivierung dringend ist.
### Warum eigener LXC – drei Varianten abgewogen (21.07.2026)
Auf die Frage, ob die Bridge nicht einfacher direkt in CT 110 läge, wurden drei Varianten geprüft. **Der Kernpunkt:** Paperless läuft in **Docker** innerhalb CT 110 – „localhost" des Containers ist durch Docker-Netzisolation *nicht* das localhost des Paperless-Containers. „Lokal installiert" bringt deshalb keine automatische Erreichbarkeit.
| Variante | Erreichbarkeit | Isolation | Urteil |
|---|---|---|---|
| **A – eigener LXC** | Bridge auf localhost + `socat` auf die LAN-IP | am saubersten | **gewählt** |
| B – nativ in CT 110 | Bridge auf localhost + `socat` zur Docker-Gateway | mischt zwei Dienste | verworfen – Forwarder trotzdem nötig, ohne Isolationsgewinn |
| C – Sidecar im Compose | über Docker-Servicename, **kein Forwarder** | Fremd-Image im Archiv-Stack | verworfen – Proton-Sitzung läge im Paperless-Backup, gemeinsamer Lebenszyklus, Fremd-Image zu pinnen |
**Begründung für A:** Die Bridge bleibt unabhängig sicher- und wartbar; die Proton-Sitzung wandert **nicht** in den 3×/2× gesicherten Paperless-Stack; kein Fremd-Image im Archiv-Container. Preis ist der `socat`-Forwarder und ein Container mehr – bewusst akzeptiert.
**Headless-Voraussetzung (offiziell bestätigt):** Die Bridge braucht einen Secret-Store – auf einem Server ohne Desktop über **`pass` + GPG**. Sie läuft dann als Dienst (`protonmail-bridge --noninteractive`), die Erstanmeldung mit 2FA erfolgt einmalig interaktiv.
> ### ⚠ Offene technische Punkte (vor der Umsetzung zu klären)
>
> 1. ~~**Erreichbarkeit über die LXC-Grenze.**~~ **Gelöst durch das Community-Script** (`systemd-socket-proxyd` macht IMAP auf `LXC-IP:143` verfügbar). Kein eigener `socat`-Forwarder mehr nötig.
> 2. **Selbstsigniertes Zertifikat.** Das Bridge-IMAP nutzt ein self-signed Cert. Das Paperless-Mailkonto muss es akzeptieren (Zertifikat importieren oder Prüfung entsprechend einstellen). **Bleibt offen – erfahrungsgemäß der fummeligste Teil, am System zu testen.**
## Der Mechanismus
Anders als beim Dateiimport (Datei erscheint in der Freigabe) verbindet sich Paperless per **IMAP direkt mit dem Postfach** – standardmäßig alle 10 Minuten (`PAPERLESS_EMAIL_TASK_CRON`).
Aufbau: erst **Konten** (`Einstellungen → E-Mail`), darunter je Konto beliebig viele **Regeln**. Ablauf je Durchlauf: verbinden → passende Mails holen (nach Ordner, Höchstalter, Filtern) → Mail und Anhänge einlesen, Metadaten aus der Regel anwenden → **erst dann** die Regel-Aktion auf die Mail anwenden.
## Der Ordner-Workflow – so setzen wir ihn um
Der Nutzer sortiert zu archivierende Mails bereits in eigene Ordner. Das ist die ideale Vorlage: **je Ordner eine Regel.**
```
Postfach
├─ Archiv/Versicherungen → Regel 1: Ordner=Versicherungen, Tag=Versicherungen
├─ Archiv/Steuer → Regel 2: Ordner=Steuer, Tag=Steuer
└─ Archiv/Handwerker → Regel 3: Ordner=Handwerker, Tag=Handwerker
```
### ⚠ Wichtig: kein automatischer Ordner→Tag
Am laufenden System geprüft (`MailRule`-Modell, v2.20.15): Die Mail-Regel kennt **`folder`** (genau **ein** Ordner, **keine** Rekursion in Unterordner) und **`assign_tags`** (fest gesetzte Tags). Ein Automatik-Feld „Ordnername als Tag" wie `SUBDIRS_AS_TAGS` beim Consume-Ordner **existiert nicht**.
**Folge:** Für jeden Archiv-Ordner wird eine eigene Regel angelegt, deren Tag von Hand auf den Ordnernamen gesetzt wird. Einmalige Einrichtung, danach läuft es automatisch. Bei verschachtelten Ordnern muss **jeder Blatt-Ordner** seine eigene Regel bekommen (keine Rekursion).
## Was Stufe 3 liefert
Verifizierte Stufen (`consumption_scope`):
| Stufe | Wirkung |
|---|---|
| 1 | Nur Anhänge |
| 2 | Nur die Mail als `.eml` |
| **3 (gewählt)** | **Mail als `.eml` + Anhänge als eigene Dokumente** |
Damit entsteht dieselbe Trennung wie beim PST-Import: die Mail als Verlauf, der Anhang als eigenes Beleg-Dokument. Ein passendes Tag-Paar (`Verlauf`/`Beleg`) kann je Regel mitgesetzt werden.
## Der Gewinn: Korrespondent automatisch
Beim PST-Import hatten 222 von 244 Mails **keinen** Korrespondenten. Bei IMAP leitet Paperless ihn **aus der Absenderadresse** ab (`assign_correspondent_from`):
| Option | Wirkung |
|---|---|
| Adresse verwenden | Korrespondent = `
[email protected]` |
| Name verwenden | Korrespondent = Anzeigename, sonst Adresse |
**Jede Mail ist damit von Anfang an einem Absender zugeordnet** – ohne eine einzige absenderspezifische Regel. Das ist die sauberste Zuordnung im ganzen System.
## Die Mail-Aktion – was nach dem Einlesen mit der Mail passiert
Verifizierte Optionen (`MailAction`). Jede verhindert, dass dieselbe Mail zweimal eingelesen wird:
| Aktion | Wirkung | Bewertung im Ordner-Workflow |
|---|---|---|
| **Als gelesen markieren** | gelesene werden übersprungen | Einfach. Haken: Hast du die Mail im Archiv-Ordner schon gelesen, wird sie **nie** eingelesen |
| **In Ordner verschieben** | Mail wandert in einen „erledigt"-Unterordner | **Sauberste Wahl hier** – der Archiv-Ordner enthält nur noch Unverarbeitetes |
| Markieren (Flag) | markierte werden übersprungen | unauffällig, missbraucht das Flag |
| Schlagwort setzen | IMAP-Keyword | **nicht jeder Server unterstützt das** |
| Löschen | Mail sofort weg | **nicht empfohlen** – scheitert die Verarbeitung, ist die Mail weg *und* das Dokument fehlt |
> **Empfehlung:** „In Ordner verschieben" (z. B. `Versicherungen/erledigt`), weil du die Mails ohnehin selbst einsortierst und beim Lesen nicht aufpassen musst. **Zu entscheiden.**
> **Warnung aus der Doku:** Die Aktion wird auf **alle** Mails angewendet, aus denen eingelesen wurde. Scheitert die Verarbeitung danach, kann ein Dokument fehlen, während die Mail bereits als erledigt gilt.
## Privat/Obeco – muss je Regel gesetzt werden
Beim Dateiimport kam die Vertraulichkeit aus dem Ordnernamen. **Bei Mail gibt es diesen Automatismus nicht.** Zwei saubere Wege:
- **Trennt sich nach Postfach** (ein geschäftliches, ein privates Konto): Speicherpfad je Konto/Regel fest zuweisen – Konto → `Obeco` bzw. `Privat`.
- **Gemischtes Postfach:** je Ordner-Regel entscheiden, welcher Speicherpfad gilt.
Ohne bewusste Zuweisung kommen Mail-Dokumente **ohne** Kennzeichnung herein.
## Sicherheit
**App-Passwörter kommen nicht ins Vault** (Projektregel 6). Gmail und die meisten Anbieter verlangen ein App-Passwort – das normale Kontopasswort funktioniert bei IMAP nicht. Übermittlung separat; in dieser Note steht nur „generiert, separat übermittelt".
## Vorgehen in Schritten
| Schritt | Inhalt | Prüfbar an |
|---|---|---|
| **B-0** | Postfächer benennen: Adressen, Anbieter, App-Passwörter beschaffen | Zugangsdaten liegen vor |
| **B-1** | **Ein** Konto anlegen, Verbindung testen | Konto verbindet sich, Ordner werden gelistet |
| **B-2** | **Eine** Regel für **einen** Archiv-Ordner, Stufe 3, Tag = Ordnername | Erstes Dokument kommt korrekt an |
| **B-3** | Prüfen: Mail *und* Anhang da? Tag? Korrespondent? Speicherpfad? | Ergebnis stimmt |
| **B-4** | Weitere Ordner-Regeln nach demselben Muster | je Regel geprüft |
| **B-5** | Mail-Aktion final festlegen (Ordner „erledigt" o. Ä.) | keine Mail wird zweimal verarbeitet |
| **B-6** | Weitere Postfächer nach demselben Muster | alle Konten aktiv |
**Ein Konto, eine Regel, ein Testlauf** – erst danach ausrollen. Anders als beim Dateiimport wirkt hier jede Aktion aufs Postfach zurück.
## Gut zu wissen
1. **Verarbeitete Mails** merkt sich Paperless über die Message-UID (*Mail → Verarbeitete Mails*). Soll eine Mail neu verarbeitet werden, dort den Eintrag löschen.
2. **Ordnertrennzeichen** variieren je Server (`.`, `/`, `|`). Bei Fehlern listet Paperless die gefundenen Ordner ins Log – daran den korrekten Ordnernamen ablesen.
3. **Live-Mails sind wohlgeformt.** Die Kopfzeilen-Reparatur aus dem PST-Import (Teil A) entfällt hier – das Problem betraf nur alte, exportierte Archive.
## Offene Punkte
**Postfächer** – entschieden: Proton (Bridge) + Outlook persönlich (App-Passwort).
- [ ] **Proton-Bridge-LXC** per Community-Script anlegen (neue Komponente – Provisionierung freigeben), Erstanmeldung `protonmailbridge-configure` mit 2FA — **möglichst nach dem RAM-Upgrade** (Host swappt bereits)
- [ ] **Selbstsigniertes Zertifikat** der Bridge in Paperless akzeptieren (Erreichbarkeit selbst ist durch das Script gelöst)
- [ ] **Outlook-App-Passwort** erstellen (2FA aktiv?) und separat übermitteln
- [ ] **Liste der Proton-Ablageordner** – je Ordner eine Regel mit passendem Tag
- [ ] **Name des Outlook-Ablageordners** – eine Regel
- [ ] **Mail-Aktion final:** „in Ordner verschieben" (empfohlen) oder „als gelesen"? (B-5)
- [ ] **Privat/Obeco:** ordnet sich das je Postfach zu (z. B. Proton = Privat, Outlook = Obeco) oder je Ordner?
- [ ] **Eigenes Kennzeichen** für Mail-Dokumente (Tag `aus E-Mail`), um sie von Datei-Importen zu unterscheiden?
## Quellen
- Paperless-ngx – `docs/usage.md`, Tag `v2.20.15`, Abschnitt *Incoming Email*: Konten und Regeln, Reihenfolge, Aktionen und ihre Wirkung, verarbeitete Mails, Ordnertrennzeichen, Prüfintervall `PAPERLESS_EMAIL_TASK_CRON` – Zugriff 19.07.2026
- Eigene Prüfung am laufenden System CT 110 (v2.20.15), Modell `paperless_mail.models.MailRule`: `consumption_scope` (1 nur Anhänge / 2 Mail als `.eml` / 3 Mail + Anhänge getrennt), `action` (löschen/verschieben/gelesen/flag/tag), `assign_correspondent_from` (Adresse/Name), **`folder` = genau ein Ordner ohne Rekursion**, **`assign_tags` fest**, kein Automatik-Feld für Ordnername-als-Tag – 21.07.2026
- Eigene Prüfung `paperless_mail.models.MailAccount` (v2.20.15): Felder `imap_security` (keine/SSL/STARTTLS), `username`/`password`, **`is_token`/`refresh_token`/`expiration`** (OAuth vorhanden), `PAPERLESS_OAUTH_CALLBACK_BASE_URL` aktuell **nicht** gesetzt – 21.07.2026
- Proton – *Bridge for Linux*, `proton.me/support/bridge-for-linux`: **Bridge nur mit kostenpflichtigem Plan**, benötigt einen **Secret-Service-Passwortmanager (GNOME Keyring oder `pass`)** – Zugriff 21.07.2026
- Proxmox VE Helper-Scripts – *Proton Mail Bridge*, `community-scripts.org/scripts/protonmail-bridge` (Mirror `proxmox-scripts.com/posts/protonmail-bridge`): LXC-Default **Debian 13, 2 Kerne / 1024 MB / 8 GB**, headless-Bridge mit `systemd-socket-proxyd` (**IMAP 143 → 127.0.0.1:1143**, SMTP 587 → 127.0.0.1:1025), Erstsetup `protonmailbridge-configure` – Zugriff 22.07.2026
---
**Status:** **Konzept** – Proton via Bridge im eigenen LXC (Umsetzungsweg: Community-Script), Outlook persönlich via Export+Cron; noch nicht eingerichtet
**Version:** 1.4
**Letzte Aktualisierung:** 22.07.2026, 15:45 Uhr
### Änderungshistorie
| Version | Datum | Uhrzeit | Änderung |
|---|---|---|---|
| 1.0 | 21.07.2026 | 09:15 | Erstfassung – Teil B aus [[09-E-Mail-Import]] ausgegliedert (Note 09 war groß genug). Grundentscheidungen des Nutzers aufgenommen: **Stufe 3** (Mail + Anhänge), **Ordner-Workflow** (der Nutzer verschiebt Mails selbst in Archiv-Ordner), **eine Regel je Ordner** mit Tag = Ordnername. Am laufenden System verifiziert, dass es **keinen** automatischen Ordner→Tag gibt und `folder` nicht rekursiv ist. Korrespondent-Automatik aus der Absenderadresse dokumentiert |
| 1.1 | 21.07.2026 | 09:30 | **Zwei konkrete Postfächer entschieden.** Proton (kostenpflichtig) über **Proton Bridge in eigenem LXC**; Outlook **persönlich** über direktes IMAP mit App-Passwort (kein OAuth). Architektur, Ausstattungsvorschlag und Headless-Voraussetzung (`pass`+GPG) dokumentiert. **Zwei offene technische Punkte** festgehalten: Bridge-Erreichbarkeit über die LXC-Grenze (voraussichtlich `socat`) und das selbstsignierte Bridge-Zertifikat. Offene Punkte und Quellen (MailAccount-Felder, Proton-Bridge-Seite) ergänzt |
| 1.2 | 21.07.2026 | 09:40 | **Bridge-Architektur begründet festgelegt.** Auf Nachfrage drei Varianten abgewogen (eigener LXC / nativ in CT 110 / Sidecar im Compose). Kernpunkt dokumentiert: Paperless läuft in Docker, daher bringt „lokal in CT 110" keine automatische Erreichbarkeit. **Variante A (eigener LXC) gewählt**, B und C mit Begründung verworfen |
| 1.4 | 22.07.2026 | 15:45 | **Umsetzungsweg für die Proton-Bridge festgelegt:** Proxmox-VE-Helper-Script „Proton Mail Bridge". Legt den eigenen LXC an (Debian 13, 2 Kerne/1 GB/8 GB) und macht IMAP per `systemd-socket-proxyd` auf `LXC-IP:143` im LAN verfügbar → **offener Punkt 1 (Erreichbarkeit/`socat`) damit gelöst**. Selbstsigniertes Zertifikat bleibt offen. RAM-Timing-Warnung ergänzt (Host swappt, Ausrollen an Hardwaretausch koppeln). Checkliste und Quelle aktualisiert |
| 1.3 | 22.07.2026 | 09:15 | **Outlook-IMAP funktioniert nicht** – am System getestet (`AUTHENTICATE failed` trotz IMAP-Schalter und 2FA), vom Nutzer per Thunderbird bestätigt. IMAP ist für das Konto abgeschaltet; da Paperless-„Outlook OAuth" ebenfalls IMAP spricht, wäre OAuth vergeblich. **Gewählter Weg:** Export der Mails als `.eml` in einen Ablegeordner + Cron mit `pst-aufbereiten.py` (Stufe 3 bleibt), optional per Power Automate automatisiert. Tabelle und Korrekturhinweis ergänzt |
---
[[Impressum|Impressum]] | [[Datenschutzerklärung|Datenschutz]]