Mail-Hintergrundaufgaben – Einlesen, Befehle, KI-Klassifizierung, E-Mail-Aufgabe, Versand

Funktionsweise, Zeitrahmen, Zustände und Tabellen der E-Mail-Aufgabentypen vom Einlesen bis zum Serienversand.

Aufgabentypen

TypVerhalten
email (global, minütlich, wenn der Einleseschalter des Moduls nicht 0 ist)email/email::processForCronqueue(): E-Mails der aktiven email_source-Einträge (Gmail-Label), älteste zuerst, innerhalb von 50 s (Kostenschätzung nach Anzahl der Anhänge); E-Mail und Anhänge (ZIP entpackt, PDF-Text extrahiert) über den gemeinsamen Weg Dlbtdocstore::addDocument() gemäß der email-Speicherregel des Unternehmens; speicherschonende Base64-Dekodierung, Inline-Bilder ausgefiltert. Kein Filter und keine KI. Tabellen: email_message, email_source, email_attachments, email_hash, email_pipeline_log, doc.
email_commands (global, minütlich)processCommandsForCronqueue(): E-Mails im Zustand INGESTED; Aufgabenpräfix des Systems im Betreff → Aufgabenvorschlag (PENDING_APPROVAL); Befehlsblock des Systems im Text → strukturierter Vorschlag (PENDING_APPROVAL); Hashtag des Systems → FILTERED mit Kennzeichen; sonst FILTERED (weiter zur KI). 50 s, max. 100 E-Mails. Tabellen: email_message, email_proposal, email_pipeline_log.
email_ai (global, alle 2 Minuten)processAiForCronqueue(): E-Mails im Zustand FILTERED; Prompt aus Betreff, Absender, Text und Verlauf; Tier-1-Aufruf (kleines OpenAI-Modell, Gemini als Ersatz; ohne Schlüssel die Antwort „ignore“); Vorschläge in email_proposal; Konfidenz über Schwelle → PROCESSED, darunter PENDING_APPROVAL; KI-Fehler → AI_RETRY (3×), dann ERROR. Voraussetzung: OpenAI- oder Gemini-API-Schlüssel in den Moduleinstellungen.
email_task (Vorlagenzeilen nach Häufigkeit der Aufgabe)task/emailtask::processForCronqueue(): email_task_id aus dem Payload oder die fälligen Aufgaben des Unternehmens; sofort markRun(); die Engine Dlbtemailtask innerhalb von 40 s (ordnerbasierte API- oder IMAP-Abfrage, die E-Mail wird nicht gespeichert); Rest → Fortsetzungszeile; bei Fehler fail_count++, nach 3 Fehlern in Folge Deaktivierung und Benachrichtigung; mit notify=1 Benachrichtigung bei echter Verarbeitung. Tabellen: emailtask, notification, invoice, invoice_document, document, file, permission_scope.
otpkelfo_ingest (global, 05:40, nur mit eingerichteter Gmail-Suche und Konto)task/otpkelfo::processForCronqueue(): Gmail-Suche unter Ausschluss des Verarbeitet-Labels (max. 25 Nachrichten), ZIP-Anhänge nach storage/tmp_otpkelfo/, eine Zeile file (status=0, wie beim manuellen Upload), Label an der verarbeiteten Nachricht (bei Bedarf angelegt).
mail_sweep (global, alle 5 Minuten)mail/batch::processSweepForCronqueue(): startet ausgehend von den Protokollzeilen fällige E-Mails, die nicht eingereiht wurden oder hängen (sending).
mail_batch (nur Dispatch)mail/batch::processForCronqueue(): geplanter Versand der von sendBulk() in Pakete aufgeteilten Empfänger über den gemeinsamen Weg dlbtmail->send() (Sperrliste, Kanal, Größengrenze).
mail_message (nur Dispatch)processMessageForCronqueue(): Payload nur email_id; der Inhalt liegt in der Protokollzeile; dank der atomaren Reservierung in runQueued() wird eine zurückgezogene E-Mail nicht versendet.