Automatische Anlage von Aufgaben oder Kalendereinträgen aus E-Mail-Inhalten mit GPT + VBA-Logik

Warum das hilfreich ist

Weil Du in Mails oft Arbeitsaufträge oder Termine hast – aber keiner klickt auf „In Aufgabe umwandeln“.
„Bitte senden Sie uns das Angebot bis Freitag“
→ Wird vergessen.
„Der Termin ist am 15. Juni um 10 Uhr in Hamburg“
→ Steht in der Mail, aber nicht im Kalender.

Mit GPT kannst Du genau solche Infos aus dem Mailtext extrahieren.
Und dann per VBA automatisch Aufgaben oder Termine anlegen.

Was GPT leisten soll

  • Aufgabe oder Termin erkennen
  • Betreff formulieren
  • Datum und Uhrzeit extrahieren
  • ggf. Ort und Fälligkeitsdatum setzen

Was Du brauchst

  • Outlook Classic
  • OpenAI API-Key
  • Zugriff auf den Body der Mail
  • GPT-Prompt zur strukturierten Extraktion
  • VBA zur Anlage des Items

Ziel-Format: JSON

{
  "typ": "Aufgabe",
  "betreff": "Angebot senden",
  "faelligkeit": "2025-06-07",
  "beschreibung": "Bitte Angebot für Projekt Müller bis Freitag senden"
}

oder

{
  "typ": "Termin",
  "betreff": "Kundentermin Müller",
  "datum": "2025-06-15",
  "uhrzeit": "10:00",
  "ort": "Hamburg",
  "beschreibung": "Vorstellung der neuen Planung"
}

Schritt 1: Mailtext holen

Function HoleMailText() As String
    Dim mail As Outlook.MailItem
    Set mail = Application.ActiveInspector.CurrentItem
    HoleMailText = mail.Body
End Function

Schritt 2: GPT-Prompt & API-Aufruf

Function GPT_ErkenneAufgabeOderTermin(mailText As String) As String
    Dim http As Object
    Dim apiKey As String
    Dim json As String
    Dim prompt As String

    apiKey = "DEIN_API_KEY"

    prompt = "Lies folgenden E-Mail-Text und extrahiere eine Aufgabe oder einen Termin daraus. " & _
             "Antworte als JSON. Felder: typ (Aufgabe oder Termin), betreff, beschreibung, datum (YYYY-MM-DD), " & _
             "uhrzeit (HH:MM) bei Terminen, faelligkeit (YYYY-MM-DD) bei Aufgaben, ort falls bekannt." & vbCrLf & mailText

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

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

    GPT_ErkenneAufgabeOderTermin = http.responseText
End Function

Schritt 3: JSON-Felder auslesen

Function GPT_JSONFeld(json As String, feld As String) As String
    Dim sc As Object
    Set sc = CreateObject("ScriptControl")
    sc.Language = "JScript"
    sc.AddCode "function val(j,f){return JSON.parse(JSON.parse(j).choices[0].message.content)[f] || '';}"
    GPT_JSONFeld = sc.Run("val", json, feld)
End Function

Schritt 4: Item anlegen

Sub GPT_AufgabeOderTerminAnlegen()
    Dim mailtext As String
    Dim json As String
    mailtext = HoleMailText()
    json = GPT_ErkenneAufgabeOderTermin(mailtext)

    Dim typ As String
    typ = GPT_JSONFeld(json, "typ")

    If typ = "Aufgabe" Then
        Call GPT_AufgabeAnlegen(json)
    ElseIf typ = "Termin" Then
        Call GPT_TerminAnlegen(json)
    Else
        MsgBox "Kein gültiger Typ erkannt: " & typ
    End If
End Sub

Aufgaben-Anlage

Sub GPT_AufgabeAnlegen(json As String)
    Dim task As Outlook.TaskItem
    Set task = Application.CreateItem(olTaskItem)

    task.Subject = GPT_JSONFeld(json, "betreff")
    task.Body = GPT_JSONFeld(json, "beschreibung")
    task.DueDate = GPT_JSONFeld(json, "faelligkeit")
    task.ReminderSet = True
    task.ReminderTime = task.DueDate & " 09:00"
    task.Save

    MsgBox "Aufgabe angelegt: " & task.Subject
End Sub

Termin-Anlage

Sub GPT_TerminAnlegen(json As String)
    Dim appt As Outlook.AppointmentItem
    Set appt = Application.CreateItem(olAppointmentItem)

    appt.Subject = GPT_JSONFeld(json, "betreff")
    appt.Body = GPT_JSONFeld(json, "beschreibung")
    appt.Location = GPT_JSONFeld(json, "ort")

    Dim datum As String
    Dim zeit As String
    datum = GPT_JSONFeld(json, "datum")
    zeit = GPT_JSONFeld(json, "uhrzeit")

    appt.Start = datum & " " & zeit
    appt.Duration = 60
    appt.ReminderSet = True
    appt.ReminderMinutesBeforeStart = 15
    appt.Save

    MsgBox "Termin angelegt: " & appt.Subject
End Sub

Was Du damit automatisieren kannst

E-Mail-SatzAutomatisch erzeugt
„Bitte senden Sie das Angebot bis Freitag“Aufgabe mit Fälligkeit
„Treffen am 12. Juni um 14 Uhr in Bremen“Kalendereintrag mit Ort & Zeit
„Deadline für Rückmeldung: Montag“Erinnerung als Aufgabe

Was Du beachten musst

  • GPT erkennt nur, was klar formuliert ist – Konjunktive sind schwierig
  • Zeitangaben wie „übermorgen“ musst Du selbst umrechnen, wenn nötig
  • Du kannst mehrere Aufgaben/Mails im Batch verarbeiten
  • Reminder-Zeit kannst Du individuell setzen

„Wenn GPT weiß, was Du tun sollst – soll Outlook es auch wissen.“

Wenn Du daraus einen produktiven Workflow machen willst: Ich bau Dir das so, dass nichts mehr durchrutscht.
Keine Aufgabe vergessen. Kein Termin verpasst.

Keine Antworten

Schreibe einen Kommentar

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