
Domains you prove and hold
A DNS checklist verifies your sending domain and mail-kit generates and holds the DKIM key — not a platform that can revoke it. Your sending identity stays yours.
Sending domains you prove and hold the DKIM key to, idempotent sends that drop the suppressed and sign the rest, and delivery events that feed suppression and signed webhooks — transactional email as a library you embed, over a transport you choose. No platform owns your domains, your logs, or your list.


A DNS checklist verifies your sending domain and mail-kit generates and holds the DKIM key — not a platform that can revoke it. Your sending identity stays yours.

Every send is idempotency-keyed, suppression-filtered, MIME-built and DKIM-signed before it queues. Retries and replays converge on one message, never two.

Bounces and complaints suppress automatically — per tenant and globally — and a send drops a suppressed address before the wire. No accidental re-sends, no list hidden inside “contacts”.

Delivered, bounced, complained, opened — every event fans out to your endpoint as a signed, retried webhook. You get the truth about your mail, and it is verifiable.

mail-kit writes to your Postgres through a narrow executor and goes out over a transport seam you fill — SES, SMTP, memory, or your own. No second service to operate.

Every domain, message, suppression and webhook row carries an opaque tenantId, so tenancy.protect isolates the mail schema like any other — one send-log per tenant, by construction.
Domains, messages, events, webhooks — the framed box mail-kit owns, over your database and the transport you choose.
Walk the DNS checklist; mail-kit generates and holds the DKIM key. Your domain is proven and the sending identity is yours.
Call send() with from, to, subject and html. It checks suppression, builds MIME, signs, queues and retries — idempotent on your key.
Delivered, bounced, complained, opened — events update suppression and fire signed webhooks to whoever asked.
import { createMail } from '@quxkit/mail-kit';
// your executor, your transport — SES, SMTP, or your own
const mail = createMail({ db: sql, transport: ses });
// idempotent: retries & replays converge on one message, never two
const message = await mail.send(tenantId, {
from: '[email protected]',
to: user.email,
subject: 'Welcome',
html,
idempotencyKey: signupId,
}); // suppression-filtered · MIME-built · DKIM-signedA platform that owns your domain owns your deliverability. Hold the DKIM key yourself.