Skip to content

Feature: Thunderbird-Add-On "An PBP senden" mit Thread-Upload (+ Alternativen: Watch-Folder, IMAP, BCC) #478

@MadGapun

Description

@MadGapun

Idee

Statt E-Mails einzeln per Drag-and-Drop aus Thunderbird ins PBP-Dashboard zu ziehen, soll der User direkt im Mail-Client per Rechtsklick oder Menue-Eintrag einzelne Mails oder ganze Threads an PBP schicken koennen. Die Mail landet dann automatisch in PBP, wird geparst und zugeordnet — ohne Umweg ueber Browser und Drag-and-Drop.

Zwei Dinge sind dabei wichtig:

  1. Explizite User-Aktion: Nicht jede Recruiter-Mail soll automatisch importiert werden. Der User entscheidet aktiv pro Mail ob sie zu PBP gehoert.
  2. Thread-Kontext: PBP braucht nicht nur die eingehenden Mails, sondern auch die eigenen Antworten, damit Claude beim naechsten Gespraech den kompletten Kommunikationsverlauf sieht. Der gesamte Thread muss uebertragbar sein.

Motivation

Der aktuelle Workflow ist:

  1. Recruiter-Mail kommt in Thunderbird an
  2. User sieht sie, will sie in PBP haben
  3. User oeffnet PBP-Dashboard im Browser
  4. User zieht die Mail per Drag-and-Drop in PBP (oder speichert als .eml und laedt hoch)
  5. PBP importiert, ordnet zu

Das klappt aber nur fuer eingehende Mails. Die eigenen Antworten aus dem Sent-Ordner muessen separat gesucht und einzeln hochgeladen werden. In der Praxis werden die eigenen Mails daher haeufig vergessen — und damit fehlt Claude spaeter der halbe Kontext einer Konversation.

Hauptansatz: Thunderbird-Add-On mit "An PBP senden"

Ein Thunderbird-Add-On (WebExtension), das einen neuen Menue-Eintrag im Rechtsklick-Kontext einer Mail hinzufuegt:

Rechtsklick auf Mail
  ├─ Antworten
  ├─ Weiterleiten
  ├─ ...
  └─ An PBP senden  ▶  ┌─ Nur diese Mail
                       ├─ Gesamten Thread
                       └─ Thread + Anhaenge

Was das Add-On macht

  1. User klickt "An PBP senden" → Add-On holt die .eml der Mail(s) aus dem Thunderbird-Backend
  2. Bei "Gesamten Thread" werden alle Mails im gleichen Thread (anhand References- und In-Reply-To-Headern) gesammelt — eingehende UND ausgehende
  3. Die .eml-Dateien werden per HTTP-POST an einen PBP-Endpunkt gesendet (POST /api/mail/inbox)
  4. PBP-Endpunkt importiert die Mails mit der bestehenden Logik aus E-Mail-Integration: Mails importieren, Termine extrahieren, Meeting-Join, Dokumenten-Auto-Import #136
  5. Erfolgs-Toast in Thunderbird: "N Mails an PBP uebertragen"

Thread-Erkennung

Thunderbirds Mail-Thread-Logik basiert auf:

  • Message-ID-Header der Original-Mail
  • In-Reply-To-Header in Antworten (zeigt auf Message-ID des Originals)
  • References-Header (Liste aller Vorgaenger-Message-IDs)

Das Add-On kann entweder:

  • Thunderbirds eingebauten glodaQuery nutzen (Volltext-Index, schnell)
  • Oder selbst die Header parsen und zusammenhaengende Mails zusammenstellen

Beide Wege geben uns den kompletten Kommunikationsfaden inklusive eigener Antworten aus Sent.

Technische Basis

  • Thunderbird-WebExtensions-API: messenger.messages.* (Zugriff auf Mail-Bodies), messenger.menus.* (Kontextmenue-Eintrag)
  • JavaScript, etwa 200-500 Zeilen Code
  • Auslieferung als .xpi (signiert oder unsigniert) — User installiert ueber Extras → Add-Ons → Aus Datei installieren
  • Optional spaeter: Auf Thunderbird-Add-On-Store hochladen fuer Auto-Updates

Konfiguration im Add-On

Ein kleines Options-Fenster im Add-On mit:

  • PBP-Endpunkt-URL (z.B. http://elwosa:8000/api/mail/inbox oder fuer Remote ein anderer Host)
  • Auth-Token (einmalig im PBP-Dashboard generiert, im Add-On eingetragen)
  • Default-Verhalten: "Nur diese Mail" oder "Immer Thread" als Voreinstellung

PBP-seitige Anforderungen (neu)

Damit das Add-On arbeiten kann, braucht PBP:

1. HTTP-Endpunkt fuer Mail-Import

POST /api/mail/inbox
Authorization: Bearer <token>
Content-Type: multipart/form-data

fields:
  - mail_eml: <eml-Datei> (kann mehrfach vorkommen fuer Thread-Upload)
  - source: "thunderbird-addon" | "outlook-addon" | "manual"
  - thread_id: optional, erlaubt Gruppierung

Response:

{
  "imported": 3,
  "matched_applications": ["d2665664"],
  "new_emails": ["a075eedc", "1c259004", "e888271b"],
  "warnings": []
}

2. Token-Management im Dashboard

Settings → API-Zugriff:

  • Button "Neuen Token generieren"
  • Anzeige der vorhandenen Tokens (mit "letzte Nutzung")
  • Revoke-Funktion

3. Thread-Zuordnung in der DB

Damit PBP erkennt, dass mehrere Mails zum selben Thread gehoeren, sollte in application_emails eine Spalte ergaenzt werden:

ALTER TABLE application_emails ADD COLUMN thread_id TEXT;
ALTER TABLE application_emails ADD COLUMN in_reply_to TEXT;
ALTER TABLE application_emails ADD COLUMN references_header TEXT;

Bei eingehenden Mails: aus Mail-Headern extrahieren.
Bei Thread-Upload aus dem Add-On: thread_id wird als Gruppierungsschluessel verwendet.

4. Timeline-Darstellung mit Thread-Gruppierung

In der Bewerbungs-Detailansicht (#474) werden Mails aktuell einzeln in der Timeline aufgelistet. Mit Thread-Info koennen zusammengehoerige Mails visuell gruppiert werden:

Timeline der Bewerbung d2665664
├─ Thread: "Projekt-Nr: 104810 - Methoden- und Prozessberatung"
│  ├─ 08.04. 07:13  [eingang]  Zwischeninformation (Sabrina Kapitel)
│  ├─ 20.04. 12:35  [eingang]  Absage (Angelina Gerginski)
│  └─ 21.04. 17:xx  [ausgang]  Meine Antwort (noch zu senden)
└─ (andere Events...)

Alternativ-/Zusatz-Ansaetze

Falls der Add-On-Weg zu aufwendig ist oder User keine Add-Ons installieren wollen:

Alternative A: Watch-Folder (urspruenglicher Vorschlag)

User speichert Mails via Thunderbird-Filter oder manuell als .eml in einem Ordner, PBP ueberwacht den Ordner.

  • Vorteil: Kein Add-On noetig
  • Nachteil: Kein Thread-Upload, eigene Antworten muessen separat gespeichert werden

Alternative B: Weiterleiten an dediziertes Postfach (IMAP)

User richtet einen Filter ein: "Recruiter-Mails → Forward an <email-anonymisiert>". PBP holt per IMAP ab.

  • Vorteil: Funktioniert ueberall, nicht nur in Thunderbird
  • Nachteil: Eigene Antworten werden nicht weitergeleitet, Thread-Kontext geht verloren

Alternative C: mailto:-Rueckweg

In der Antwort-Mail (via #477) kann PBP einen speziellen BCC-Header oder versteckten Tag setzen (X-PBP-Application-Id: d2665664), den das PBP-Postfach erkennt. Wenn der User PBP auf BCC setzt, landet die ausgehende Mail automatisch in PBP.

  • Vorteil: Funktioniert auch ohne Add-On
  • Nachteil: User muss daran denken, PBP auf BCC zu setzen

Empfehlung: Add-On als Hauptweg, BCC-Adresse als Fallback.

Reihenfolge der Umsetzung

  1. PBP-Endpunkt POST /api/mail/inbox mit Token-Auth — Basis fuer alles andere
  2. Token-Management im Dashboard
  3. DB-Schema erweitern um thread_id, in_reply_to, references_header
  4. Thread-Gruppierung in Timeline-UI
  5. Thunderbird-Add-On entwickeln (separates Repo oder Unterverzeichnis thunderbird-addon/)
  6. Outlook-Add-On spaeter als Folge-Feature (gleicher Endpunkt, andere Client-Implementierung)

Voraussetzung

#476 muss vorher gefixt sein — sonst kommen die Mails zwar rein, haben aber leere body_text-Felder bei HTML-only-Mails.

Related

Prioritaet

Hoch — das ist der groesste Hebel fuer Claude-Nutzen. Aktuell hat Claude bei jeder Recruiter-Konversation nur halben Kontext, weil die eigenen Antworten fehlen. Mit Thread-Upload hat Claude sofort den kompletten Kommunikationsfaden und kann viel praeziser beraten (Tonlage der bisherigen Korrespondenz aufgreifen, nicht bereits Gesagtes nochmal schreiben, Follow-ups passend formulieren).

Offene Fragen

  1. Soll das Add-On als eigenes Repo (MadGapun/pbp-thunderbird-addon) oder in MadGapun/PBP/thunderbird-addon/ liegen?
  2. Thunderbird-Add-On signieren lassen (Mozilla-Store) oder nur als .xpi zum Selbst-Installieren?
  3. Soll der Import-Endpunkt nur lokal/LAN erreichbar sein (sicher, aber nur am heimischen Rechner nutzbar) oder ueber Cloudflare Tunnel / VPN auch remote?
  4. Was passiert bei Duplikat-Import (siehe Bug: .eml-Import aus Thunderbird laesst body_text leer (nur body_html gefuellt) + Duplikat-Erkennung fehlt #476 — User lud die SOLCOM-Mail zweimal)? Auf Basis Message-ID deduplizieren.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestv1.8Geplant fuer v1.8

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions