Email Deliverability on jekcms: SPF, DKIM, DMARC, and What jekcms Actually Sends

jekcms sends mail over SMTP (with a plain PHP mail() fallback) — there's no multi-provider driver abstraction built in. Here's what that actually means in practice, and how to get provider-grade deliverability anyway.

Email Deliverability on jekcms: SPF, DKIM, DMARC, and What jekcms Actually Sends

jekcms sends mail over SMTP (with a plain PHP mail() fallback) — there's no multi-provider driver abstraction built in. Here's what that actually means in practice, and how to get provider-grade deliverability anyway.

jekcms doesn't ship a classes/Mail/ driver architecture with separate Mailgun, Postmark, and Amazon SES classes. What it ships is a standard SMTP sender with a plain PHP mail() fallback if SMTP isn't configured. That's a smaller feature than a multi-provider abstraction layer, but it's not a limitation in practice: every transactional email provider worth using — Mailgun, Postmark, SES, Brevo, whatever you already trust — exposes a standard SMTP relay. Point jekcms's SMTP settings at that relay's host, port, and credentials, and you get that provider's deliverability and reputation infrastructure without jekcms needing a dedicated API driver for it.

SPF, DKIM, and DMARC: Do This Before Sending

This part has nothing to do with jekcms specifically and everything to do with how email works. Configure SPF and DKIM records in your DNS before sending any production email — your SMTP provider's control panel gives you the exact record values. Allow 24–48 hours for DNS propagation, then test with mail-tester.com before going live. A score below 8/10 indicates a configuration problem that will affect deliverability. Add DMARC in monitoring mode first (p=none), then tighten to quarantine and reject after reviewing the aggregate reports for a couple of weeks.

What jekcms Actually Logs

The built-in newsletter plugin logs sent messages to an email_logs table with columns for to_email, subject, status, template_slug, campaign_id, error_message, and sent_at. There's no opened_at/bounced_at tracking and no per-provider provider_message_id — jekcms records whether the send call succeeded or failed, not open/bounce events reported back by the provider. If you need open and bounce tracking, that comes from your SMTP provider's own dashboard (Mailgun, Postmark, and SES all offer this) rather than from jekcms's admin panel.

Unsubscribe Mechanics

For newsletter and digest emails, jekcms's mail sender adds a List-Unsubscribe header (plus List-Unsubscribe-Post: List-Unsubscribe=One-Click when a one-click URL is available) automatically when an unsubscribe link is passed in. This satisfies the one-click unsubscribe requirement Gmail and Yahoo enforce for bulk senders. There is no separate /api/v1/mail/* endpoint dedicated to bounce or unsubscribe handling — unsubscribes are handled through the newsletter plugin's own subscriber management, not a general-purpose transactional mail API.

Verifying DNS Records

After configuring your sending domain, verify the records are live before enabling production email:

# Check SPF record
dig TXT yourdomain.com +short
# Expected: something like "v=spf1 include:your-smtp-provider.com ~all"

# Check DKIM record
dig TXT selector._domainkey.yourdomain.com +short
# Expected: "k=rsa; p=MIGfMA0..."

# Check DMARC record
dig TXT _dmarc.yourdomain.com +short
# Expected: "v=DMARC1; p=none; rua=mailto:..."

Separate Sending Reputation for Newsletters

If you send both transactional email (password resets, order confirmations) and bulk newsletter email from the same jekcms installation, consider using a separate sending domain or subdomain for the two. A newsletter batch that gets flagged as spam shouldn't drag down the deliverability of your password-reset emails. This is a configuration choice on your SMTP provider's side — jekcms doesn't currently split sending domains per email type automatically.

Pre-Launch Email Testing Checklist

Before enabling production email, send test messages to accounts on Gmail, Outlook, Yahoo, and Apple Mail, and verify:

  • Message lands in the primary inbox, not spam or promotions tab
  • HTML rendering matches your template across all four clients
  • The unsubscribe link (for newsletter sends) works and processes correctly
  • DKIM signature shows pass in the Authentication-Results header
  • SPF check shows pass in the Received-SPF header
  • Reply-to address is monitored and functioning

Run this checklist after every DNS change, after switching SMTP providers, and after modifying email templates — a five-minute check prevents weeks of reputation damage that can take a month or more to recover from.

Choosing an SMTP Relay

Since jekcms talks to whatever SMTP host you configure, the practical choice is between providers, not between jekcms driver classes. A reasonable rule of thumb: pick a provider with a free or cheap low-volume tier for a small site, and one with dedicated IPs and strong deliverability guarantees if inbox placement is mission-critical (order confirmations, appointment reminders). Whichever you pick, the setup inside jekcms is the same three fields — host, port, credentials — in the mail settings screen.

Order Today

One-time payment, lifetime access. Setup in 30 minutes.

View Pricing
  • Setup and live in 30 minutes
  • 14+ professional themes
  • n8n automation integration
  • Automatic SEO — Sitemap, Schema.org
  • iyzico payment support

Be the first to know

New features, release notes & CMS guides — a couple of emails a month, no spam.