# 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.go` — `Extract`: 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.