All posts
Integrator8 min read

Odoo outbound email setup: SMTP configuration, alias domains, SPF/DKIM, and bounce handling

Getting outbound email working reliably in Odoo requires more than entering SMTP credentials. This guide covers server priority, from-address masking, alias domain setup, SPF and DKIM requirements, and how to configure bounce addresses so undeliverable mail does not silently disappear.

Where outbound email is configured#

Outbound email servers live at Settings → Technical → Email → Outbound Mail Servers (developer mode required for direct access, or navigate via Settings → Discuss → Outgoing Mail Server).

Each server record captures SMTP host, port, encryption (None / StartTLS / SSL/TLS), and credentials. Odoo supports multiple outbound servers and routes email based on the Priority field - lower number means higher priority.

SMTP configuration walkthrough#

Required fields#

FieldTypical values
SMTP Serversmtp.gmail.com, email-smtp.us-east-1.amazonaws.com, your own MTA
SMTP Port587 (StartTLS) or 465 (SSL/TLS) - avoid port 25 on cloud VMs
Connection SecuritySSL/TLS for port 465, StartTLS for port 587
UsernameFull email address or SMTP API username
PasswordAccount password or SMTP API key

After saving, click Test Connection to verify credentials before going live.

Priority and multi-server routing#

If you have multiple outbound servers, use the priority field to control routing. Add a From Filter (a domain like @mycompany.com) to pin specific senders to specific servers.

Odoo evaluates servers in this order:

  1. Servers with a matching From Filter (domain of the sending address matches)
  2. Among those, the one with the lowest priority number
  3. If no From Filter matches, fall back to the lowest-priority server overall

From address masking#

Navigate to Settings → General Settings → Discuss and set:

  • Alias Domain: your sending domain (e.g., mail.mycompany.com)
  • Default From: the address to use when no other from is specified

With an alias domain set, Odoo constructs reply-to addresses like catchall@mail.mycompany.com and routes responses back through the inbound mail gateway.

SPF and DKIM requirements#

SPF#

Add a TXT record on your sending domain that includes your SMTP relay:

v=spf1 include:sendgrid.net include:amazonses.com ~all

Replace the include: values with whatever relay you are using. If sending directly from your own server, use ip4:your.server.ip instead.

DKIM#

DKIM requires your email provider to give you a public key to publish as a DNS TXT record. The record name is typically selector._domainkey.yourdomain.com. The exact selector and key value come from your SMTP provider's setup documentation.

Odoo itself does not generate or manage DKIM keys. Key signing happens at the SMTP relay level - configure DKIM on the relay, not in Odoo.

Once SPF and DKIM are passing, add a DMARC policy:

_dmarc.yourdomain.com TXT "v=DMARC1; p=quarantine; rua=mailto:dmarc-reports@yourdomain.com"

Start with p=none (monitoring only) and move to p=quarantine after confirming your legitimate senders are aligned.

Bounce address (return-path) configuration#

In Settings → General Settings → Discuss, set the Catchall Email field. This is the address that receives bounce notifications and auto-replies. It must be a real mailbox that Odoo can read via an inbound mail gateway.

Odoo sets the Return-Path SMTP header to bounce+token@youraliasdomain.com. The token encodes the original message ID so Odoo can match bounce notifications to specific sent messages and update the partner's email validity flag.

Testing deliverability#

After configuration:

  1. Send a test email from Settings → Outgoing Mail Server → Test Connection
  2. Send an actual email to a mail-tester.com address and review the score
  3. Check your SMTP relay's dashboard for delivery rates and bounces
  4. Review Odoo's Settings → Technical → Email → Emails list to see queued and sent messages and their status

Common failure modes#

"Mail server not found" error - no outbound server is configured, or all configured servers have a From Filter that does not match the sending address.

Emails stuck in "Outgoing" state - the mail queue worker is not running. Check Settings → Technical → Automation → Scheduled Actions → Email Queue Manager.

Delivered but landing in spam - SPF or DKIM is missing or misaligned. Run your domain through MXToolbox to diagnose.

Bounces not processed - the catchall mailbox is not connected to an inbound mail gateway, or the alias domain is not set.

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free