Email tracking

mail_tracking
REPOSITORY
REPOSITORYOCA/mail
GIT
GIThttps://github.com/OCA/mail.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/mail/tree/19.0/mail_tracking
VERSION
VERSION 1.0.4
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSYann Papouin, Weblate, OCA-git-bot, oca-ci, Pilar Vargas, Quoc - Pham Ngoc
WEBSITE
WEBSITEhttps://github.com/OCA/mail
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:40:50
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.mail.tracking res.config.settings xpath Inherits mail.res_config_settings_view_form
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.list mail.tracking.email list New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.list mail.tracking.event list New
view_message_form mail.message field Inherits mail.mail_message_view_form
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (13)

New fields (0)

No new fields.

Public methods (1)
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_ssl_certificate=None, smtp_ssl_private_key=None, smtp_debug=False, smtp_session=None)
    @api.model

New fields (0)

No new fields.

Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_aliases(self)
    @api.model@tools.ormcache()
    We want to discard these addresses for trackings
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    We've got `mail.alias.get_aliases` method which is cached os we need to refresh the cache when we add a new alias domain
  • unlink(self)
    We've got `mail.alias.get_aliases` method which is cached os we need to refresh the cache when we remove an alias domain
  • write(self, vals)
    We've got `mail.alias.get_aliases` method which is cached os we need to refresh the cache when we add a new alias domain

New fields (1)
  • email_bounced Boolean
    index=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    Inherit this method to make any other actions to the model that inherit the mixin
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • email_cc Char
    help='Additional recipients that receive a "Carbon Copy" of the e-mail' args: 'Cc'
  • email_to Char
    help='Raw TO recipients' args: 'To'
  • is_failed_message Boolean
    compute='_compute_is_failed_message' search='_search_is_failed_message'
  • mail_tracking_ids One2many → mail.tracking.email
    bypass_search_access=True comodel_name='mail.tracking.email' inverse_name='mail_message_id' string='Mail Trackings'
  • mail_tracking_needs_action Boolean
    default=False help='The message tracking will be considered to filter tracking issues'
Public methods (6)
  • get_failed_count(self)
    @api.model
    Gets the number of failed messages used on discuss mailbox item
  • get_failed_messages(self)
    Returns the list of failed messages to be used by the failed_messages widget
  • get_failed_messsage_info(self, ids, model)
    @api.model
  • get_failed_states(self)
    @api.model
    The 'failed' states of the message
  • set_need_action_done(self)
    This will mark the messages to be ignored in the tracking issues filter
  • tracking_status(self)
    Generates a complete status tracking of the messages by partner

New fields (1)
  • failed_message_ids One2many → mail.message
    domain=<expr> string='Failed Messages' args: 'mail.message', 'res_id'
Public methods (1)
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    Add filters for failed messages. These filters will show up on any search views of any model inheriting from ``mail.thread``.

New fields (20)
  • bounce_description Char
    readonly=True
  • bounce_type Char
    readonly=True
  • date Date
    compute='_compute_date' readonly=True store=True
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True
  • error_description Char
    readonly=True
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True
  • message_id Char
    compute='_compute_message_id'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • token Char
    default=<expr> groups='base.group_system' readonly=True string='Security Token'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (9)
  • create(self, vals_list)
    @api.model_create_multi
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited It can receive a recordset or mapped states dictionary via context. Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
  • read(self, fields=None, load='_classic_read')
    Override to explicitly call check_access, that is not called by the ORM. It instead directly fetches ir.rules and apply them.
  • smtp_error(self, mail_server, smtp_server, exception)
  • tracking_img_add(self, email)
  • write(self, vals)

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True
  • error_description Char
    readonly=True
  • error_details Text
    readonly=True
  • error_type Char
    readonly=True
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')]
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (10)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_sent(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (1)
  • mail_tracking_show_aliases Boolean
    default=False string='Show Aliases in Mail Tracking'
Public methods (0)

No public methods.

New fields (2)
  • mail_tracking_email_max_age_days Integer
    config_parameter='mail_tracking.mail_tracking_email_max_age_days' help='If set as positive integer enables the deletion of old mail tracking records to reduce the database size.' args: 'Max age in days of mail tracking email records'
  • mail_tracking_show_aliases Boolean
    readonly=False related='company_id.mail_tracking_show_aliases'
Public methods (0)

No public methods.

New fields (2)
  • email_score Float
    compute='_compute_email_score_and_count' readonly=True
  • tracking_emails_count Integer
    compute='_compute_email_score_and_count' readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/mail
GIT
GIThttps://github.com/OCA/mail.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/mail/tree/18.0/mail_tracking
VERSION
VERSION 1.0.11
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSAkim Juillerat, Carlos Lopez, Yann Papouin, Weblate, OCA-git-bot, tarteo, Iván Todorovich, oca-ci, Carlos Roca, CarlosRoca13, Rémi - Le Filament, augusto-weiss, trisdoan
WEBSITE
WEBSITEhttps://github.com/OCA/mail
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:30:18
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.mail.tracking res.config.settings xpath Inherits mail.res_config_settings_view_form
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.list mail.tracking.email list New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.list mail.tracking.event list New
view_message_form mail.message field Inherits mail.mail_message_view_form
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (14)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_ssl_certificate=None, smtp_ssl_private_key=None, smtp_debug=False, smtp_session=None)
    @api.model

New fields (0)

No new fields.

Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_aliases(self)
    @api.model@tools.ormcache()
    We want to discard these addresses for trackings
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    We've got `mail.alias.get_aliases` method which is cached os we need to refresh the cache when we add a new alias domain
  • unlink(self)
    We've got `mail.alias.get_aliases` method which is cached os we need to refresh the cache when we remove an alias domain
  • write(self, vals)
    We've got `mail.alias.get_aliases` method which is cached os we need to refresh the cache when we add a new alias domain

New fields (1)
  • email_bounced Boolean
    index=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    Inherit this method to make any other actions to the model that inherit the mixin
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • email_cc Char
    help='Additional recipients that receive a "Carbon Copy" of the e-mail' args: 'Cc'
  • email_to Char
    help='Raw TO recipients' args: 'To'
  • is_failed_message Boolean
    compute='_compute_is_failed_message' search='_search_is_failed_message'
  • mail_tracking_ids One2many → mail.tracking.email
    auto_join=True comodel_name='mail.tracking.email' inverse_name='mail_message_id' string='Mail Trackings'
  • mail_tracking_needs_action Boolean
    default=False help='The message tracking will be considered to filter tracking issues'
Public methods (6)
  • get_failed_count(self)
    @api.model
    Gets the number of failed messages used on discuss mailbox item
  • get_failed_messages(self)
    Returns the list of failed messages to be used by the failed_messages widget
  • get_failed_messsage_info(self, ids, model)
    @api.model
  • get_failed_states(self)
    @api.model
    The 'failed' states of the message
  • set_need_action_done(self)
    This will mark the messages to be ignored in the tracking issues filter
  • tracking_status(self)
    Generates a complete status tracking of the messages by partner

New fields (0)

No new fields.

Public methods (2)
  • default_get(self, fields)
    @api.model
  • resend_mail_action(self)

New fields (1)
  • failed_message_ids One2many → mail.message
    domain=<expr> string='Failed Messages' args: 'mail.message', 'res_id'
Public methods (1)
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    Add filters for failed messages. These filters will show up on any search views of any model inheriting from ``mail.thread``.

New fields (20)
  • bounce_description Char
    readonly=True
  • bounce_type Char
    readonly=True
  • date Date
    compute='_compute_date' readonly=True store=True
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True
  • error_description Char
    readonly=True
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True
  • message_id Char
    compute='_compute_message_id'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • token Char
    default=<expr> groups='base.group_system' readonly=True string='Security Token'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (9)
  • create(self, vals_list)
    @api.model_create_multi
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited It can receive a recordset or mapped states dictionary via context. Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
  • read(self, fields=None, load='_classic_read')
    Override to explicitly call check_access, that is not called by the ORM. It instead directly fetches ir.rules and apply them.
  • smtp_error(self, mail_server, smtp_server, exception)
  • tracking_img_add(self, email)
  • write(self, vals)

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True
  • error_description Char
    readonly=True
  • error_details Text
    readonly=True
  • error_type Char
    readonly=True
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')]
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (10)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_sent(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (1)
  • mail_tracking_show_aliases Boolean
    default=False string='Show Aliases in Mail Tracking'
Public methods (0)

No public methods.

New fields (2)
  • mail_tracking_email_max_age_days Integer
    config_parameter='mail_tracking.mail_tracking_email_max_age_days' help='If set as positive integer enables the deletion of old mail tracking records to reduce the database size.' args: 'Max age in days of mail tracking email records'
  • mail_tracking_show_aliases Boolean
    readonly=False related='company_id.mail_tracking_show_aliases'
Public methods (0)

No public methods.

New fields (2)
  • email_score Float
    compute='_compute_email_score_and_count' search='_search_email_score'
  • tracking_emails_count Integer
    compute='_compute_email_score_and_count' readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/17.0/mail_tracking
VERSION
VERSION 1.0.5
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Carlos Lopez, Pierre Verkest, Weblate, OCA-git-bot, David, oca-ci, CarlosRoca13, trisdoan
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 19:20:09
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
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.

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
res_config_settings_view_form res.config.settings.view.form.inherit.mail.tracking res.config.settings xpath Inherits mail.res_config_settings_view_form
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_message_form mail.message field Inherits mail.mail_message_view_form
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (15)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_ssl_certificate=None, smtp_ssl_private_key=None, smtp_debug=False, smtp_session=None)
    @api.model

New fields (0)

No new fields.

Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_aliases(self)
    @api.model@tools.ormcache()
    We want to discard these addresses for trackings
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
    We've got `mail.alias.get_aliases` method which is cached os we need to refresh the cache when we add a new alias domain
  • unlink(self)
    We've got `mail.alias.get_aliases` method which is cached os we need to refresh the cache when we remove an alias domain
  • write(self, vals)
    We've got `mail.alias.get_aliases` method which is cached os we need to refresh the cache when we add a new alias domain

New fields (1)
  • email_bounced Boolean
    index=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    Inherit this method to make any other actions to the model that inherit the mixin
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • email_cc Char
    help='Additional recipients that receive a "Carbon Copy" of the e-mail' args: 'Cc'
  • email_to Char
    help='Raw TO recipients' args: 'To'
  • is_failed_message Boolean
    compute='_compute_is_failed_message' search='_search_is_failed_message'
  • mail_tracking_ids One2many → mail.tracking.email
    auto_join=True comodel_name='mail.tracking.email' inverse_name='mail_message_id' string='Mail Trackings'
  • mail_tracking_needs_action Boolean
    default=False help='The message tracking will be considered to filter tracking issues'
Public methods (7)
  • get_failed_count(self)
    @api.model
    Gets the number of failed messages used on discuss mailbox item
  • get_failed_messages(self)
    Returns the list of failed messages to be used by the failed_messages widget
  • get_failed_messsage_info(self, ids, model)
    @api.model
  • get_failed_states(self)
    @api.model
    The 'failed' states of the message
  • set_all_as_reviewed(self)
    @api.model
  • set_need_action_done(self)
    This will mark the messages to be ignored in the tracking issues filter
  • tracking_status(self)
    Generates a complete status tracking of the messages by partner

New fields (0)

No new fields.

Public methods (2)
  • default_get(self, fields)
    @api.model
  • resend_mail_action(self)

New fields (1)
  • failed_message_ids One2many → mail.message
    domain=<expr> string='Failed Messages' args: 'mail.message', 'res_id'
Public methods (1)
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    Add filters for failed messages. These filters will show up on any search views of any model inheriting from ``mail.thread``.

New fields (20)
  • bounce_description Char
    readonly=True
  • bounce_type Char
    readonly=True
  • date Date
    compute='_compute_date' readonly=True store=True
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True
  • error_description Char
    readonly=True
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True
  • message_id Char
    compute='_compute_message_id'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • token Char
    default=<expr> groups='base.group_system' readonly=True string='Security Token'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (11)
  • check_access_rule(self, operation)
    Rely on related messages ACLs
  • create(self, vals_list)
    @api.model_create_multi
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited It can receive a recordset or mapped states dictionary via context. Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • read(self, fields=None, load='_classic_read')
    Override to explicitly call check_access_rule, that is not called by the ORM. It instead directly fetches ir.rules and apply them.
  • smtp_error(self, mail_server, smtp_server, exception)
  • tracking_img_add(self, email)
  • write(self, vals)

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True
  • error_description Char
    readonly=True
  • error_details Text
    readonly=True
  • error_type Char
    readonly=True
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')]
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (10)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_sent(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (1)
  • mail_tracking_show_aliases Boolean
    default=False string='Show Aliases in Mail Tracking'
Public methods (0)

No public methods.

New fields (2)
  • mail_tracking_email_max_age_days Integer
    config_parameter='mail_tracking.mail_tracking_email_max_age_days' help='If set as positive integer enables the deletion of old mail tracking records to reduce the database size.' args: 'Max age in days of mail tracking email records'
  • mail_tracking_show_aliases Boolean
    readonly=False related='company_id.mail_tracking_show_aliases'
Public methods (0)

No public methods.

New fields (2)
  • email_score Float
    compute='_compute_email_score_and_count' readonly=True
  • tracking_emails_count Integer
    compute='_compute_email_score_and_count' readonly=True
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/16.0/mail_tracking
VERSION
VERSION 1.0.8
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSHolger Brunn, Weblate, OCA-git-bot, David, oca-ci, payen000, CarlosRoca13, Vincent Hatakeyama, NiChrDeuse
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:53:55
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_message_form mail.message field Inherits mail.mail_message_view_form
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (11)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_ssl_certificate=None, smtp_ssl_private_key=None, smtp_debug=False, smtp_session=None)
    @api.model

New fields (0)

No new fields.

Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_aliases(self)
    @api.model@tools.ormcache()
  • unlink(self)
  • write(self, vals)

New fields (1)
  • email_bounced Boolean
    index=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    Inherit this method to make any other actions to the model that inherit the mixin
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • email_cc Char
    help='Additional recipients that receive a "Carbon Copy" of the e-mail' args: 'Cc'
  • email_to Char
    help='Raw TO recipients' args: 'To'
  • is_failed_message Boolean
    compute='_compute_is_failed_message' search='_search_is_failed_message'
  • mail_tracking_ids One2many → mail.tracking.email
    auto_join=True comodel_name='mail.tracking.email' inverse_name='mail_message_id' string='Mail Trackings'
  • mail_tracking_needs_action Boolean
    default=False help='The message tracking will be considered to filter tracking issues'
Public methods (8)
  • get_failed_count(self)
    @api.model
    Gets the number of failed messages used on discuss mailbox item
  • get_failed_messages(self)
    Returns the list of failed messages to be used by the failed_messages widget
  • get_failed_messsage_info(self, ids, model)
    @api.model
  • get_failed_states(self)
    @api.model
    The 'failed' states of the message
  • message_format(self, format_reply=True)
    Preare values to be used by the chatter widget
  • set_all_as_reviewed(self)
    @api.model
    Sets all messages in the given domain as reviewed. Used by Discuss
  • set_need_action_done(self)
    Set message tracking action as done This will mark them to be ignored in the tracking issues filter.
  • tracking_status(self)
    Generates a complete status tracking of the messages by partner

New fields (0)

No new fields.

Public methods (2)
  • default_get(self, fields)
    @api.model
  • resend_mail_action(self)

New fields (1)
  • failed_message_ids One2many → mail.message
    domain=<expr> string='Failed Messages' args: 'mail.message', 'res_id'
Public methods (1)
  • get_view(self, view_id=None, view_type='form', **options)
    @api.model
    Add filters for failed messages. These filters will show up on any search views of any model inheriting from ``mail.thread``.

New fields (20)
  • bounce_description Char
    readonly=True
  • bounce_type Char
    readonly=True
  • date Date
    compute='_compute_date' readonly=True store=True
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True
  • error_description Char
    readonly=True
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True
  • message_id Char
    compute='_compute_message_id'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • token Char
    default=<expr> groups='base.group_system' readonly=True string='Security Token'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (11)
  • check_access_rule(self, operation)
    Rely on related messages ACLs
  • create(self, vals_list)
    @api.model_create_multi
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited It can receive a recordset or mapped states dictionary via context. Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • read(self, fields=None, load='_classic_read')
    Override to explicitly call check_access_rule, that is not called by the ORM. It instead directly fetches ir.rules and apply them.
  • smtp_error(self, mail_server, smtp_server, exception)
  • tracking_img_add(self, email)
  • write(self, vals)

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True
  • error_description Char
    readonly=True
  • error_details Text
    readonly=True
  • error_type Char
    readonly=True
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')]
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (10)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_sent(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (2)
  • email_score Float
    compute='_compute_email_score_and_count' readonly=True
  • tracking_emails_count Integer
    compute='_compute_email_score_and_count' readonly=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/15.0/mail_tracking
VERSION
VERSION 3.1.0
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSGitHub, OCA Transbot, sergio-teruel, Thierry Ducrest, Weblate, OCA-git-bot, David, oca-ci, Jasmin Solanki, jb, dhx
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:46:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_message_form mail.message field Inherits mail.mail_message_view_form
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (11)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_ssl_certificate=None, smtp_ssl_private_key=None, smtp_debug=False, smtp_session=None)
    @api.model

New fields (0)

No new fields.

Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_aliases(self)
    @api.model@tools.ormcache()
  • unlink(self)
  • write(self, vals)

New fields (1)
  • email_bounced Boolean
    index=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    Inherit this method to make any other actions to the model that inherit the mixin
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • email_cc Char
    help='Additional recipients that receive a "Carbon Copy" of the e-mail' args: 'Cc'
  • email_to Char
    help='Raw TO recipients' args: 'To'
  • is_failed_message Boolean
    compute='_compute_is_failed_message' search='_search_is_failed_message'
  • mail_tracking_ids One2many → mail.tracking.email
    auto_join=True comodel_name='mail.tracking.email' inverse_name='mail_message_id' string='Mail Trackings'
  • mail_tracking_needs_action Boolean
    default=False help='The message tracking will be considered to filter tracking issues'
Public methods (8)
  • get_failed_count(self)
    @api.model
    Gets the number of failed messages used on discuss mailbox item
  • get_failed_messages(self)
    Returns the list of failed messages to be used by the failed_messages widget
  • get_failed_messsage_info(self, ids, model)
    @api.model
  • get_failed_states(self)
    @api.model
    The 'failed' states of the message
  • message_format(self, format_reply=True)
    Preare values to be used by the chatter widget
  • set_all_as_reviewed(self)
    @api.model
    Sets all messages in the given domain as reviewed. Used by Discuss
  • set_need_action_done(self)
    Set message tracking action as done This will mark them to be ignored in the tracking issues filter.
  • tracking_status(self)
    Generates a complete status tracking of the messages by partner

New fields (0)

No new fields.

Public methods (2)
  • default_get(self, fields)
    @api.model
  • resend_mail_action(self)

New fields (1)
  • failed_message_ids One2many → mail.message
    domain=<expr> string='Failed Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (20)
  • bounce_description Char
    readonly=True
  • bounce_type Char
    readonly=True
  • date Date
    compute='_compute_date' readonly=True store=True
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True
  • error_description Char
    readonly=True
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True string='Message'
  • message_id Char
    compute='_compute_message_id'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • token Char
    default=<expr> groups='base.group_system' readonly=True string='Security Token'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (11)
  • check_access_rule(self, operation)
    Rely on related messages ACLs
  • create(self, vals_list)
    @api.model_create_multi
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited It can receive a recordset or mapped states dictionary via context. Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • read(self, fields=None, load='_classic_read')
    Override to explicitly call check_access_rule, that is not called by the ORM. It instead directly fetches ir.rules and apply them.
  • smtp_error(self, mail_server, smtp_server, exception)
  • tracking_img_add(self, email)
  • write(self, vals)

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True
  • error_description Char
    readonly=True
  • error_details Text
    readonly=True
  • error_type Char
    readonly=True
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')]
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (10)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_sent(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (2)
  • email_score Float
    compute='_compute_email_score_and_count' readonly=True
  • tracking_emails_count Integer
    compute='_compute_email_score_and_count' readonly=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/14.0/mail_tracking
VERSION
VERSION 3.2.1
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Moisés López, Enric Tobella, OCA Transbot, Thierry Ducrest, oca-travis, Weblate, OCA-git-bot, houssine, David, Stephane Mangin, Fernanda Hernández, Cyril VINH-TUNG, oca-ci, oca-git-bot, Henry Backman, Areeb Siddiqi, Robert Khayat, angelJuaGar
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:41:08
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
assets_backend mail_tracking assets ir.ui.view qweb Inherits web.assets_backend
res_config_settings_view_form res.config.settings.view.form.inherit.mail.tracking res.config.settings div Inherits mail.res_config_settings_view_form
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_message_form mail.message field Inherits mail.mail_message_view_form
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (13)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_debug=False, smtp_session=None)
    @api.model

New fields (0)

No new fields.

Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_aliases(self)
    @api.model@tools.ormcache()
  • unlink(self)
  • write(self, vals)

New fields (1)
  • email_bounced Boolean
    index=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    Inherit this method to make any other actions to the model that inherit the mixin
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • email_cc Char
    help='Additional recipients that receive a "Carbon Copy" of the e-mail' args: 'Cc'
  • email_to Char
    help='Raw TO recipients' args: 'To'
  • is_failed_message Boolean
    compute='_compute_is_failed_message' search='_search_is_failed_message'
  • mail_tracking_ids One2many → mail.tracking.email
    auto_join=True comodel_name='mail.tracking.email' inverse_name='mail_message_id' string='Mail Trackings'
  • mail_tracking_needs_action Boolean
    default=False help='The message tracking will be considered to filter tracking issues'
Public methods (8)
  • get_failed_count(self)
    @api.model
    Gets the number of failed messages used on discuss mailbox item
  • get_failed_messages(self)
    Returns the list of failed messages to be used by the failed_messages widget
  • get_failed_messsage_info(self, ids, model)
    @api.model
  • get_failed_states(self)
    @api.model
    The 'failed' states of the message
  • message_format(self)
    Preare values to be used by the chatter widget
  • set_all_as_reviewed(self)
    @api.model
    Sets all messages in the given domain as reviewed. Used by Discuss
  • set_need_action_done(self)
    Set message tracking action as done This will mark them to be ignored in the tracking issues filter.
  • tracking_status(self)
    Generates a complete status tracking of the messages by partner

New fields (0)

No new fields.

Public methods (2)
  • default_get(self, fields)
    @api.model
  • resend_mail_action(self)

New fields (1)
  • failed_message_ids One2many → mail.message
    domain=<expr> string='Failed Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (20)
  • bounce_description Char
    readonly=True string='Bounce description'
  • bounce_type Char
    readonly=True string='Bounce type'
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True string='Display name'
  • error_description Char
    readonly=True string='Error description'
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True string='Error type'
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True
  • message_id Char
    compute='_compute_message_id'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True string='State' args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True string='Time'
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • token Char
    default=<expr> groups='base.group_system' readonly=True string='Security Token'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (11)
  • check_access_rule(self, operation)
    Rely on related messages ACLs
  • create(self, vals_list)
    @api.model_create_multi
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited It can receive a recordset or mapped states dictionary via context. Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • read(self, fields=None, load='_classic_read')
    Override to explicitly call check_access_rule, that is not called by the ORM. It instead directly fetches ir.rules and apply them.
  • smtp_error(self, mail_server, smtp_server, exception)
  • tracking_img_add(self, email)
  • write(self, vals)

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • error_description Char
    readonly=True string='Error description'
  • error_details Text
    readonly=True string='Error details'
  • error_type Char
    readonly=True string='Error type'
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')] string='Event type'
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True string='Recipient'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True string='Time'
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True string='User agent'
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (10)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_sent(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (1)
  • mail_tracking_show_aliases Boolean
    default=False string='Show Aliases in Mail Tracking'
Public methods (0)

No public methods.

New fields (2)
  • mail_tracking_email_max_age_days Integer
    config_parameter='mail_tracking.mail_tracking_email_max_age_days' help='If set as positive integer enables the deletion of old mail tracking records to reduce the database size.' args: 'Max age in days of mail tracking email records'
  • mail_tracking_show_aliases Boolean
    readonly=False related='company_id.mail_tracking_show_aliases'
Public methods (0)

No public methods.

New fields (2)
  • email_score Float
    compute='_compute_email_score_and_count' readonly=True
  • tracking_emails_count Integer
    compute='_compute_email_score_and_count' readonly=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/13.0/mail_tracking
VERSION
VERSION 2.0.1
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, Jairo Llopis, david, Uku Lagle, Alexandre Díaz, OCA Transbot, Alexandre D. Díaz, ahenriquez, oca-travis, Weblate, OCA-git-bot, David, oca-ci, sugapablo, nmadhoc
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:34:18
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
assets_backend mail_tracking assets ir.ui.view qweb Inherits web.assets_backend
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_message_form mail.message field Inherits mail.view_message_form
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (11)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
  • write(self, vals)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_debug=False, smtp_session=None)
    @api.model

New fields (0)

No new fields.

Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_aliases(self)
    @api.model@tools.ormcache()
  • unlink(self)
  • write(self, vals)

New fields (1)
  • email_bounced Boolean
    index=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    Inherit this method to make any other actions to the model that inherit the mixin
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • email_cc Char
    help='Additional recipients that receive a "Carbon Copy" of the e-mail' args: 'Cc'
  • email_to Char
    help='Raw TO recipients' args: 'To'
  • is_failed_message Boolean
    compute='_compute_is_failed_message' search='_search_is_failed_message'
  • mail_tracking_ids One2many → mail.tracking.email
    auto_join=True comodel_name='mail.tracking.email' inverse_name='mail_message_id' string='Mail Trackings'
  • mail_tracking_needs_action Boolean
    default=False help='The message tracking will be considered to filter tracking issues'
Public methods (6)
  • get_failed_count(self)
    @api.model
    Gets the number of failed messages used on discuss mailbox item
  • get_failed_messages(self)
    Returns the list of failed messages to be used by the failed_messages widget
  • get_failed_states(self)
    @api.model
    The 'failed' states of the message
  • set_all_as_reviewed(self)
    @api.model
    Sets all messages in the given domain as reviewed. Used by Discuss
  • set_need_action_done(self)
    Set message tracking action as done This will mark them to be ignored in the tracking issues filter.
  • tracking_status(self)
    Generates a complete status tracking of the messages by partner

New fields (0)

No new fields.

Public methods (2)
  • default_get(self, fields)
    @api.model
  • resend_mail_action(self)

New fields (1)
  • failed_message_ids One2many → mail.message
    domain=<expr> string='Failed Messages' args: 'mail.message', 'res_id'
Public methods (0)

No public methods.

New fields (20)
  • bounce_description Char
    readonly=True string='Bounce description'
  • bounce_type Char
    readonly=True string='Bounce type'
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True string='Display name'
  • error_description Char
    readonly=True string='Error description'
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True string='Error type'
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True string='Message'
  • message_id Char
    compute='_compute_message_id'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True string='State' args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True string='Time'
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • token Char
    default=<expr> groups='base.group_system' readonly=True string='Security Token'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (11)
  • check_access_rule(self, operation)
    Rely on related messages ACLs
  • create(self, vals_list)
    @api.model_create_multi
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited It can receive a recordset or mapped states dictionary via context. Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • read(self, fields=None, load='_classic_read')
    Override to explicitly call check_access_rule, that is not called by the ORM. It instead directly fetches ir.rules and apply them.
  • smtp_error(self, mail_server, smtp_server, exception)
  • tracking_img_add(self, email)
  • write(self, vals)

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • error_description Char
    readonly=True string='Error description'
  • error_details Text
    readonly=True string='Error details'
  • error_type Char
    readonly=True string='Error type'
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')] string='Event type'
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True string='Recipient'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True string='Time'
  • timestamp Float
    digits='MailTracking Timestamp' readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True string='User agent'
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (10)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_sent(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (2)
  • email_score Float
    compute='_compute_email_score_and_count' readonly=True
  • tracking_emails_count Integer
    compute='_compute_email_score_and_count' readonly=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/12.0/mail_tracking
VERSION
VERSION 3.1.0
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSeLBati, Pedro M. Baeza, Sylvain LE GAL, Jairo Llopis, Uku Lagle, Alexandre Díaz, OCA Transbot, Alexandre D. Díaz, oca-travis, Weblate, OCA-git-bot, Tom Blauwendraat, Wolfgang Pichler, ernesto
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:29:23
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - decimal_precision
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (10)
XML IDNameModelTypeStatus
assets_backend mail_tracking assets ir.ui.view qweb Inherits web.assets_backend
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_message_form mail.message field Inherits mail.view_message_form
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (11)

New fields (0)

No new fields.

Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_debug=False, smtp_session=None)
    @api.model

New fields (0)

No new fields.

Public methods (4)
  • create(self, vals_list)
    @api.model_create_multi
  • get_aliases(self)
    @api.model@tools.ormcache()
  • unlink(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (1)
  • email_bounced Boolean
    index=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    @api.multi
    Inherit this method to make any other actions to the model that inherit the mixin
  • write(self, vals)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • email_cc Char
    help='Additional recipients that receive a "Carbon Copy" of the e-mail' args: 'Cc'
  • email_to Char
    help='Raw TO recipients' args: 'To'
  • is_failed_message Boolean
    compute='_compute_is_failed_message' search='_search_is_failed_message'
  • mail_tracking_ids One2many → mail.tracking.email
    auto_join=True comodel_name='mail.tracking.email' inverse_name='mail_message_id' string='Mail Trackings'
  • mail_tracking_needs_action Boolean
    default=False help='The message tracking will be considered to filter tracking issues'
Public methods (6)
  • get_failed_count(self)
    @api.model
    Gets the number of failed messages used on discuss mailbox item
  • get_failed_messages(self)
    @api.multi
    Returns the list of failed messages to be used by the failed_messages widget
  • get_failed_states(self)
    @api.model
    The 'failed' states of the message
  • set_all_as_reviewed(self)
    @api.model
    Sets all messages in the given domain as reviewed. Used by Discuss
  • set_need_action_done(self)
    @api.multi
    Set message tracking action as done This will mark them to be ignored in the tracking issues filter.
  • tracking_status(self)
    Generates a complete status tracking of the messages by partner

New fields (0)

No new fields.

Public methods (2)
  • default_get(self, fields)
    @api.model
  • resend_mail_action(self)
    @api.multi

New fields (1)
  • failed_message_ids One2many → mail.message
    domain=<expr> string='Failed Messages' args: 'mail.message', 'res_id'
Public methods (2)
  • message_get_suggested_recipients(self)
    @api.multi
    Adds email 'extra' recipients as suggested recipients. If the recipient has a res.partner, use it.
  • message_post(self, *args, **kwargs)
    @api.multi@api.returns('self', <expr>)
    Adds CC recipient to the message. Because Odoo implementation avoid store 'from, to, cc' recipients we ensure that this information its written into the mail.message record.

New fields (19)
  • bounce_description Char
    readonly=True string='Bounce description'
  • bounce_type Char
    readonly=True string='Bounce type'
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True string='Display name'
  • error_description Char
    readonly=True string='Error description'
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True string='Error type'
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True string='Message'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True string='State' args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • token Char
    default=<expr> groups='base.group_system' readonly=True string='Security Token'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (9)
  • create(self, vals_list)
    @api.model_create_multi
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited It can receive a recordset or mapped states dictionary via context. Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
    @api.multi
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • smtp_error(self, mail_server, smtp_server, exception)
    @api.multi
  • tracking_img_add(self, email)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • error_description Char
    readonly=True string='Error description'
  • error_details Text
    readonly=True string='Error details'
  • error_type Char
    readonly=True string='Error type'
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')] string='Event type'
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True string='Recipient'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True string='User agent'
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (10)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_sent(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (2)
  • email_score Float
    compute='_compute_email_score' readonly=True
  • tracking_emails_count Integer
    compute='_compute_tracking_emails_count' readonly=True
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/11.0/mail_tracking
VERSION
VERSION 3.2.1
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSPedro M. Baeza, GitHub, Jairo Llopis, Denis Roussel, david, Alexandre Díaz, OCA Transbot, oca-travis, Weblate, OCA-git-bot, David, hveficent, Piotr Kowalski
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:24:01
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - decimal_precision
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (11)
XML IDNameModelTypeStatus
assets_backend mail_tracking assets ir.ui.view qweb Inherits web.assets_backend
email_compose_message_wizard_form mail.compose.message field Inherits mail.email_compose_message_wizard_form
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_message_form mail.message field Inherits mail.view_message_form
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (8)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_debug=False, smtp_session=None)
    @api.model

New fields (1)
  • hide_followers Boolean
    default=False string='Hide follower message'
Public methods (2)
  • get_record_data(self, values)
    @api.model
    Overwrite 'partner_ids' if enable 'hide_followers' on mail composer
  • send_mail(self, auto_commit=False)
    @api.multi
    This method marks as reviewed the message when using the 'Retry' option in the mail_failed_message widget

New fields (0)

No new fields.

Public methods (1)
  • send_get_email_dict(self, partner=None)
    Creates the mail.tracking.email record and adds the image tracking to the email

New fields (4)
  • email_cc Char
    help='Additional recipients that receive a "Carbon Copy" of the e-mail' args: 'Cc'
  • is_failed_message Boolean
    compute='_compute_is_failed_message'
  • mail_tracking_ids One2many → mail.tracking.email
    comodel_name='mail.tracking.email' inverse_name='mail_message_id' string='Mail Trackings'
  • mail_tracking_needs_action Boolean
    default=False help='The message tracking will be considered to filter tracking issues'
Public methods (7)
  • get_failed_count(self)
    @api.model
    Gets the number of failed messages used on discuss mailbox item
  • get_failed_messages(self)
    @api.multi
    Returns the list of failed messages to be used by the failed_messages widget
  • get_failed_states(self)
    The 'failed' states of the message
  • message_fetch(self, domain, limit=20)
    @api.model
    Force domain to be used on discuss thread messages
  • message_format(self)
    @api.multi
    Adds 'failed_recipients' to display on 'failed_messages' widget
  • toggle_tracking_status(self)
    @api.multi
    Toggle message tracking action needed to ignore them in the tracking issues filter
  • tracking_status(self)
    Generates a complete status tracking of the messages by partner

New fields (1)
  • failed_message_ids One2many → mail.message
    auto_join=True domain=<expr> string='Failed Messages' args: 'mail.message', 'res_id'
Public methods (2)
  • message_get_suggested_recipients(self)
    @api.multi
    Adds email Cc recipients as suggested recipients. If the recipient have an res.partner uses it.
  • message_post(self, body='', subject=None, message_type='notification', subtype=None, parent_id=False, attachments=None, content_subtype='html', **kwargs)
    @api.multi@api.returns('self', <expr>)
    Adds CC recipient to the message. Because Odoo implementation avoid store cc recipients we ensure that this information its written into the mail.message record.

New fields (18)
  • bounce_description Char
    readonly=True string='Bounce description'
  • bounce_type Char
    readonly=True string='Bounce type'
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True string='Display name'
  • error_description Char
    readonly=True string='Error description'
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True string='Error type'
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True string='Message'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True string='State' args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (8)
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited It can receive a recordset or mapped states dictionary via context. Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
    @api.multi
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • smtp_error(self, mail_server, smtp_server, exception)
    @api.multi
  • tracking_img_add(self, email)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • error_description Char
    readonly=True string='Error description'
  • error_details Text
    readonly=True string='Error details'
  • error_type Char
    readonly=True string='Error type'
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')] string='Event type'
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True string='Recipient'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True string='User agent'
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (9)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (3)
  • email_bounced Boolean
    index=True
  • email_score Float
    compute='_compute_email_score' readonly=True
  • tracking_emails_count Integer
    compute='_compute_tracking_emails_count' readonly=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    @api.multi
    Inherit this method to make any other actions to partners
  • write(self, vals)
REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/10.0/mail_tracking
VERSION
VERSION 1.1.2
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSHolger Brunn, Pedro M. Baeza, Damien Bouvy, Jairo Llopis, OCA Transbot, Thierry Ducrest, Emanuel Cino, oca-travis, Weblate, OCA-git-bot
WEBSITE
WEBSITEhttps://github.com/OCA/social
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:20:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - decimal_precision
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
assets_backend mail_tracking assets ir.ui.view qweb Inherits web.assets_backend
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (6)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_debug=False)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • send_get_email_dict(self, partner=None)

New fields (0)

No new fields.

Public methods (1)
  • tracking_status(self)

New fields (18)
  • bounce_description Char
    readonly=True string='Bounce description'
  • bounce_type Char
    readonly=True string='Bounce type'
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • display_name Char
    compute='_compute_tracking_display_name' readonly=True store=True string='Display name'
  • error_description Char
    readonly=True string='Error description'
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True string='Error type'
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' index=True readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' index=True readonly=True string='Message'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True string='State' args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (7)
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    Default email score algorimth. Ready to be inherited Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
    @api.multi
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • smtp_error(self, mail_server, smtp_server, exception)
    @api.multi
  • tracking_img_add(self, email)
    @api.multi

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • error_description Char
    readonly=True string='Error description'
  • error_details Text
    readonly=True string='Error details'
  • error_type Char
    readonly=True string='Error type'
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')] string='Event type'
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True string='Recipient'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' index=True ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True string='User agent'
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (9)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (3)
  • email_bounced Boolean
    index=True
  • email_score Float
    compute='_compute_email_score' readonly=True
  • tracking_emails_count Integer
    compute='_compute_tracking_emails_count' readonly=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    @api.multi
    Inherit this method to make any other actions to partners
  • write(self, vals)
REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/9.0/mail_tracking
VERSION
VERSION 3.0.2
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSHolger Brunn, Pedro M. Baeza, GitHub, Carlos Dauden, cubells, OCA Transbot, Juan Jose Scarafia, oca-travis, Weblate, Antonio Espinosa
WEBSITE
WEBSITEhttp://www.tecnativa.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:15:23
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - decimal_precision
    - base
    - mail
    - base_setup
    - web_kanban
    - web
    - bus
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
assets_backend mail_tracking assets ir.ui.view qweb Inherits web.assets_backend
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (6)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_debug=False)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • send_get_email_dict(self, partner=None)
    @api.multi

New fields (0)

No new fields.

Public methods (1)
  • tracking_status(self)
    @api.multi

New fields (18)
  • bounce_description Char
    readonly=True string='Bounce description'
  • bounce_type Char
    readonly=True string='Bounce type'
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • display_name Char
    compute='_compute_display_name' readonly=True store=True string='Display name'
  • error_description Char
    readonly=True string='Error description'
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True string='Error type'
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' readonly=True string='Message'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True string='State' args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (7)
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    @api.multi
    Default email score algorimth. Ready to be inherited Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
    @api.multi
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • smtp_error(self, mail_server, smtp_server, exception)
    @api.multi
  • tracking_img_add(self, email)
    @api.multi

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • error_description Char
    readonly=True string='Error description'
  • error_details Text
    readonly=True string='Error details'
  • error_type Char
    readonly=True string='Error type'
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')] string='Event type'
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True string='Recipient'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True string='User agent'
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (9)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (3)
  • email_bounced Boolean
    index=True
  • email_score Float
    compute='_compute_email_score' readonly=True
  • tracking_emails_count Integer
    compute='_compute_tracking_emails_count' readonly=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    @api.multi
    Inherit this method to make any other actions to partners
  • write(self, vals)
    @api.multi
REPOSITORY
REPOSITORYOCA/social
GIT
GIThttps://github.com/OCA/social.git
GIT FOLDER
GIT FOLDERhttps://github.com/OCA/social/tree/8.0/mail_tracking
VERSION
VERSION 4.0.0
CATEGORY
CATEGORYSocial Network
LICENSE
LICENSEAGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSTecnativa, Odoo Community Association (OCA)
MAINTAINERS
MAINTAINERSTecnativa, Odoo Community Association (OCA)
COMMITTERS
COMMITTERSHolger Brunn, Pedro M. Baeza, GitHub, Carlos Dauden, Stéphane Bidoul (ACSONE), Alex Comba, OCA Transbot, oca-travis, Weblate, Antonio Espinosa
WEBSITE
WEBSITEhttp://www.tecnativa.com
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:11:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - decimal_precision
    - base
    - mail
    - base_setup
    - web_kanban
    - web
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (9)
XML IDNameModelTypeStatus
assets_backend mail_tracking assets ir.ui.view qweb Inherits web.assets_backend
view_mail_tracking_email_form mail.tracking.email.form mail.tracking.email form New
view_mail_tracking_email_search mail.tracking.email.search mail.tracking.email search New
view_mail_tracking_email_tree mail.tracking.email.tree mail.tracking.email tree New
view_mail_tracking_event_form mail.tracking.event.form mail.tracking.event form New
view_mail_tracking_event_search mail.tracking.event.search mail.tracking.event search New
view_mail_tracking_event_tree mail.tracking.event.tree mail.tracking.event tree New
view_partner_form Partner Form with tracking emails res.partner div Inherits base.view_partner_form
view_res_partner_filter Filter bounced partners res.partner filter Inherits base.view_res_partner_filter
Models touched (6)

New fields (0)

No new fields.

Public methods (2)
  • build_email(self, email_from, email_to, subject, body, email_cc=None, email_bcc=None, reply_to=False, attachments=None, message_id=None, references=None, object_id=False, subtype='plain', headers=None, body_alternative=None, subtype_alternative='plain')
  • send_email(self, message, mail_server_id=None, smtp_server=None, smtp_port=None, smtp_user=None, smtp_password=None, smtp_encryption=None, smtp_debug=False)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • send_get_email_dict(self, mail, partner=None)
    @api.model

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (18)
  • bounce_description Char
    readonly=True string='Bounce description'
  • bounce_type Char
    readonly=True string='Bounce type'
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • display_name Char
    compute='_compute_display_name' readonly=True store=True string='Display name'
  • error_description Char
    readonly=True string='Error description'
  • error_smtp_server Char
    readonly=True string='Error SMTP server'
  • error_type Char
    readonly=True string='Error type'
  • mail_id Many2one → mail.mail
    comodel_name='mail.mail' readonly=True string='Email'
  • mail_message_id Many2one → mail.message
    comodel_name='mail.message' readonly=True string='Message'
  • name Char
    index=True readonly=True string='Subject'
  • partner_id Many2one → res.partner
    comodel_name='res.partner' readonly=True string='Partner'
  • recipient Char
    readonly=True string='Recipient email'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • sender Char
    readonly=True string='Sender email'
  • state Selection
    default=False help=" * The 'Error' status indicates that there was an error when trying to sent the email, for example, 'No valid recipient'\n * The 'Sent' status indicates that message was succesfully sent via outgoing email server (SMTP).\n * The 'Delivered' status indicates that message was succesfully delivered to recipient Mail Exchange (MX) server.\n * The 'Opened' status indicates that message was opened or clicked by recipient.\n * The 'Rejected' status indicates that recipient email address is blacklisted by outgoing email server (SMTP). It is recomended to delete this email address.\n * The 'Spam' status indicates that outgoing email server (SMTP) consider this message as spam.\n * The 'Unsubscribed' status indicates that recipient has requested to be unsubscribed from this message.\n * The 'Bounced' status indicates that message was bounced by recipient Mail Exchange (MX) server.\n * The 'Soft bounced' status indicates that message was soft bounced by recipient Mail Exchange (MX) server.\n" index=True readonly=True string='State' args: [('error', 'Error'), ('deferred', 'Deferred'), ('sent', 'Sent'), ('delivered', 'Delivered'), ('opened', 'Opened'), ('rejected', 'Rejected'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('bounced', 'Bounced'), ('soft-bounced', 'Soft bounced')]
  • time Datetime
    index=True readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • tracking_event_ids One2many → mail.tracking.event
    comodel_name='mail.tracking.event' inverse_name='tracking_email_id' readonly=True string='Tracking events'
Public methods (7)
  • email_is_bounced(self, email)
    @api.model
  • email_score(self)
    @api.multi
    Default email score algorimth. Ready to be inherited Must return a value beetwen 0.0 and 100.0 - Bad reputation: Value between 0 and 50.0 - Unknown reputation: Value 50.0 - Good reputation: Value between 50.0 and 100.0
  • email_score_from_email(self, email)
    @api.model
  • event_create(self, event_type, metadata)
    @api.multi
  • event_process(self, request, post, metadata, event_type=None)
    @api.model
  • smtp_error(self, mail_server, smtp_server, exception)
    @api.multi
  • tracking_img_add(self, email)
    @api.multi

New fields (19)
  • date Date
    compute='_compute_date' readonly=True store=True string='Date'
  • error_description Char
    readonly=True string='Error description'
  • error_details Text
    readonly=True string='Error details'
  • error_type Char
    readonly=True string='Error type'
  • event_type Selection
    readonly=True selection=[('sent', 'Sent'), ('delivered', 'Delivered'), ('deferral', 'Deferral'), ('hard_bounce', 'Hard bounce'), ('soft_bounce', 'Soft bounce'), ('open', 'Open'), ('click', 'Clicked'), ('spam', 'Spam'), ('unsub', 'Unsubscribed'), ('reject', 'Rejected')] string='Event type'
  • ip Char
    readonly=True string='User IP'
  • mobile Boolean
    readonly=True string='Is mobile?'
  • os_family Char
    readonly=True string='Operating system family'
  • recipient Char
    readonly=True string='Recipient'
  • recipient_address Char
    compute='_compute_recipient_address' index=True readonly=True store=True string='Recipient email address'
  • smtp_server Char
    readonly=True string='SMTP server'
  • time Datetime
    readonly=True string='Time'
  • timestamp Float
    digits=dp.get_precision('MailTracking Timestamp') readonly=True string='UTC timestamp'
  • tracking_email_id Many2one → mail.tracking.email
    comodel_name='mail.tracking.email' ondelete='cascade' readonly=True required=True string='Message'
  • ua_family Char
    readonly=True string='User agent family'
  • ua_type Char
    readonly=True string='User agent type'
  • url Char
    readonly=True string='Clicked URL'
  • user_agent Char
    readonly=True string='User agent'
  • user_country_id Many2one → res.country
    comodel_name='res.country' readonly=True string='User country'
Public methods (9)
  • process_click(self, tracking_email, metadata)
    @api.model
  • process_deferral(self, tracking_email, metadata)
    @api.model
  • process_delivered(self, tracking_email, metadata)
    @api.model
  • process_hard_bounce(self, tracking_email, metadata)
    @api.model
  • process_open(self, tracking_email, metadata)
    @api.model
  • process_reject(self, tracking_email, metadata)
    @api.model
  • process_soft_bounce(self, tracking_email, metadata)
    @api.model
  • process_spam(self, tracking_email, metadata)
    @api.model
  • process_unsub(self, tracking_email, metadata)
    @api.model

New fields (3)
  • email_bounced Boolean
    index=True
  • email_score Float
    compute='_compute_email_score' readonly=True
  • tracking_emails_count Integer
    compute='_compute_tracking_emails_count' readonly=True
Public methods (2)
  • email_bounced_set(self, tracking_emails, reason, event=None)
    @api.multi
    Inherit this method to make any other actions to partners
  • write(self, vals)
    @api.multi