Alle Beiträge

Copilot weg, selbst gebaut: ein lokaler E-Mail-Optimierer für Outlook

Ein Outlook-Update hat den Copilot-Button entfernt (vorübergehend). Also habe ich ihn neu gebaut, lokal, ohne Cloud.

Screenshot aus Outlook: die optimierte Fassung der Mail direkt im Editor, darunter der Bestätigungsdialog mit Ja/Nein
Die optimierte Fassung direkt in Outlook – Bestätigungsdialog vor der Übernahme.

Der Copilot-Button ist weg

Mit Version 2605 hat Microsoft Copilot aus Outlook Classic vorübergehend entfernt, für alle ohne dedizierte Lizenz. Den Knopf hatte ich regelmäßig für unkritische Mails genutzt: Entwurf markieren, schärfen lassen, abschicken. Hätte ich das Gleiche über ChatGPT oder Copilot im Browser gemacht? Für interne Mails vielleicht. Aber Mandanten-Mails mit Projektdetails gehören nicht in einen externen Dienst.

Also habe ich das Ding lokal nachgebaut: VBA-Makro in Outlook, Ollama auf dem Rechner, kein Byte, das die Maschine verlässt.

Was das Makro können musste

Die Daten bleiben auf dem Rechner. Der Mailtext geht ausschließlich an http://localhost:11434, also an mein lokales Ollama. Kein Cloud-Dienst, keine Telemetrie, kein externer Request.

Das Werkzeug lebt in Outlook. Ein Knopf in der Schnellzugriffsleiste, kein Wechsel in ein zweites Programm, kein Copy-Paste in ein Chatfenster. Wenn die Hürde höher ist als der alte Button, benutze ich es nicht.

Das Modell soll schärfen, nicht nur korrigieren. Klarere Argumentation, sauberer Bezug, aber sparsam: Ein Dreizeiler bleibt ein Dreizeiler, und Fakten wie Termine oder Zahlen erfindet das Modell nicht, wenn sie nicht im Entwurf stehen.

Das Ergebnis: ein VBA-Modul in Outlook, mistral-small via Ollama auf localhost. Mehr braucht es nicht.

Datenfluss: Markierung aus Outlook geht lokal an Ollama und kommt optimiert zurück, ohne den Rechner zu verlassen
Datenfluss: Markierung aus Outlook geht lokal an Ollama und kommt optimiert zurück, ohne den Rechner zu verlassen.

Der Ablauf in der Praxis

Fließtext markieren, Button klicken. Das Makro sendet die Markierung an Ollama, schreibt die Antwort direkt formatiert in die Mail und fragt dann: Ja oder Nein. Ja übernimmt, Nein macht in einem Schritt alles rückgängig. Ich sehe die gerenderte Fassung in der Mail, bevor ich entscheide.

Ein Beispiel. Eine Antwort an einen Recruiter, im Telegrammstil hingetippt:

Hallo Markus,

ja passt, hätte ab August Zeit. SD und MM mach ich, FI auch teilweise. CPI Erfahrung ist da. Remote wäre mir lieber aber 1-2 Tage vor Ort gehen auch. Schick mir mal die Details dann sag ich genaueres.

<<etwas verbindlicher, Verfügbarkeit ab August klar nennen>>

Dieser Block steuert nur den Lauf und fällt in der Mail weg. Ein Klick später:

Hallo Markus,

ja, das passt gut. Ab August habe ich freie Kapazitäten und kann einsteigen. SD und MM decke ich vollständig ab, FI in Teilen. Erfahrung mit der CPI bringe ich ebenfalls mit. Remote würde ich bevorzugen, ein bis zwei Tage vor Ort pro Woche sind aber problemlos möglich. Schick mir gern die Projektdetails, dann gebe ich dir eine konkrete Rückmeldung.

Die Anrede bleibt unverändert, aus Stichworten werden Sätze, nichts Erfundenes ist drin.

Vier Stolpersteine beim Bauen

Nur die Markierung anfassen. Die erste Version schrieb den Mailtext als item.Body zurück und zerlegte dabei Signatur, Logo und Formatierung auf einmal. Heute schreibt das Makro ausschließlich über den Word-Editor in die Markierung.

Die native Ollama-API nutzen. Über /v1/chat/completions lieferten Reasoning-Modelle ein leeres content-Feld zurück. Die native /api/chat mit "think": false läuft zuverlässig.

Die Anrede deterministisch absichern. Trotz Prompt-Regel hat das Modell die Begrüßung manchmal umgeschrieben. Mein Lieblingsfall: Ich heiße Andreas, der Empfänger auch. Das Modell schloss „Andreas bin ich", machte „Hallo zusammen," daraus und zog den Plural durch. Lösung: Anredezeile vor dem Senden merken und danach zeichengenau wiederherstellen.

Outlook darf nicht einfrieren. Ein 24B-Modell braucht pro Mail gut eine halbe Minute. Der Aufruf läuft deshalb nicht-blockierend, streamt tokenweise, Sanduhr und Statuszeile zeigen Fortschritt, Esc bricht ab.

Grenzen und Fazit

Fertig ist es nicht, zu optimieren gibt es noch genug. Was das Makro nicht selbst erzwingt, liefert das Modell nicht garantiert. Die einfache Regel lautet daher: nur den Fließtext markieren.

Beim Modell hat sich mistral-small bei Temperatur 0,4 durchgesetzt: informell, schnell, treu zum Original. Mehr braucht es für diese Aufgabe nicht.

Für den Alltag reicht es trotzdem längst. Der Button ist zurück, lokal und vertraulich, und die Mandanten-Mails bleiben dort, wo sie hingehören.

Werkzeuge

  • Ollama, lokale LLM-Runtime
  • mistral-small