Mail setup & deliverability

Two separate concerns, two separate places: transactional email (signup confirmation, password reset, team invites, billing receipts) flows through admin-managed NotificationMailers. Customer campaigns flow through customer-managed DeliveryServers. Configure both before going live.

Architecture overview

FlowOwnerConfig location
Transactional (welcome, password reset, billing)Platform adminAdmin → Notifications → Mailers
Customer campaigns + automationsCustomer (or admin platform-wide)Customer → Sending relays · or · Admin → Sending relays
Bounce ingestionPlatform or customerBounce inboxes

Transactional mailer (required)

Without this configured, password resets, team invites, signup welcomes won't reach anyone.

  1. Open Admin → Notifications → Mailers.
  2. Edit the system mailer (or create a new one).
  3. Fill in SMTP credentials. For Hostinger / Gmail / SES SMTP / SendGrid SMTP / etc:
    ProviderHostPortEncryption
    Gmail App Passwordsmtp.gmail.com465SSL
    Hostingersmtp.hostinger.com465SSL
    AWS SES SMTPemail-smtp.us-east-1.amazonaws.com587STARTTLS
    SendGrid SMTPsmtp.sendgrid.net587STARTTLS
    Postmark SMTPsmtp.postmarkapp.com587STARTTLS
    Mailgun SMTPsmtp.mailgun.org587STARTTLS
  4. From address — must be a mailbox you own on the provider. Verified domain only (DKIM/SPF set up).
  5. Save. Click the Send test button on the mailer row.
Port + encryption mismatches KodMail accepts any port from 1 to 65535 and any encryption mode independently — including custom ports such as 6868. Port 465 is always treated as implicit SMTPS regardless of the encryption select. When you change the Encryption dropdown the Port field only auto-fills the standard value if it is empty or still on a stock default (25 / 465 / 587); custom ports you have typed are preserved. If your test send hangs, double-check host, port, and encryption all match what your provider expects.

Per-event mailer routing

Each notification event (welcome, billing, security alert) can route through a different mailer. Best practice:

Edit each event at Admin → Notifications → Edit event → SMTP relay.

Customer campaign sending

Customers manage their own delivery servers under Customer → Sending relays. Available drivers:

SMTP

Generic — works with any standards-compliant server.

AWS SES API

Native HTTP — better throughput than SMTP.

SendGrid API

Webhook-rich, fast ramp.

Mailgun API

EU + US regions, good deliverability.

Postmark API

Transactional-class — also works for marketing.

Brevo (Sendinblue)

Marketing-focused, free tier available.

Mailjet API

EU compliance friendly.

Resend API

Developer-friendly, modern API.

SparkPost API

Enterprise-scale.

DKIM, SPF, DMARC

The 3 DNS records that decide whether Gmail / Outlook / Yahoo trust your mail.

SPF

Tells receivers which servers may send for your domain. Owned by your SMTP relay.

; example.com TXT
v=spf1 include:_spf.mail.hostinger.com ~all

DKIM

KodMail generates an RSA-2048 keypair per sending domain. Add the domain at Customer → Sending domains → Add domain, then publish the TXT record shown:

; kodmail._domainkey.example.com TXT
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ...

DMARC

Tells receivers what to do when SPF or DKIM fails. Start with p=none (monitor mode), graduate to quarantine / reject after two weeks of clean reports:

; _dmarc.example.com TXT
v=DMARC1; p=none; rua=mailto:[email protected]

Verification flow

  1. Add the domain in KodMail.
  2. Publish DKIM + SPF + DMARC at your DNS host (Cloudflare, Route 53, etc).
  3. Click Verify DNS. KodMail polls the records; green check appears when all three pass.
  4. Use the domain as the From on a List or Campaign.

Bounce processing

Set up an IMAP/POP3 inbox that receives bounce notifications (most relays send these back to the Return-Path):

  1. Admin → Bounce inboxes → New (platform-wide) OR Customer → Bounce inbox (per-customer).
  2. IMAP host, port (993 SSL or 143 STARTTLS), username, password.
  3. Folder (usually INBOX).
  4. Cron's bounces:process runs every 5 min — parses messages, classifies as hard / soft / complaint, auto-suppresses recipients.

Sending limits + warmup

Three layers of throttle:

Smoke-test checklist