Project

mailkite

0.0
The project is in a healthy, maintained state
Send and manage email over your own authenticated domain with MailKite.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
 Dependencies

Development

~> 2.7
 Project Readme

MailKite

MailKite for Ruby

Email for every product you ship — receive email as a webhook, send over a verified domain, give an AI agent its own inbox.
The official MailKite library for Ruby.

Docs · Library guide · mailkite.dev · AI agents

RubyGems

Read-only mirror. This repo is a generated, release-time mirror of the MailKite monorepo (the private source of truth) — development doesn't happen here. Install from RubyGems and open issues against the MailKite docs.

Install

gem install mailkite

Quickstart

require "mailkite"

mk = Mailkite::Client.new(ENV["MAILKITE_API_KEY"])

res = mk.send(
  "from" => "hello@myapp.ai",
  "to" => "ada@example.com",
  "subject" => "Your invoice #1042",
  "html" => "<p>Thanks! Receipt attached.</p>"
)

Rails / ActionMailer

The gem ships a :mailkite delivery method — point ActionMailer at it and every existing mailer delivers through the MailKite API, no SMTP credentials:

# config/environments/production.rb
config.action_mailer.delivery_method = :mailkite
config.action_mailer.mailkite_settings = { api_key: ENV["MAILKITE_API_KEY"] }

Your mailers don't change:

class InvoiceMailer < ApplicationMailer
  def paid(invoice)
    attachments["invoice-#{invoice.number}.pdf"] = invoice.pdf
    mail from: "billing@myapp.ai", to: invoice.customer_email,
         subject: "Your invoice #{invoice.number}"
  end
end

Outside Rails, register it on the mail gem directly:

require "mailkite"

Mail.defaults { delivery_method Mailkite::DeliveryMethod, api_key: ENV["MAILKITE_API_KEY"] }

The mail gem is not a dependency of mailkite — it's required only when the delivery method is instantiated. Features the send API can't express (custom headers, inline cid: images) raise Mailkite::DeliveryMethod::UnsupportedFeatureError instead of silently dropping them.

Examples

Runnable examples live in examples/ — send mail, verify webhooks, build an AI email agent, and log users in:

Example What it shows
examples/01_send_email.rb Send an email over a verified domain — the 10-second "it works".
examples/02_receive_webhook.rb Receive inbound email as a webhook — and VERIFY the HMAC signature before trusting it.
examples/03_agent_email_reply.rb An AI email agent: inbound email → Claude drafts a reply → MailKite sends it, threaded.
examples/04_give_your_agent_an_inbox.rb Give your agent its own email address — MailKite's built-in inbox agent answers mail for…
examples/05_server_login.rb Server-side login + register.

API methods

Every method is documented on its own page under docs/. The full surface:

Method What it does
send Send a message over a verified domain. Pass templateId (+ optional templateData) to…
uploadAttachment Upload a file to MailKite storage and get back a secure, time-limited URL. Reference the…
listTemplates List your saved email templates (light metadata only — no body). Use getTemplate for the…
listBaseTemplates List the premade base templates (light metadata). Clone one with createTemplate({ baseId…
getTemplate Get one template (full: subject, html, text, theme). Works for your templates (tpl_…) and…
createTemplate Create a template. Pass baseId to clone a base template into your own, or provide…
listDomains List your domains, each with its webhook URL.
createDomain Add a domain. Returns the domain + DNS records.
getDomain Get one domain with DNS records + webhook.
deleteDomain Remove a domain.
verifyDomain Check DNS and update status.
setWebhook Set or replace the domain's catch-all webhook.
deleteWebhook Remove the domain's webhook.
getWebhookSecret Get this domain's webhook signing secret (whsec_…) — the per-route secret used to verify…
testWebhook Send a signed test event to the domain's webhook.
checkDomainAvailability Check whether a domain is available to register, and at what price. Read-only — no charge.
registerDomain Register (buy) a domain on the customer's behalf; provisions mail DNS and adds it to the…
listRoutes List inbound routing rules.
createRoute Create a route (match, action, destination).
deleteRoute Delete an inbound routing rule by id. Pair with createRoute to register and tear down a…
agent Send a message to one of your inbox agents and get its reply. Defaults to the account's…
route Route a message to one of your registered routes (by routeId or address), running…
listMessages List stored messages, newest first. Optionally filter with search (matches sender…
getMessage Get a message with deliveries + attachments.
retryDelivery Re-deliver a stored message to its webhook.
listLists List your contact lists (static, curated broadcast audiences), each with its member count.
createList Create a contact list. Returns the list with its id (lst_…); add contacts with…
getList Get one contact list with its member count.
updateList Rename a contact list.
deleteList Delete a contact list. The list is removed; the contacts themselves are kept.
listListContacts List the contacts that are members of a list, newest first. Optionally page with before
addListContacts Add contacts (by id, ctr_…) to a list. Returns how many were newly added; contacts…
removeListContact Remove one contact from a list (the contact itself is kept).
listBroadcasts List your broadcasts (one-to-many sends) with status and send stats.
createBroadcast Create a broadcast draft. from is required; set audience to { type: "all" } or {…
getBroadcast Get one broadcast with its status and recipient summary.
updateBroadcast Edit a draft broadcast (any of from/subject/audience/html/… ). Drafts only.
deleteBroadcast Delete a broadcast draft.
sendBroadcast Send a broadcast now, or pass an ISO 8601 scheduledAt to schedule it. A one-click…
verifyWebhook Verify the x-mailkite-signature header on an inbound webhook delivery. Runs entirely…
replyOk The acknowledgement body a webhook consumer returns to confirm it processed the event —…
replySpam Control-mode reply a webhook consumer returns to tell MailKite to mark the message as…
replyDrop Control-mode reply a webhook consumer returns to tell MailKite to drop (discard) the…
replyBlockSender Control-mode reply a webhook consumer returns to tell MailKite to block the sender — the…
encrypt Encrypt a UTF-8 string to a domain's RSA public key (SPKI/PEM), returning the at-rest…
decrypt Decrypt a MailKite at-rest envelope JSON with your RSA private key (PKCS8/PEM), returning…
semanticSearch Semantic search over the MailKite documentation — returns the most relevant doc sections…

Use it from an AI agent — MCP + Agent connectors

MailKite speaks the Model Context Protocol: every API method is a tool your AI assistant (Claude, Cursor, …) can call — send mail, manage domains, search the docs, and give an agent its own inbox. Full guide: https://mailkite.dev/docs/ai-agents.

Hosted (recommended) — one-click OAuth, no key to copy:

claude mcp add --transport http mailkite https://mcp.mailkite.dev/mcp

In Claude Code you can also install the plugin:

/plugin marketplace add mailkite/claude-code
/plugin install mailkite@mailkite

Any chat/UI agent: "Add the MCP server at https://mcp.mailkite.dev/mcp and authenticate in the browser when prompted."

Local (static key, offline / CI):

{ "mcpServers": { "mailkite": { "command": "npx", "args": ["-y", "@mailkite/mcp"], "env": { "MAILKITE_API_KEY": "mk_live_…" } } } }

Give an agent its own inbox. Route inbound mail to a built-in inbox agent (the agent route action) and it answers, files, or escalates on its own — see https://mailkite.dev/docs/ai-agents.

All MailKite libraries

Same contract, every language — pick the one for your stack (full list: https://mailkite.dev/docs/libraries):

Library Repo Distribution
MailKite for Node.js mailkite-node npm
MailKite for Python mailkite-python PyPI
MailKite for Ruby (this repo) mailkite-ruby RubyGems
MailKite for Java mailkite-java Maven Central
MailKite for PHP mailkite-php Packagist
MailKite for Go mailkite-go Go modules
@mailkite/cli mailkite-cli npm
@mailkite/mcp mailkite-mcp npm
@mailkite/client mailkite-js npm
@mailkite/expo mailkite-expo npm
MailKiteClient mailkite-swift Swift Package Manager
dev.mailkite:mailkite-client mailkite-kotlin Maven Central
mailkite_client mailkite-flutter pub.dev

Docs & links

Generated from the shared MailKite API contract. © MailKite.