This module shows email notification tracking status for any messages in mail thread (chatter). Each notified partner will have an intuitive icon just right to his name.
auto_awesome What this module does
AI-generated from the code · Odoo 19.0Adds email tracking to Odoo: every outgoing email gets a tracking record, and the chatter shows per-recipient status (sent, delivered, opened, bounced, error). Users can also see failed messages and a partner's email reputation score.
This module turns Odoo's outgoing emails into tracked messages. Each time an email is prepared for sending, a tracking record is created for every recipient, and a small invisible image is added to the email body. When the recipient opens the email, that image is loaded and the status changes to "Opened".
In the chatter of any record, each notified partner now shows a status icon next to their name: Waiting, Sent, Delivered, Opened, Error or Unknown. Hovering or clicking gives the error reason when something went wrong.
A new "Failed sent messages" filter appears in the search views of every model that uses the chatter, and a failed-messages panel lets users review messages that bounced, were rejected or marked as spam, then mark them as handled.
Two new menus under the Email section list all tracking emails and tracking events, with their own list, form and search views. Tracking events record opens, clicks (with the clicked URL, IP address, browser and country), deliveries, bounces, spam complaints and unsubscribes.
On contacts, a new tab shows the tracking emails of that partner and an email score between 0 and 100, computed from past delivery results. Contacts can be filtered by bounced status, and a contact's email is automatically flagged as bounced when a hard bounce, spam complaint or rejection is received.
Settings let administrators show or hide aliases in tracking, and automatically delete old tracking records after a configurable number of days.
Depends on
Required by other modules
Menus it adds
Models and fields (12)
- mail.mail · extends an existing model
- mail.alias · extends an existing model
- mail.thread · extends an existing modelfailed_message_ids (Failed Messages)
- res.company · extends an existing modelmail_tracking_show_aliases (Show Aliases in Mail Tracking)
- res.partner · new modelemail_score, tracking_emails_count
- mail.message · extends an existing modelemail_cc (Cc), email_to (To), is_failed_message, mail_tracking_ids (Mail Trackings), mail_tracking_needs_action
- ir.mail_server · extends an existing model
- mail.alias.domain · extends an existing model
- mail.bounced.mixin · new modelemail_bounced
- mail.tracking.email · new modeldate, name (Subject), time, state, token (Security Token), sender (Sender email), mail_id (Email), recipient (Recipient email), timestamp (UTC timestamp), error_type, message_id, partner_id, bounce_type, display_name, mail_message_id, error_description, error_smtp_server (Error SMTP server), recipient_address (Recipient email address), bounce_description, tracking_event_ids (Tracking events)
- mail.tracking.event · new modelip (User IP), url (Clicked URL), date, time, mobile (Is mobile?), ua_type (User agent type), os_family (Operating system family), recipient, timestamp (UTC timestamp), ua_family (User agent family), error_type, event_type, user_agent, smtp_server (SMTP server), error_details, user_country_id (User country), error_description, recipient_address (Recipient email address), tracking_email_id (Message)
- res.config.settings · extends an existing modelmail_tracking_show_aliases, mail_tracking_email_max_age_days (Max age in days of mail tracking email records)
Text generated by AI (DeepSeek) from reading the Odoo 19.0 code on GitHub; it may contain mistakes, so check the code before deciding. The module is very large and only part of the code was read. View the code on GitHub
Availability by version
Reviewed: 2026-11-03Confirmation status: 8 confirmed, 1 with no information of 9 versions.
Sources · Odoo 19.0
Confirmed on 2026-11-03 in branch 19.0 of OCA/mail.
terminal Installation and usage
OCA documentation · Odoo 19.0Installation
Source · Odoo 19.0If you're using a multi-database installation (with or without dbfilter option) where /web/databse/selector returns a list of more than one database, then you need to add mail_tracking addon to wide load addons list (by default, only web addon), setting --load option. For example, --load=web,mail,mail_tracking
The first update of the module after this index was added creates a partial index on mail_message (mail_message_mail_tracking_needs_action_index). Later updates do not build it again: Odoo keeps it while its definition does not change.
On a database with a very large mail_message table that first build blocks writes to the table while it runs (13 minutes on 122 million rows). To avoid the lock, create the index beforehand exactly as the ORM would, with the comment it stores on it; Odoo compares that comment with the index definition and keeps the index when they match:
CREATE INDEX CONCURRENTLY mail_message_mail_tracking_needs_action_index
ON mail_message (id) WHERE mail_tracking_needs_action IS TRUE;
COMMENT ON INDEX mail_message_mail_tracking_needs_action_index
IS 'INDEX (id) WHERE mail_tracking_needs_action IS TRUE';Configuration
Source · Odoo 19.0As there can be scenarios where sending a tracking img in the email body is not desired, there is a global system parameter "mail_tracking.tracking_img_disabled" that can be set to True to remove the tracking img from all outgoing emails. Note that the Opened status will not be available in this case.
Usage
Source · Odoo 19.0When user sends a message in mail_thread (chatter), for instance in partner form, then an email tracking is created for each email notification. Then a status icon will appear just right to name of notified partner.
These are all available status icons:
Unknown: No email tracking info available. Maybe this notified partner has 'Receive Inbox Notifications by Email' == 'Never'
Waiting: Waiting to be sent
Error: Error while sending
Sent: Sent to SMTP server configured
Delivered: Delivered to final MX server
Opened: Opened by partner
Cc: It's a Carbon-Copy recipient. Can't know the status so is 'Unknown'
No Email: The partner doesn't have a defined email
No Partner: The recipient doesn't have a defined partner
If you want to see all tracking emails and events you can go to
- Settings \> Technical \> Email \> Tracking emails
- Settings \> Technical \> Email \> Tracking events
When the message generates an 'error' status, it will apear on discuss 'Failed' channel. Any view with chatter can show the failed messages too.
- Discuss
- Chatter
You can use "Failed sent messages" filter present in all views to show records with messages in failed status and that needs an user action.
- Filter
Installation instructions, the distribution package, dependencies and configuration steps are not shown because they have not yet been verified in the module documentation for any version.
Data imported from GitHub: this sheet reflects the latest catalog review, not a live lookup. Always check the module documentation and staging before installing in production.