Blog
Field notes
Email infrastructure, AI agents, and what we learn shipping fast without breaking the things that matter.
Give your AI agent its own email inbox
Give an AI agent a real, scoped address on a domain you control. Inbound mail arrives as parsed JSON to an event.received loop and the agent replies over the Send API, or MailKite runs the agent for you on a route with action: agent. Working code, the security caveat, and the honest DIY alternatives.
Read-
Comparisons 23 min23 open source email servers for Linux, sorted by the job each one does
Most "best open source mail server" lists put a full-stack Docker bundle and a single SMTP daemon in the same ranked table, as if you'd choose between them. You wouldn't. This is 23 Linux mail projects grouped by the slot they fill in the mail path, with licenses, languages, and activity verified on 2026-08-05, plus the part every roundup skips: what self-hosting still costs you after the install script says done.
-
Tutorials 3 minMautic email deliverability: replace SMTP with the Symfony Mailer DSN transport
Mautic 5 runs on Symfony Mailer, not SwiftMailer — which means it can take a native mailkite+api:// DSN instead of generic SMTP. This tutorial covers the install, the DSN config, and why campaign-send errors are more useful than an SMTP rejection code.
-
Product 4 minOne DSN, three PHP ecosystems: MailKite's Symfony Mailer transport
mailkite/symfony-mailer resolves a mailkite+api:// DSN into a first-party Symfony Mailer transport — which means Mautic, PrestaShop, Drupal, and any plain Symfony app all get it from one package, with honest errors instead of a generic SMTP rejection.
-
Engineering 8 minMailKite now ships a native mailer for six more frameworks
MailKite shipped native mail integrations for Spring Boot, ASP.NET Core, Next.js, NestJS, Flask, and FastAPI in one day — three new packages, two verified starters with no new code, and two real bugs found in already-published packages along the way.
-
Tutorials 15 minEmail to Slack: threading, Block Kit limits, and the duplicate-post trap
Slack's own email-to-channel needs a paid plan, pins every message to one fixed channel, and can't thread. Wiring inbound email to Slack yourself is about 50 lines — but three things bite once real mail arrives: Slack rejects any header block over 150 characters, webhook retries post the same email twice, and Incoming Webhooks never return a message ts, so an email thread can never become a Slack thread. Here's the handler that survives all three, and the return path that lets your team reply to the customer from inside the Slack thread.
-
Product 3 minMailKite Server: our SMTP + IMAP edges are now open source
The Haraka-based MX and submission edges and the IMAP server that power MailKite are now AGPL on GitHub — self-host the whole stack, point our hosted MX at your box, or connect the same web console to MailKite Cloud.
-
Guides 9 minThe Unfair Advantage of Using Agents for Email
AI agents can send email. Most can't receive it. Here's what happens when you give an agent its own inbox — the Lethal Trifecta of security risks (untrusted content × sensitive data × external communication), how scoped access and reply tokens solve it, and how MailKite, which we build, wires it together.
-
Engineering 19 minBuild software that heals itself in the agentic era
An AI agent can write the fix now; the hard part is architecting your software so letting one patch production isn't reckless. Here's a design pattern for self-healing systems: never crash, turn every failure into a structured anonymous signature, and let an agent close the loop behind a sandbox and adversarial gates. Our open-source MIME parser is the worked example; the pattern applies far beyond it.
-
Tutorials 3 minDrupal email that works: replace PHP mail() with proper SMTP
Drupal uses PHP's mail() function by default — the same broken path that sinks WordPress email in spam. This tutorial shows how to install the SMTP Authentication module, configure it for MailKite's SMTP relay, and route all Drupal site email through your DKIM-signed domain. Password resets, contact forms, content notifications — all deliverable.
-
Tutorials 3 minHubSpot transactional email: route it through your own domain with MailKite
HubSpot's transactional email uses its own SMTP infrastructure — your emails come from HubSpot's domain, not yours. This tutorial shows how to switch to MailKite's SMTP relay so every transactional email is DKIM-signed from your domain, with full deliverability control and CRM activity logging for inbound replies.