Let's Do DevOps

Let's Do DevOps

šŸ”„Sending Email from Claude Code with Zero DependenciesšŸ”„

aka, curl, awk, and an email walk into a bar

Alex Moore's avatar
Alex Moore
May 05, 2026
āˆ™ Paid

This blog series focuses on presenting complex DevOps projects as simple and approachable via plain language and lots of pictures. If you find these useful, please consider subscribing. It’s what keeps these articles coming. <3

Hey all! I’ve been building an agentic email bot on AWS Bedrock AgentCore that reads and replies to emails autonomously. I wrote up that whole series:

  • Part 1: Full Architecture and O365 Integration - EventBridge polling, Graph API delta queries, and handing off to AgentCore

  • Part 2: Building the Thread, Sending the Reply - Conversation context, email-safe HTML rendering, and production operations

While building it, I wired up Microsoft Graph API for O365 access so I could have my Claude Agent test and verify changes during development. That Graph integration became the foundation for something more immediately useful: a Claude Code skill that lets you send email directly from a conversation.

Later, in a Slack channel dedicated to using AI, someone asked if anyone had a solution to allow Claude Code to send emails, specifically for automations like emailing reports on a schedule. So I pulled it out, made it portable, and published it to our internal plugin marketplace.

Claude Code sending an email via the send-o365-email skill
Claude Code sending an email via the send-o365-email skill

There are a lot of good reasons to want this. You might be testing email-related functionality, like I was, or you want to say ā€œemail Sarah and update her on our progress with this projectā€ and have Claude just handle it in context. Or you’re running scheduled jobs and need Claude to fire off a notification or send a report when something completes. Once you have it, you find uses for it constantly. (I also use the email access in general to leverage Claude in a custom daily review process to help me stay on top of tasks and such, but that’s a story for another blog post.)

The idea sounds simple enough. The implementation had some genuinely interesting constraints that made it worth writing up.

User's avatar

Continue reading this post for free, courtesy of Kyler Middleton.

Or purchase a paid subscription.
Ā© 2026 Kyler Middleton Ā· Privacy āˆ™ Terms āˆ™ Collection notice
Start your SubstackGet the app
Substack is the home for great culture