Self-hosted Odoo, Community or Enterprise, has no mail server of its own — until you add one, quotations, invoices and chatter messages have nowhere to go. Odoo Online and Odoo.sh send through Odoo's servers from your odoo.com subdomain; to send through your own relay there, you add an outgoing server as well. Below is the setup for Postwing on Odoo 17 and 18.
| Setting | Value |
|---|---|
| SMTP host | smtp.postwing.app |
| Port | 587 |
| Encryption | STARTTLS (the connection is upgraded to TLS before login) |
| Username | The login of an SMTP token for your domain |
| Password | The password of that token — shown once, when the token is created |
Go to Settings → General Settings, find the Emails section, turn on Use Custom Email Servers and click Save. An Outgoing Email Servers link appears under the option.
Click Outgoing Email Servers → New:
| Field | Value |
|---|---|
| Name | Anything, e.g. the service name |
| Priority | 10 — lower numbers are tried first |
| FROM Filtering | your-domain.com — your verified domain |
| Authenticate with | Username |
| SMTP Server | smtp.postwing.app |
| SMTP Port | 587 (the default is 25) |
| Connection Encryption | TLS (STARTTLS) (the default is None) |
| Username | The login of an SMTP token for your domain |
| Password | That token's password |
Click Test Connection. Connection Test Successful! means Odoo connected and logged in — nothing more; the next section is what decides whether the message is accepted.
Every address Odoo builds itself comes from the company's Alias Domain (same Emails section): the sender notifications@, the reply-to catchall@ and the bounce address bounce@. Set it to your verified domain.
550 from must be equal to …. A user whose own address is elsewhere is sent from notifications@ on your domain, with their name kept. Odoo's bounce address is kept in the envelope, so a bounce message from the recipient's server comes back to the bounce alias (bounce@your-domain.com) and Odoo can mark the message with its red envelope — provided that address reaches Odoo through forwarding or an incoming mail server. Do not set a return path on the domain in the dashboard: it replaces the envelope Odoo chose. A rejection our servers receive while delivering is not sent back as a bounce message; it is in the domain's log and in the bounced webhook.
Mailings can use a separate server: in Email Marketing → Configuration → Settings, turn on Dedicated Server and choose it. Queued mail is sent by the scheduled action Mail: Email Queue Manager in batches. Mailings carry their own one-click unsubscribe headers; volume is bounded by your plan and by a new domain's warm-up — see sending limits.
Odoo also reads a server from its configuration file. It is used only when no Outgoing Mail Server record exists:
[options]
; Used only while no Outgoing Mail Server record exists
smtp_server = smtp.postwing.app
smtp_port = 587
; STARTTLS
smtp_ssl = True
smtp_user = token-login@your-domain.com
smtp_password = your-token-password
from_filter = your-domain.com
email_from = notifications@your-domain.comOpen a contact, click Send message in the chatter and send it to your own address. If it does not arrive, turn on developer mode and open Settings → Technical → Emails: a failed message shows the server's reply.
| Error | Cause and fix |
|---|---|
| Connection test times out | Port blocked by the host — use 8587 with TLS (STARTTLS) or 8465 with SSL/TLS — or Encryption left on None. |
535 on the connection test | Wrong token login or password. |
550 from must be equal to … | The alias domain or FROM Filtering is not your verified domain. |
| Everything is sent from notifications@ | Users' addresses do not match FROM Filtering. Expected — or give them addresses on your domain. |
550 hourly limit exceeded | Plan limit reached during a mailing. Send smaller batches or upgrade. |
| Mail goes to spam | The sender is not on your verified domain. |
Settings → General Settings → Emails: turn on Use Custom Email Servers and save, then click Outgoing Email Servers and create a record. In developer mode the same list is under Settings → Technical → Outgoing Mail Servers.
TLS (STARTTLS) with port 587, or SSL/TLS with port 465. A new record defaults to None and port 25 — leave either unchanged and the connection is refused or never authenticates.
Your verified domain, for example your-domain.com. Odoo then keeps the sender's own address when it is on that domain, and sends everything else from the notifications address on it. Without a filter, every message goes out from the notifications address.
Because the salesperson's address does not match the server's FROM Filtering — typically a personal Gmail address on the user record. Odoo keeps their name and swaps the address for the notifications one. Give users addresses on your verified domain if replies should reach them directly.
No. Test Connection only checks that Odoo can connect and log in. Send a real message from the chatter of a contact to confirm the sender address is accepted.
Yes. In Email Marketing → Configuration → Settings, turn on Dedicated Server and pick this server. Mailings add their own one-click unsubscribe headers; your plan's hourly and monthly limits still apply.
Your host is blocking outbound SMTP ports. Use port 8587 with TLS (STARTTLS), or 8465 with SSL/TLS.