If you have arrived here, you already know Joomla's default PHP mail transport is not enough. SMTP with authentication is the replacement. But SMTP alone is only step one — without DMARC and a sending IP with a clean reputation, your mail will still land in spam more often than not. This guide walks through the complete setup and finishes with a real placement test.
You can open an incognito browser, register a new account on your Joomla site using a Gmail address, and the confirmation email lands in the primary Gmail inbox (not Promotions, not Spam). The email headers show spf=pass, dkim=pass, dmarc=pass. That is the target.
Before you start
You will need:
- A Joomla 4 or 5 admin account (the Mail Settings UI is the same; for Joomla 3, the menu path is
Global Configuration → Server). - Access to DNS for the domain you send from. This is the most common blocker — if your DNS is locked behind a third party, budget a day.
- An account on a transactional sending provider. For this guide: Postmark, SendGrid, Mailgun, Amazon SES, or Brevo. Pick one.
Joomla configuration, step by step
Log in to Joomla admin. Navigate: System → Global Configuration → Server tab → Mail Settings section.
Mailer + From identity
- Mailer: change from
PHP MailtoSMTP. - From Email: set to a mailbox on the domain you will authenticate, for example
noreply@yoursite.com. Do not use a Gmail address here — Gmail will reject mail "from" a Gmail address that arrives via another IP. - From Name: the public sender name recipients will see. Keep it short and recognisable, e.g. your brand.
- Send Mail: leave
Yes. This is the master switch. - Disable Mass Mail: leave
Nounless you want to block Joomla's mass-mail feature entirely.
SMTP credentials
- SMTP Authentication:
Yes. - SMTP Security:
TLS. Port587. (SSLon port 465 also works but 587/TLS is the modern default.) - SMTP Port:
587. - SMTP Username / Password / Host: from your provider. Common patterns:
Postmark
Host: smtp.postmarkapp.com
User: <server API token>
Pass: <server API token>
SendGrid
Host: smtp.sendgrid.net
User: apikey (literal string)
Pass: <SendGrid API key>
Mailgun
Host: smtp.mailgun.org (or smtp.eu.mailgun.org for EU region)
User: postmaster@mg.yoursite.com
Pass: <Mailgun SMTP password>
Amazon SES
Host: email-smtp.<region>.amazonaws.com
User: <SES SMTP user, NOT your AWS access key>
Pass: <SES SMTP password>
Brevo (ex-Sendinblue)
Host: smtp-relay.brevo.com
User: <Brevo login email>
Pass: <SMTP key, generated in Brevo dashboard>Save the configuration. Joomla will reload and show a green success banner.
Joomla's built-in Send Test Mail
Still in Mail Settings, click Send Test Mail. This sends a short test to the super-user's account email. If it arrives (check both inbox and spam), transport is working.
- Authentication failed: copy-paste the username/password again. Providers often display the values with invisible whitespace.
- Connection refused / timeout: your host blocks outbound port 587. Try 465 with SSL, or ask the host to open 587.
- SSL/TLS handshake error: mismatch between port and security setting. Port 587 needs
TLS; port 465 needsSSL.
DNS records: SPF, DKIM, DMARC
Transport working is half the battle. Authentication is the other half. You need three records.
; 1. SPF — authorise your provider to send as yoursite.com
yoursite.com. IN TXT "v=spf1 include:<provider-spf> ~all"
; 2. DKIM — provider gives you selector records; example for Postmark:
20240101pm._domainkey.yoursite.com. IN TXT "k=rsa; p=MIGfMA0...longstring...QAB"
; 3. DMARC — start at quarantine with reporting
_dmarc.yoursite.com. IN TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc@yoursite.com; pct=100; adkim=r; aspf=r"The <provider-spf> value depends on who you chose — spf.mtasv.net for Postmark, sendgrid.net for SendGrid, mailgun.org for Mailgun, amazonses.com for SES, spf.brevo.com for Brevo.
After publishing, wait 10 minutes, then send another Joomla test mail to a Gmail address you own. Open the message, choose "Show original", and confirm all three: SPF: PASS, DKIM: 'yoursite.com' PASS, DMARC: 'yoursite.com' PASS.
A native Joomla extension is in private beta — schedule placement tests from admin and alert on drops.
The placement test
The Joomla test email is minimal. Your real templates — registration, password reset, contact form — are longer, have links, sometimes have images. They scan differently. You need to test them as they really send.
- Open check.live-direct-marketing.online and generate 20+ seed addresses across Gmail, Outlook, Yahoo, Mail.ru, Yandex, GMX, Web.de and ProtonMail.
- Copy a seed address into the Joomla front-end registration form. Submit. Watch the confirmation email fan out to the seed panel, with per-provider placement (Inbox / Spam / Promotions).
- Trigger a password reset for an existing seed account. Re-test.
- Submit the contact form as a seed. Check how the notification lands at the site mailbox.
Green means 95%+ inbox across the board. Yellow in the 70-94% band usually points at content (too many links, external images from a cold domain). Red below 70% means authentication is still broken somewhere — re-check the DMARC report mailbox for clues.
A note on warm IPs
If you picked Postmark or SendGrid, your mail leaves via their shared "transactional" IPs, which are already warm and have strong reputation. If you picked SES, the default is a shared IP too, but for mixed-traffic senders you can be placed on a noisier pool. If you opted for a dedicated IP, budget 2-4 weeks of warm-up before trusting it with real registrations — a cold dedicated IP behaves worse than a warm shared one.