Transactional email platform

Send reliable email via API & SMTP

Self-hosted MailHub gives you domain DNS guidance, DKIM signing, delivery logs, and signed webhooks — without locking you into a black-box SaaS.

  • Self-hosted
  • DKIM
  • SPF
  • DMARC
  • Delivery webhooks
curl

Built for production senders

Everything you need to authenticate domains and observe delivery.

Domains & DNS

Guided SPF, DKIM, DMARC, and one-click DNS provider writes.

SMTP Submission

App-friendly SMTP listeners with credentials you control.

HTTP Send API

Bearer tokens and a simple JSON send endpoint for apps and services.

Mailboxes & receiving

Create persistent or expiring inboxes with IMAP, POP3, forwarding, and catch-all routing.

Delivery logs

Track queue and MTA outcomes with searchable send history.

Webhooks

Signed callbacks for sent, bounced, and failed terminal events.

Multi-user isolation

Domains, tokens, and logs stay scoped to each account.

Start in four steps

The console keeps domain, token, mailbox, and delivery configuration in one place.

2

Create a scoped token

Give each integration only the send or mailbox permissions it needs.

Review API access →
3

Provision mailboxes

Create persistent mailboxes in the console or create persistent and temporary mailboxes by API.

Review mailbox API →
4

Connect your client

Use SMTP to send and IMAP or POP3 to receive with the mailbox's full address and password.

Review protocol settings →

Send API

Minimal JSON contract. Hostnames below are placeholders — replace with your MailHub host.

POST /api/send
  • fromsender address on a verified domain
  • torecipient string or array
  • subjectmessage subject
  • text / htmlmessage body

Mailbox API and clients

Create a persistent address for ongoing work, or an expiring address for a short-lived workflow.

Create a mailbox

POST to /api/mailboxes with a token holding mailboxes:write. The target domain must belong to that account.

  • modepermanent or temporary
  • address / domainuse a full address, or let a temporary mailbox generate one from domain
  • expiresInMinutesrequired for temporary mailboxes; 5 minutes to 30 days
  • passwordoptional; a secure password is returned once when omitted

Use the returned configuration

Creation returns the address, password, expiration, and ready-to-use IMAP, POP3, and SMTP settings.

  • IMAPrecommended for synchronized folders and sent mail
  • POP3for download-oriented clients
  • SMTPuse the same full mailbox address and password to send
POST /api/mailboxes

Use GET /api/mailboxes with mailboxes:read to list the account's mailboxes. A temporary mailbox stops accepting mail and authenticating at its expiration time.

Domain configuration

Create the domain in MailHub first. Its DNS panel is the source of truth for your exact verification, DKIM, SPF, DMARC, and sender-host values.

Purpose Record Requirement
Domain ownershipTXT _mailhub.<domain>Publish the verification value generated in the console.
DKIMTXT <selector>._domainkey.<domain>Publish the public key generated for this domain.
SPFTXT <domain>Keep one SPF record and include the sender IP/host required by MailHub.
DMARCTXT _dmarc.<domain>Start with monitoring, then strengthen the policy after alignment is verified.
Inbound mailMX <domain>Point MX to the MailHub receiving host and ensure that host has an A/AAAA record.

For reliable delivery, also configure the sending IP's PTR to match the MailHub sending hostname and allow the documented SMTP, IMAP, and POP3 ports through your firewall.

SMTP submission

Default listener ports (override in your deployment):

25smtp
587smtp / STARTTLS
465smtps
2525smtp

Use a mailbox's full address and password for SMTP, IMAP, and POP3. Prefer TLS ports 465, 993, and 995; use STARTTLS/STLS on the plain ports when needed.

Delivery webhooks

Terminal events only — signed HTTPS callbacks to your systems.

Status type
sentemail.sent
bouncedemail.bounced
failedemail.failed

Signature header: X-MailHub-Signature: t=<unix>,v1=<hmac>

Ready to send?

Create an account, add a domain, and ship your first message in minutes.