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
2.7 KiB
2.7 KiB
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):ParseTolerantbricht bei einem einzelnen fehlerhaften Teil NICHT die gesamte Nachricht ab (Akzeptanzkriterium 3), sondern verzeichnet ihn in[]PartErrorund 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: liefertAttachment{Filename, Size, DeclaredContentType, VerifiedContentType}je Anhang (Akzeptanzkriterium 1) —VerifiedContentTypekommt ausnet/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/mimeparseParse/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.