6.6 KiB
6.6 KiB
PROJ-89: From/To/CC/BCC vollständig auslesen und im Portal darstellen
Status: In Review
Created: 2026-10-22 Last Updated: 2026-10-22
Dependencies
- Requires: PROJ-50 (
cc_addr/bcc_addrim Index) - Berührt: PROJ-54/PROJ-88 (Sichtbarkeit Rolle
user,mailBelongsToUser,AnyAddress), PROJ-87 (Zusatzadressen, BCC-Konsistenz)
Hintergrund
Der Parser liest From, To, CC und Zustelladressen, aber nicht den Bcc-Header. bcc_addr im Index bleibt deshalb leer. Die Detailansicht zeigt From, To und CC (CC nur wenn vorhanden), die Trefferliste zeigt From und To. Wer eine Mail als BCC, über Verteiler oder Weiterleitung erhalten hat, sieht in der Oberfläche nicht, an wen sie noch ging.
Entscheidungen (mit Nutzer geklärt, 2026-10-22)
- Anzeige in Detailansicht UND Trefferliste.
- BCC bestimmt auch die Sichtbarkeit für Rolle
user:bcc_addrwird befüllt,mailBelongsToUserprüft BCC mit, Index-Filter und Detailprüfung bleiben gleich streng.
User Stories
- Als User möchte ich in der Detailansicht Absender, alle Empfänger (To), CC und BCC sehen, um nachzuvollziehen, an wen die Mail ging.
- Als User möchte ich in der Trefferliste neben Absender und To auch CC und BCC erkennen, damit ich Mails über einen Verteiler oder eine Weiterleitung zuordnen kann.
- Als User möchte ich Mails sehen und öffnen, in denen meine Adresse nur im BCC der archivierten Kopie steht.
- Als Compliance-Verantwortlicher möchte ich, dass Liste und Detailzugriff dieselbe Regel nutzen, auch für BCC.
Acceptance Criteria
- Parser liest den Bcc-Header (
net/mail, lowercase, dedupliziert, unparsbar → keine Adresse, fail-closed) und liefertParsedMail.BCC. - Alle Stellen, die
MailDocumentbauen, befüllenBCC(IMAP, POP3, Upload, SMTP, Import-CLIs, Reindex, index-pending, fix-subjects). mailBelongsToUserprüft zusätzlich BCC mit exaktem Vergleich; alle Aufrufer (Detail, Anhänge, Threads, OCR, Export, eDiscovery, IMAP-Rückholung) profitieren. Test: Liste und Detail liefern für BCC-only-Mails dasselbe Ergebnis.- API Mail-Detail liefert
from,to,cc,bccals vollständige Listen; Trefferliste liefert zusätzlichccundbccje Treffer. - Detailansicht zeigt From, To, CC, BCC; leere Felder werden ausgeblendet; lange Listen umbrechen oder sind einklappbar.
- Trefferliste zeigt To wie bisher; CC und BCC als Zusatzinfo (breite Spalte oder Tooltip), ohne Layoutbruch auf schmalen Bildschirmen.
- Bestandsmails: BCC erscheint in Detailansicht sofort (aus der gespeicherten Mail geparst); Sichtbarkeit und Listen-Anzeige über den Index erst nach
archivmail reindex. - Tenant-Isolation und Fail-safe (leere Login-Adresse →
total: 0) unverändert. - Tests mit synthetischen Daten: Parser (Bcc vorhanden, fehlend, ungültig, mehrere),
mailBelongsToUsermit BCC, Konsistenz Liste/Detail.
Edge Cases
- Archivierte Kopien tragen den Bcc-Header meist nur in der Sender-Kopie; Zustellkopien haben ihn nicht. Dann bleibt BCC leer, kein Fehler.
- Ungültiger oder fremdkodierter Bcc-Header → keine Adresse, Mail bleibt sonst unverändert.
- Sehr viele Empfänger → Anzeige gekürzt mit "+N weitere", vollständig im Detail.
- BCC-Adressen sind für alle sichtbar, die die Mail öffnen dürfen (kein zusätzliches Rechtekonzept).
Technical Requirements
- Security: BCC darf Sichtbarkeit nur über den exakten Adressvergleich gewähren (PROJ-88-Regel); keine Lockerung des Fail-safe.
- Performance: kein zusätzlicher Index-Roundtrip; Parser-Mehraufwand vernachlässigbar.
- Deployment: Reindex auf 132 nach Deploy (Freigabe des Users einholen).
Tech Design (Solution Architect)
Übersprungen: kleine Erweiterung (Parser-Feld, Indexfeld, Prüfung, Anzeige).
Implementation Notes
Backend (2026-10-22)
- Parser (
pkg/mailparser/bcc.go,parser.go):ParsedMail.BCCaus dem Bcc-Header (net/mail, lowercase, dedupliziert, unparsbar → nil). To/CC unverändert (nicht lowercased, wie bisher). - Index: alle MailDocument-Builder befüllen
BCC(bcc_addr) mit demselben Trennzeichen wieCCam jeweiligen Ort: IMAP, POP3, Upload,submitToWorker,reindexTenant, reindex, index-pending, fix-subjects, import, archivmail-import. Keine Schemaänderung (Spalte existiert seit PROJ-50). - Sichtbarkeit:
mailBelongsToUserprüftpm.BCCexakt wie CC; unabhängig vonsource_type(Bcc ist Mailinhalt, kein Zustellheader).AnyAddressmatchtbcc_addrbereits; der exakte Nachcheck inhandleSearchdeckt BCC damit automatisch ab. - API: Detail (
GET /api/mails/{id}) neubcc(string, kommagetrennt, leer wenn keiner);from/to/ccunverändert. Trefferliste: je Hit neuccundbcc(string, kommagetrennt,omitempty). - Tests:
pkg/mailparser/bcc_test.go(fehlend, einzeln, mehrere/Displayname/Dedup/Case, ungültig, leer),internal/api/mail_ownership_test.go(BCC-only → true, fremde/Teil-Adressen → false, ungültiger Bcc → false, Konsistenz Index-BCC/Detail). Lokal kein Go-Toolchain: Build/Tests nicht ausgeführt. - Offen: v1-API, PDF-Export und eDiscovery geben BCC noch nicht aus. Bei Message-ID-Dedup stammt
bcc_addr(wie To/CC) aus der eingehenden Kopie, die Detailansicht aus der gespeicherten; der exakte Nachcheck in der Liste verhindert Metadaten-Leaks. Bestandsmails:archivmail reindexnötig (Freigabe einholen).
Frontend (2026-10-22)
- Typen (
src/lib/api/mail.ts):MailDetail.bcc?,SearchHit.cc?/bcc?(optional, kommagetrennt). src/components/mail/AddressList.tsx:AddressListzeigt bis 5 Adressen, darüber "+N weitere" per shadcn-Button(variant link,aria-expanded/aria-controls) auf-/zuklappbar.splitAddressestrennt nur an Kommas außerhalb von Anführungszeichen und<...>(Displaynamen wie"Muster, Max"bleiben ganz).- Detailansicht (
MailHeaderGrid): An, CC und neu BCC überAddressList; CC/BCC nur wenn nicht leer. - Trefferliste (
SearchResultsTable): Spalte "An" (ablg) zeigt unter To kleine, abgeschwächte Zeilen "CC: …"/"BCC: …" (truncate, voller Text imtitle), nur wenn nicht leer; auf schmalen Bildschirmen weiterhin ausgeblendet. - Geprüft:
npx tsc --noEmit, ESLint auf geänderten Dateien undnpm run buildlokal fehlerfrei; Splitter mit synthetischen Adressen (example.com) per Node-Skript geprüft. Kein Browser-Test.
QA Test Results
To be added by /qa
Deployment
- 2026-10-22: Commit
833ff55auf 132 deployed, Dienste und Health ok. archivmail reindexauf 132: total=58741, indexed=58741, errors=0. BCC im Index: 57 Mails (global), 0 in Tenant 1 (BCC steht nur in Sender-Kopien).- Offen: Abnahme der Darstellung im Browser, v1-API/PDF-Export/eDiscovery geben BCC noch nicht aus.