docs: README auf aktuellen Stand bringen (PROJ-43/52 Deployed, Config-Referenz vervollständigt)
"In Entwicklung" und Funktionsübersicht listeten PROJ-43/PROJ-52 noch als Planned, obwohl seit 2026-07-04 deployt. Config-Referenz fehlten mehrere produktiv genutzte Sektionen (server.fqdn, api.trusted_proxies/secure_cookies, smtp_out, smtp.tenant_routing, storage.retention_days/min_retention_days/ compress, ocr.paused_hours, imap_scheduler, reconciliation, imap_server, metrics) — jetzt vollständig dokumentiert.
This commit is contained in:
@@ -79,8 +79,8 @@ Ein selbst gehostetes, unternehmenstaugliches Mail-Archiv-System. Empfängt E-Ma
|
|||||||
| Self-Service Onboarding (Sign-up, Passwort-Reset) | ✅ Deployed |
|
| Self-Service Onboarding (Sign-up, Passwort-Reset) | ✅ Deployed |
|
||||||
| REST API für externe CRM-Anbindung | ✅ Deployed |
|
| REST API für externe CRM-Anbindung | ✅ Deployed |
|
||||||
| CLI: `archivmail import` / `export` / `reindex` | ✅ Deployed |
|
| CLI: `archivmail import` / `export` / `reindex` | ✅ Deployed |
|
||||||
| Automatische Archivierungsregeln (SMTP/IMAP-Routing) | 🔄 Planned |
|
| Automatische Archivierungsregeln (SMTP/IMAP-Routing nach Domain/Absender) | ✅ Deployed |
|
||||||
| Vollständigkeits-Reconciliation (Zähl-Report) | 🔄 Planned |
|
| Vollständigkeits-Reconciliation (Zähl-Report Mailserver vs. Archiv) | ✅ Deployed |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -256,8 +256,9 @@ Das Update-Skript:
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
server:
|
server:
|
||||||
api_port: 8080 # HTTP-API Port
|
fqdn: "archivmail.firma.de" # verwendet in SMTP-EHLO, IMAP-Greeting, generierten Links
|
||||||
smtp_port: 2525 # SMTP-Eingang Port
|
api_port: 8080 # HTTP-API Port
|
||||||
|
smtp_port: 2525 # SMTP-Eingang Port
|
||||||
|
|
||||||
database:
|
database:
|
||||||
host: 127.0.0.1
|
host: 127.0.0.1
|
||||||
@@ -271,6 +272,9 @@ storage:
|
|||||||
store_path: /var/archivmail/store # Haupt-Mailspeicher (AES-256-GCM)
|
store_path: /var/archivmail/store # Haupt-Mailspeicher (AES-256-GCM)
|
||||||
astore_path: /var/archivmail/astore # Anhang-Speicher
|
astore_path: /var/archivmail/astore # Anhang-Speicher
|
||||||
keyfile: /etc/archivmail/keyfile # 32-Byte AES-Schlüsseldatei
|
keyfile: /etc/archivmail/keyfile # 32-Byte AES-Schlüsseldatei
|
||||||
|
retention_days: 0 # globale Löschsperre, 0 = kein Lock (GoBD: z.B. 3650 für 10 Jahre)
|
||||||
|
min_retention_days: 0 # PROJ-51: erzwungenes Minimum — Regeln/Tenants dürfen nur verlängern
|
||||||
|
compress: true # gzip vor AES-256-GCM (spart ~40-60% Disk)
|
||||||
|
|
||||||
smtp:
|
smtp:
|
||||||
enabled: true
|
enabled: true
|
||||||
@@ -281,19 +285,49 @@ smtp:
|
|||||||
max_size_mb: 50
|
max_size_mb: 50
|
||||||
allowed_ips:
|
allowed_ips:
|
||||||
- 127.0.0.1
|
- 127.0.0.1
|
||||||
|
tenant_routing: "domain" # "domain" (tenant_domains/PROJ-43-Regeln) oder "default"
|
||||||
|
default_tenant_id: 0 # genutzt bei routing "default" oder wenn Domain-Lookup fehlschlägt
|
||||||
|
|
||||||
|
smtp_out:
|
||||||
|
host: "" # nur nötig für Self-Service-Mails (Passwort-Reset, Sign-up)
|
||||||
|
port: 587
|
||||||
|
user: ""
|
||||||
|
password: ""
|
||||||
|
tls: true
|
||||||
|
from: "archivmail <noreply@firma.de>"
|
||||||
|
|
||||||
api:
|
api:
|
||||||
bind: ":8080"
|
bind: ":8080"
|
||||||
secret: "" # JWT-Signaturschlüssel (mind. 32 Zeichen)
|
secret: "" # JWT-Signaturschlüssel (mind. 32 Zeichen)
|
||||||
|
secure_cookies: false # true wenn TLS an diesem Server oder vertrauenswürdigem Proxy terminiert
|
||||||
|
trusted_proxies: [] # IPs/CIDRs deren X-Forwarded-For vertraut wird (leer = r.RemoteAddr)
|
||||||
|
|
||||||
index:
|
index:
|
||||||
backend: manticore
|
backend: manticore
|
||||||
manticore_dsn: "manticore@tcp(127.0.0.1:9306)/"
|
manticore_dsn: "manticore@tcp(127.0.0.1:9306)/"
|
||||||
batch_size: 100
|
batch_size: 100
|
||||||
batch_mode: true # Indexierung als Cron-Batch statt Dauerbetrieb
|
async_queue_size: 0 # 0 = Default
|
||||||
|
batch_mode: true # Indexierung als Cron-Batch statt Dauerbetrieb
|
||||||
|
|
||||||
ocr:
|
ocr:
|
||||||
batch_mode: true # OCR als Cron-Batch statt Dauerbetrieb
|
batch_mode: true # OCR als Cron-Batch statt Dauerbetrieb (PROJ-58)
|
||||||
|
paused_hours: [8, 18] # optional (PROJ-56): pausiert Verarbeitung im Zeitfenster (hier 08–18 Uhr)
|
||||||
|
|
||||||
|
imap_scheduler:
|
||||||
|
jitter_seconds: 240 # PROJ-56: Jitter-Fenster für automatischen Sync-Start, 0 = deaktiviert
|
||||||
|
|
||||||
|
reconciliation:
|
||||||
|
alert_threshold_pct: 50 # PROJ-52: Warn-Schwelle (% unter 7-Tage-Schnitt), 0 = jede Abweichung
|
||||||
|
|
||||||
|
imap_server:
|
||||||
|
enabled: false # Read-Only IMAP-Zugriff aufs Archiv (PROJ-26)
|
||||||
|
bind: ":1143" # plain; für TLS ":993" + tls_cert/tls_key setzen
|
||||||
|
tls_cert: ""
|
||||||
|
tls_key: ""
|
||||||
|
|
||||||
|
metrics:
|
||||||
|
enabled: false # Prometheus /metrics-Endpoint (PROJ-40)
|
||||||
|
token: "" # optionaler Bearer-Token zum Schutz von /metrics
|
||||||
|
|
||||||
audit:
|
audit:
|
||||||
log_path: /var/log/archivmail/audit.log
|
log_path: /var/log/archivmail/audit.log
|
||||||
@@ -679,6 +713,35 @@ Mails können Dokumentenarten zugeordnet werden mit unterschiedlichen gesetzlich
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Automatische Archivierungsregeln (PROJ-43)
|
||||||
|
|
||||||
|
Erweitert das Domain-basierte SMTP-Routing (`tenant_domains`) um flexiblere Muster-Regeln:
|
||||||
|
|
||||||
|
- Regeln nach `from_domain`, `to_domain`, `from_addr` oder `to_addr` (inkl. Wildcard `*.domain.de`)
|
||||||
|
- Höhere Priorität gewinnt bei mehreren Treffern
|
||||||
|
- SMTP-Daemon und IMAP-Import prüfen Regeln vor der Domain-Zuordnung
|
||||||
|
- Dry-Run: zeigt, welche bereits archivierten Mails eine Regel treffen würde, bevor sie aktiv geschaltet wird
|
||||||
|
- Verwaltung im Admin-Bereich (Tab „Routing-Regeln“) — CRUD unter `/api/admin/routing-rules`
|
||||||
|
- Bereits archivierte Mails werden nicht rückwirkend umgeroutet, nur neue Ingests
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Vollständigkeits-Reconciliation (PROJ-52)
|
||||||
|
|
||||||
|
Täglicher Zähl-Report als Nachweis, dass keine Mail auf dem Weg ins Archiv verloren geht
|
||||||
|
(VOI-Grundsatz 2):
|
||||||
|
|
||||||
|
- Cron (`archivmail reconcile`, nachts) zählt pro Quelle (SMTP-Journal, IMAP-Konto, POP3-Konto,
|
||||||
|
Datei-Import) die täglich archivierten Mails
|
||||||
|
- Warn-Badge + Audit-Eintrag (`reconciliation_anomaly`) bei >50 % Abweichung vom 7-Tage-Schnitt
|
||||||
|
(Schwellenwert konfigurierbar über `reconciliation.alert_threshold_pct`)
|
||||||
|
- Dashboard-Kachel „Vollständigkeits-Check“ mit den letzten 7 Tagen pro Quelle
|
||||||
|
- CSV-Export für Auditoren (`/api/admin/reconciliation/export.csv`)
|
||||||
|
- Tage ohne Aktivität werden explizit als `0` ausgewiesen, nicht als fehlender Datensatz —
|
||||||
|
damit ein ausgefallener Cron-Lauf selbst erkennbar bleibt
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### Admin-Dashboard
|
### Admin-Dashboard
|
||||||
|
|
||||||
Erreichbar unter `/admin`.
|
Erreichbar unter `/admin`.
|
||||||
@@ -872,6 +935,4 @@ Alle Endpunkte erfordern eine gültige Session (Cookie `archivmail_session` oder
|
|||||||
|
|
||||||
| Funktion | Beschreibung |
|
| Funktion | Beschreibung |
|
||||||
|----------|--------------|
|
|----------|--------------|
|
||||||
| **Automatische Archivierungsregeln** | E-Mails nach Absender/Empfänger/Betreff automatisch Mandanten zuordnen |
|
|
||||||
| **Vollständigkeits-Reconciliation** | Abgleich zwischen IMAP-Server und Archiv — Zähl-Report mit Lückenanalyse |
|
|
||||||
| **E-Mail als primärer Login** | Tenant-User loggen sich mit E-Mail-Adresse statt Benutzername ein |
|
| **E-Mail als primärer Login** | Tenant-User loggen sich mit E-Mail-Adresse statt Benutzername ein |
|
||||||
|
|||||||
Reference in New Issue
Block a user