I built an AI email assistant in .NET with SerpApi and a local LLM. Here’s what broke.
Description and use
The author built a .NET console app that reads Gmail, filters bulk mail, drafts replies with a local LLM, and looks up sender company info via SerpApi, keeping email content local and never sending automatically.
Problem
The author had 53 unread emails, many of which were newsletters or automated notifications, and needed a way to identify important messages and draft replies without sending anything automatically.
Outcome
The assistant successfully filtered bulk mail, avoided sending to no‑reply addresses, and reduced SerpApi usage by only querying relevant emails. Draft replies and company summaries were generated locally, keeping email content private.
Workflow
- Read Gmail via IMAP (MailKit)
- Filter out bulk/automated emails using List-Unsubscribe header and address heuristics
- Send remaining emails to local LLM (Ollama) to get category, summary, and draft reply
- Extract sender domain and query SerpApi with google_light engine
- Use LLM to summarize company info from SerpApi results
- Output draft reply and company summary to console
Evidence
I built a small .NET console app that reads my inbox, skips the noise, drafts replies for the emails that matter, and tells me who the sender's company actually is.
It never sends anything. It drafts; I decide.
My email content stays on my machine. The language model runs locally with Ollama.
Most of a real inbox doesn’t need AI at all. Bulk mail usually carries a List-Unsubscribe header, and automated senders follow predictable patterns.
Once the filter was in, most of the inbox never reached the model. That’s when it clicked for me: the AI was the smaller part of the job.
- Record date: 2026-10-25T12:11:30.376Z