Anhänge
Warum dieser Schritt
Was ist überhaupt ein Anhang: Erkennen
Der MIME-Parser hat die Email zerlegt und dabei auch die Anhänge schon identifiziert. Jetzt übernimmt der AttachmentStep. Dieses erste Unterkapitel klärt, woher die Anhang-Daten kommen, wie sie aussehen und wann der Schritt übersprungen wird.
Aus dem MIME-Parser: Anhänge sind bereits identifiziert
Anna schickt eine Email mit zwei Anhängen: einer Rechnung als PDF und einem Foto als JPEG. Als diese Email am System ankommt, hat der MIME-Parser die beiden Anhänge bereits aus der Multipart-Struktur herausgelöst. Sie liegen im Zusammenhang aus vorherigen Schritten (einem gemeinsamen Daten-Container, der die Schritte miteinander verbindet) als Liste vor, jeder Eintrag mit Dateiname, MIME-Typ und Inhalt.
Der AttachmentStep muss die Anhänge also nicht selbst erkennen. Seine Aufgabe beginnt erst danach: speichern und weiterverarbeiten.
Was ein Anhang konkret ist
Jeder Anhang im Zusammenhang aus vorherigen Schritten besteht aus drei Feldern:
- filename: Der Dateiname, wie Anna ihn gewählt hat, zum Beispiel "Rechnung_R-2026-0412.pdf"
- mime_type: Der MIME-Typ, zum Beispiel "application/pdf" oder "image/jpeg"
- content: Der dekodierte Binärinhalt der Datei
Die Felder wurden vom MIME-Parser gesetzt. Der MIME-Typ stammt aus dem Content-Type-Header des jeweiligen Multipart-Teils, der Dateiname aus der Content-Disposition, der Inhalt wurde bei Bedarf aus Base64 dekodiert.
Skip-Shortcut: Keine Anhänge, kein Aufwand
Die meisten Emails kommen ohne Anhang: Terminbestätigungen, Newsletter, kurze Anfragen. Für diese Emails ist der AttachmentStep sofort fertig. Die erste Zeile der process-Methode prüft, ob die Anhang-Liste leer ist. Wenn ja, wird der Step ohne weitere Aktion verlassen.
Dieser Shortcut vermeidet Aufwand in der Pipeline. Kein unnötiger Dateisystem-Zugriff, kein OCR-Aufruf, kein DB-Insert.
Jeder einzeln: Pro Anhang eine eigene Verarbeitung
Hat die Email Anhänge, arbeitet der Service sie einzeln ab. Eine Schleife geht durch die Liste und ruft für jeden Eintrag eine eigene Funktion auf: processSingle. Diese Trennung ist wichtig, weil jeder Anhang seinen eigenen Erfolgs- oder Fehlerzustand bekommen kann.
Fällt die Verarbeitung eines Anhangs aus (zum Beispiel, weil der OCR-Dienst bei dieser einen Datei nicht funktioniert), wird das als Ergebniseintrag für diesen einen Anhang festgehalten. Die Schleife macht mit dem nächsten Eintrag weiter. Ein problematischer Anhang beeinflusst die anderen nicht.