Worum geht’s?

Du bekommst viele E-Mails.
Unsortiert.
Mal ist’s eine Support-Anfrage, mal eine Bewerbung, mal nur Werbung.

Und Du willst das klassifizieren. Automatisch.
Damit Du schneller reagieren kannst – oder die Mail gleich im richtigen Ordner landet.

Also nehmen wir GPT oder Azure AI.
Lassen sie lesen. Und sagen lassen: „Das ist eine Beschwerde.“
Oder: „Hier bewirbt sich jemand.“

Geht alles direkt in Outlook Classic. Mit VBA.
Ich zeig Dir, wie.

Was brauchst Du?

  • Outlook mit Makros (Classic, kein Web)
  • Zugriff auf den VBA-Editor (ALT+F11)
  • Einen OpenAI API-Key oder Azure OpenAI Endpoint
  • Ein bisschen Lust auf strukturiertes Prompting

Ziel

Jede eingehende Mail bekommt eine Kategorie:

  • Anfrage
  • Beschwerde
  • Bewerbung
  • Sonstiges

Das Ergebnis landet entweder:

  • im Mail-Header (z. B. benutzerdefiniertes Feld)
  • im Betreff als Präfix
  • oder die Mail wird gleich verschoben

GPT oder Azure?

AnbieterVorteilNachteil
GPT (OpenAI)Schnell einzurichtenAPI kostenpflichtig, Datenschutzfrage
Azure OpenAIDSGVO-konformer Betrieb möglichKomplexeres Setup

Beides funktioniert gleich. Nur der Endpunkt ist anders.

Prompt-Vorlage

Kategorisiere folgenden E-Mail-Text. Gib nur eine der folgenden Kategorien zurück: Anfrage, Beschwerde, Bewerbung, Sonstiges.
Text: [Mailtext hier einsetzen]

Je klarer der Prompt, desto besser das Ergebnis.
Lass keine Interpretationsspielräume.

GPT per VBA

Function KlassifiziereMailGPT(text As String) As String
    Dim http As Object
    Dim result As String
    Dim apiKey As String
    Dim prompt As String
    Dim json As String

    apiKey = "sk-..." ' Dein GPT API-Key

    prompt = "Kategorisiere folgenden E-Mail-Text. Gib nur eine der folgenden Kategorien zurück: Anfrage, Beschwerde, Bewerbung, Sonstiges." & vbCrLf & "Text: " & text

    json = "{""model"":""gpt-4"",""messages"":[{""role"":""user"",""content"":""" & Replace(prompt, """", "\""") & """}],""temperature"":0}"

    Set http = CreateObject("MSXML2.XMLHTTP")
    With http
        .Open "POST", "https://api.openai.com/v1/chat/completions", False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Authorization", "Bearer " & apiKey
        .send json
        result = .responseText
    End With

    Dim startPos As Long, endPos As Long
    startPos = InStr(result, """content"":""") + 11
    endPos = InStr(startPos, result, """}")
    KlassifiziereMailGPT = Mid(result, startPos, endPos - startPos)
End Function

Anwendung auf aktive Mail

Sub KlassifiziereAktiveMail()
    Dim mail As MailItem
    Dim body As String
    Dim kategorie As String

    If Application.ActiveExplorer.Selection.Count = 0 Then
        MsgBox "Keine Mail ausgewählt.", vbExclamation
        Exit Sub
    End If

    Set mail = Application.ActiveExplorer.Selection.Item(1)
    body = Left(mail.Body, 2000) ' Nur ersten Teil nehmen

    kategorie = KlassifiziereMailGPT(body)

    ' Kategorie im Betreff vermerken
    mail.Subject = "[" & Trim(kategorie) & "] " & mail.Subject
    mail.Save
    MsgBox "Klassifiziert als: " & kategorie, vbInformation
End Sub

Alternative: Azure OpenAI statt GPT

Function KlassifiziereMailAzure(text As String) As String
    Dim http As Object
    Dim result As String
    Dim prompt As String
    Dim json As String

    prompt = "Kategorisiere folgenden E-Mail-Text. Gib nur eine der folgenden Kategorien zurück: Anfrage, Beschwerde, Bewerbung, Sonstiges." & vbCrLf & "Text: " & text

    json = "{""messages"":[{""role"":""user"",""content"":""" & Replace(prompt, """", "\""") & """}],""temperature"":0}"

    Set http = CreateObject("MSXML2.XMLHTTP")
    With http
        .Open "POST", "https://<dein-endpunkt>.openai.azure.com/openai/deployments/<deployment-name>/chat/completions?api-version=2024-03-01", False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "api-key", "<dein-azure-key>"
        .send json
        result = .responseText
    End With

    Dim startPos As Long, endPos As Long
    startPos = InStr(result, """content"":""") + 11
    endPos = InStr(startPos, result, """}")
    KlassifiziereMailAzure = Mid(result, startPos, endPos - startPos)
End Function

Erweiterungsideen

  • Automatisch auf neue Mails im Posteingang reagieren
  • Ordner automatisch nach Kategorie sortieren
  • Kategorien als benutzerdefinierte Felder speichern
  • Training mit Beispieldaten zur Prompt-Optimierung

Was Du beachten solltest

  • GPT ist schnell, aber nicht fehlerfrei
  • Klassifikation ist kontextabhängig – Vorsicht bei Ironie oder Anhang-only
  • Je kürzer der Body, desto besser die Erkennung
  • DSGVO bei sensiblen Mails beachten

Wenn Du regelmäßig Mails manuell einordnest, dann lass GPT den ersten Schritt machen – und nimm Dir nur noch die kniffligen Fälle selbst vor.

Tags:

No responses yet

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert