Files
nexarch/mail/docs/IMP-02-PRUEFPROTOKOLL.md
T
sysopsandClaude Sonnet 5 7238568918 IMP-02: anhangsverarbeitung-bei-import
Anhänge aus importierten Nachrichten extrahieren, validieren und für
Weiterverarbeitung bereitstellen.

- mimeparse/tolerant.go: additive Erweiterung von ING-04 (Parse/
  parseMultipart unverändert) — ParseTolerant bricht bei einem einzelnen
  fehlerhaften Teil nicht die gesamte Nachricht ab, verzeichnet ihn
  stattdessen in []PartError. Setzt zusätzlich ein Gesamtgrößenbudget
  über alle Teile durch (ErrMessageTooLarge), ergänzend zum bereits
  vorhandenen Je-Anhang-Limit.
- attachments/attachments.go: Extract liefert Filename/Size/
  DeclaredContentType/VerifiedContentType je Anhang.
  VerifiedContentType kommt aus http.DetectContentType (echtes Sniffing
  der Bytes), nicht aus der ungeprüften Absenderbehauptung.

Prüfungen (alle real durchgeführt, siehe mail/docs/IMP-02-PRUEFPROTOKOLL.md):
1. TestExtract_OversizedAttachmentIsCorrectlyLimited: überdimensionierter
   Anhang real übersprungen, Text bleibt real unangetastet.
2. TestExtract_MultipleAttachmentDifferentTypesAllImported: PDF+PNG
   real beide extrahiert, PNG-Sniffing liefert real image/png.
3. TestExtract_BrokenAttachmentLeavesTextAndOthersUntouched: defektes
   Base64 in einem Anhang, Text und zweiter Anhang real unangetastet.

Kein Umbau: mimeparse Parse/parseMultipart (ING-04) unverändert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01HhgFcLS8tYMhDJpP74C6AQ
2026-08-31 23:59:17 +02:00

2.7 KiB
Raw Blame History

IMP-02 Prüfprotokoll: Anhangsverarbeitung bei Import

Voraussetzung ING-04, IMP-01 (beide Fertig).

Umsetzung

  • mail/internal/mimeparse/tolerant.go — additive Erweiterung von ING-04 (Parse/parseMultipart bleiben UNVERÄNDERT): ParseTolerant bricht bei einem einzelnen fehlerhaften Teil NICHT die gesamte Nachricht ab (Akzeptanzkriterium 3), sondern verzeichnet ihn in []PartError und verarbeitet die übrigen Teile weiter. Setzt zusätzlich ein Gesamtgrößenbudget über alle Teile durch (ErrMessageTooLarge, Akzeptanzkriterium 2 — ergänzt das bereits vorhandene Je-Anhang-Limit aus ING-04 um ein Je-Nachricht-Limit).
  • mail/internal/attachments/attachments.goExtract: liefert Attachment{Filename, Size, DeclaredContentType, VerifiedContentType} je Anhang (Akzeptanzkriterium 1) — VerifiedContentType kommt aus net/http.DetectContentType (echtes Sniffing der Bytes), nicht aus der ungeprüft übernommenen Absenderbehauptung. Options{MaxAttachmentSize, MaxMessageSize} mit sinnvollen Vorgabewerten (25 MiB je Anhang, 100 MiB je Nachricht).
  • Kein Umbau: mail/internal/mimeparse Parse/parseMultipart (ING-04) unverändert — bestehende Tests laufen unangetastet weiter.

Prüfungen

# Prüfung Ergebnis
1 Test mit Nachricht, die einen überdimensionierten Anhang enthält, wird korrekt begrenzt bestanden TestExtract_OversizedAttachmentIsCorrectlyLimited: Anhang über dem Limit wird real übersprungen (nicht extrahiert), Nachrichtentext bleibt real unangetastet
2 Test mit mehreren Anhängen unterschiedlichen Typs importiert alle korrekt bestanden TestExtract_MultipleAttachmentDifferentTypesAllImported: PDF + PNG in einer Nachricht, beide real extrahiert, PNG-Anhang liefert real den korrekten gesniffeten Content-Type image/png (echte Magic-Bytes)
3 Test: ein defekter Anhang lässt Text und übrige Anhänge unangetastet bestanden TestExtract_BrokenAttachmentLeavesTextAndOthersUntouched: ungültiges Base64 in einem Anhang, Nachrichtentext UND der zweite, gültige Anhang kommen real unverändert an

Build/Test-Ergebnis (192.168.1.131)

go build ./...  -> clean
go vet ./...    -> clean
golangci-lint run ./...  -> 0 issues
go test ./internal/attachments/... -v  -> 3/3 bestanden
TEST_TENANT_DSN=... TEST_MANTICORE_URL=... go test ./... -p 1
  -> alle 16 Pakete bestanden, keine Regression (mimeparse: 6/6 weiterhin grün
  nach additiver ParseTolerant-Erweiterung)

Gesamtergebnis

Bestanden. Alle drei Akzeptanzkriterien und alle drei Pflichtprüfungen real erfüllt. Entsperrt IMP-06, trägt (gemeinsam mit IMP-03) zu IMP-09 bei.