Email Marketing

mass_mailing
REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/19.0/mass_mailing
VERSION
VERSION 2.7
CATEGORY
CATEGORYMarketing/Email Marketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOdoo S.A.
MAINTAINERS
MAINTAINERSOdoo S.A.
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Thibault Delavallée, David Monjoie, Xavier Morel, Aaron Bohy, Lucas Perais (lpe), qsm-odoo, Jorge Pinna Puissant, Julien Castiaux, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Sébastien Theys, std-odoo, Tiffany Chang (tic), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, abd-msyukyu-odoo, William Braeckman, Benjamin Vray, Benoit Socias, Florian Vranckx, Nicolas Bayet, luvi, Renaud Thiry, alsh-odoo, Louis Wicket (wil), Maximilien (malb), Victor Piryns (pivi), Julien (jula), amdi-odoo, Pierre-Yves Dufays, Robin Lejeune (role), Dylan Kiss (dyki), Mayurrajsinh Rathod, Mahdi Cheikh Rouhou (macr), omra-odoo, Walid (wasa), Deependra Solanki, visp-odoo, Rodolpho Lima, aath-odoo, Rémi - Le Filament, mano-odoo, guce, yagp-odoo, Pierre Pulinckx (PIPU), Ezzuldin Zaky (ezza), Michaël Mattiello, Pierre Pulinckx, Bastien PIERRE, Anton Romanova (roan), Panagiotis Kyriakou, Thomas Josse (THJO), Krzysztof Magusiak (krma), Ajit Singh, bikh-odoo, Brett Cutler, pajo, defl, bhna-odoo, mojem, agbr-odoo, Alessandro Lupo, Augustin (duau), Alice Gaudon, saurabh, sbbh-odoo, Séna Nshimiyimana, Kadam Darji, h4818 (ayh), ELCO, chpa-odoo, shmn-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/email-marketing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:51:40
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - contacts
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - html_builder
    - utm
    - link_tracker
    - social_media
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (172)
XML IDNameModelTypeStatus
ab_testing_description Mass Mailing: A/B Test Description ir.ui.view qweb New
digest_mail_main digest_mail_main ir.ui.view qweb Inherits digest.digest_mail_main
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb New
email_designer_themes email_designer_themes ir.ui.view qweb New
link_tracker_click_view_form link.tracker.click.view.form.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_form
link_tracker_click_view_graph link.tracker.click.view.graph.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_graph
link_tracker_click_view_search link.tracker.click.view.search.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_search
link_tracker_click_view_tree link.tracker.click.view.list.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_tree
link_tracker_view_form link.tracker.view.form.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_form
link_tracker_view_search link.tracker.view.search.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_search
link_tracker_view_tree link.tracker.view.list.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_tree
mail_blacklist_view_form mail.blacklist.view.form.inherit.mailing mail.blacklist xpath Inherits mail.mail_blacklist_view_form
mail_blacklist_view_search mail.blacklist.view.search mail.blacklist xpath Inherits mail.mail_blacklist_view_search
mail_blacklist_view_tree mail.blacklist.view.list.inherit.mailing mail.blacklist xpath Inherits mail.mail_blacklist_view_tree
mailing_contact_import_view_form mailing.contact.import.view.form mailing.contact.import form New
mailing_contact_to_list_view_form mailing.contact.to.list.view.form mailing.contact.to.list form New
mailing_contact_view_form mailing.contact.view.form mailing.contact form New
mailing_contact_view_form_split_name mailing.contact.view.form.split.name mailing.contact xpath Inherits mass_mailing.mailing_contact_view_form
mailing_contact_view_graph mailing.contact.view.graph mailing.contact graph New
mailing_contact_view_kanban mailing.contact.view.kanban mailing.contact kanban New
mailing_contact_view_pivot mailing.contact.pivot mailing.contact pivot New
mailing_contact_view_search mailing.contact.view.search mailing.contact search New
mailing_contact_view_tree mailing.contact.view.list mailing.contact list New
mailing_contact_view_tree_split_name mailing.contact.view.list.split.name mailing.contact xpath Inherits mass_mailing.mailing_contact_view_tree
mailing_filter_view_form mailing.filter.view.form mailing.filter form New
mailing_filter_view_search mailing.filter.view.search mailing.filter search New
mailing_filter_view_tree mailing.filter.view.list mailing.filter list New
mailing_list_merge_view_form mailing.list.merge.form mailing.list.merge form New
mailing_list_view_form mailing.list.form mailing.list form New
mailing_list_view_form_simplified mailing.list.form.simplified mailing.list form New
mailing_list_view_kanban mailing.list.view.kanban mailing.list kanban New
mailing_list_view_search mailing.list.view.search mailing.list search New
mailing_list_view_tree mailing.list.view.list mailing.list list New
mailing_mailing_schedule_date_view_form mailing.mailing.schedule.date.view.form mailing.mailing.schedule.date form New
mailing_mailing_view_calendar mailing.mailing.view.calendar mailing.mailing calendar New
mailing_report_deactivated Report Unsubscribed ir.ui.view qweb New
mailing_subscription_optout_view_form mailing.subscription.optout.view.form mailing.subscription.optout form New
mailing_subscription_optout_view_search mailing.subscription.optout.view.search mailing.subscription.optout search New
mailing_subscription_optout_view_tree mailing.subscription.optout.view.list mailing.subscription.optout list New
mailing_subscription_view_form mailing.subscription.view.form mailing.subscription form New
mailing_subscription_view_graph mailing.subscription.view.graph mailing.subscription graph New
mailing_subscription_view_pivot mailing.subscription.view.pivot mailing.subscription pivot New
mailing_subscription_view_search mailing.subscription.view.search mailing.subscription search New
mailing_subscription_view_tree mailing.subscription.view.list mailing.subscription list New
mailing_trace_report_view_graph mailing.trace.report.view.graph mailing.trace.report graph New
mailing_trace_report_view_pivot mailing.trace.report.view.pivot mailing.trace.report pivot New
mailing_trace_report_view_search mailing.trace.report.view.search mailing.trace.report search New
mailing_trace_report_view_tree mailing.trace.report.view.list mailing.trace.report list New
mailing_trace_view_form mailing.trace.view.form mailing.trace form New
mailing_trace_view_search mailing.trace.view.search mailing.trace search New
mailing_trace_view_tree mailing.trace.view.list mailing.trace list New
mailing_trace_view_tree_mail mailing.trace.view.list.mail mailing.trace list New
mailing_view Browser View ir.ui.view qweb New
mailing_view_generic View in Browser ir.ui.view qweb New
mass_mailing.layout Mass Mailing Layout ir.ui.view qweb New
mass_mailing.mass_mailing_kpi_link_trackers Marketing: mailing link trackers statistic ir.ui.view qweb New
mass_mailing.preview_content_mobile mass_mailing.preview_content_mobile ir.ui.view qweb New
mass_mailing.s_content_card_1 Content card ir.ui.view qweb New
mass_mailing.s_content_card_2 Content card ir.ui.view qweb New
mass_mailing.s_content_card_3 Content card ir.ui.view qweb New
mass_mailing.s_content_card_4 Content card ir.ui.view qweb New
mass_mailing.s_content_card_5 Content card ir.ui.view qweb New
mass_mailing.s_content_card_6 Content card ir.ui.view qweb New
mass_mailing.s_content_card_7 Content card ir.ui.view qweb New
mass_mailing.s_mailing_list_advertisement Mailing List ir.ui.view qweb New
mass_mailing.s_snippet_group Snippet Group ir.ui.view qweb New
mass_mailing_mail_layout mass_mailing_mail_layout ir.ui.view qweb New
page_mailing_confirm_unsubscribe page_mailing_confirm_unsubscribe ir.ui.view qweb New
page_mailing_has_unsubscribed page_mailing_has_unsubscribed ir.ui.view qweb New
page_mailing_unsubscribe Unsubscribe ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.mass.mailing res.config.settings xpath Inherits base.res_config_settings_view_form
s_alert Alert ir.ui.view qweb New
s_attributes_horizontal Horizontal Attributes ir.ui.view qweb New
s_author Author ir.ui.view qweb New
s_badge Badge ir.ui.view qweb New
s_blockquote Blockquote ir.ui.view qweb New
s_blog_post_card Blog Post ir.ui.view qweb New
s_blog_title Blog Title ir.ui.view qweb New
s_button Button ir.ui.view qweb New
s_call_to_action Call to Action ir.ui.view qweb New
s_centered_cta_badge Alert Info CTA ir.ui.view qweb New
s_color_blocks_2 Big Boxes ir.ui.view qweb New
s_company_team Team ir.ui.view qweb New
s_company_team_shapes Team Shapes ir.ui.view qweb New
s_comparisons Comparisons ir.ui.view qweb New
s_coupon_code Promo Code ir.ui.view qweb New
s_cover Cover ir.ui.view qweb New
s_cta_badge CTA Badge ir.ui.view qweb New
s_customer_quote Customer Quote ir.ui.view qweb New
s_event Event ir.ui.view qweb New
s_features_column Features Column ir.ui.view qweb New
s_features_grid Features Grid ir.ui.view qweb New
s_features_showcase Feature Showcase with Image ir.ui.view qweb New
s_hr Separator ir.ui.view qweb New
s_hr_title Separator Title ir.ui.view qweb New
s_icon Icon ir.ui.view qweb New
s_image Image ir.ui.view qweb New
s_image_text Image - Text ir.ui.view qweb New
s_inline_text Text ir.ui.view qweb New
s_link_list Link List ir.ui.view qweb New
s_mail_block_footer_one_liner Social + Footer + Separator ir.ui.view qweb New
s_mail_block_footer_social Social + Footer ir.ui.view qweb New
s_mail_block_footer_social_and_logo Social + Logo ir.ui.view qweb New
s_mail_block_footer_social_left Social + Footer ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_logo_and_button s_mail_block_header_logo_and_button ir.ui.view qweb New
s_mail_block_header_logo_and_inline_menu Logo + Inline Menu ir.ui.view qweb New
s_mail_block_header_logo_and_stacked_menu Logo + Stacked Menu ir.ui.view qweb New
s_mail_block_header_logo_col Company Logo with Dates and Issues ir.ui.view qweb New
s_mail_block_header_menu s_mail_block_header_menu ir.ui.view qweb New
s_mail_block_header_name_and_button Company Name and Log In Button ir.ui.view qweb New
s_mail_block_header_name_and_inline_menu Company Name and Menu ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_header_view View Online ir.ui.view qweb New
s_masonry_block Masonry ir.ui.view qweb New
s_masonry_block_alternation_image_text_template s_masonry_block_alternation_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_template s_masonry_block_alternation_text_image_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_text_template s_masonry_block_alternation_text_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_template s_masonry_block_alternation_text_template ir.ui.view qweb New
s_masonry_block_default_template s_masonry_block_default_template ir.ui.view qweb New
s_masonry_block_image_texts_image_template s_masonry_block_image_texts_image_template ir.ui.view qweb New
s_masonry_block_images_template s_masonry_block_images_template ir.ui.view qweb New
s_masonry_block_mosaic_template s_masonry_block_mosaic_template ir.ui.view qweb New
s_masonry_block_reversed_template s_masonry_block_reversed_template ir.ui.view qweb New
s_masonry_block_texts_image_texts_template s_masonry_block_texts_image_texts_template ir.ui.view qweb New
s_media_list Media List ir.ui.view qweb New
s_membership_advertisement Membership Advertisement ir.ui.view qweb New
s_numbers Numbers ir.ui.view qweb New
s_picture Picture ir.ui.view qweb New
s_pricelist_boxed Pricelist Boxed ir.ui.view qweb New
s_pricelist_boxed_item s_pricelist_boxed_item ir.ui.view qweb New
s_product_list Items ir.ui.view qweb New
s_rating Rating ir.ui.view qweb New
s_references References ir.ui.view qweb New
s_reviews_wall Customers Testimonials ir.ui.view qweb New
s_schedule Schedule ir.ui.view qweb New
s_section_mobile App Advertising Block ir.ui.view qweb New
s_showcase Showcase ir.ui.view qweb New
s_special_offer_cta Special Offer CTA ir.ui.view qweb New
s_subtitle Subtitle ir.ui.view qweb New
s_text_block Text ir.ui.view qweb New
s_text_card Card with Text ir.ui.view qweb New
s_text_center_cta Call To Action with Centered Text ir.ui.view qweb New
s_text_contact Contact and Schedule ir.ui.view qweb New
s_text_cta_card Call To Action Card ir.ui.view qweb New
s_text_describing_benefits Benefits ir.ui.view qweb New
s_text_highlight Text Highlight ir.ui.view qweb New
s_text_image Text - Image ir.ui.view qweb New
s_text_left_cta Call To Action with Text ir.ui.view qweb New
s_text_need_help Need Help? ir.ui.view qweb New
s_text_product_description Product Description ir.ui.view qweb New
s_text_product_showcase Product Showcase ir.ui.view qweb New
s_text_signature Mail Structure ir.ui.view qweb New
s_three_columns Columns ir.ui.view qweb New
s_title Title ir.ui.view qweb New
s_title_with_side_text Title with Side Text ir.ui.view qweb New
s_video Video ir.ui.view qweb New
social_links social_links ir.ui.view qweb New
theme_basic_template theme_basic_template ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
theme_empty_template theme_empty_template ir.ui.view qweb New
unsubscribe_form unsubscribe_form ir.ui.view qweb New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.kanban utm.campaign xpath Inherits utm.utm_campaign_view_kanban
view_mail_mail_statistics_graph Mail Statistics Graph mailing.trace graph New
view_mail_mass_mailing_form mailing.mailing.form mailing.mailing form New
view_mail_mass_mailing_kanban mailing.mailing.kanban mailing.mailing kanban New
view_mail_mass_mailing_search mailing.mailing.search mailing.mailing search New
view_mail_mass_mailing_test_form mailing.mailing.test.form mailing.mailing.test form New
view_mail_mass_mailing_tree mailing.mailing.list mailing.mailing list New
Models touched (30)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • active_mailing_ids One2many → mailing.mailing
    comodel_name='mailing.mailing' domain=[('state', '!=', 'done'), ('active', '=', True)] inverse_name='mail_server_id' readonly=True string='Active mailing using this mail server'
Public methods (0)

No public methods.

New fields (1)
  • is_mailing_enabled Boolean
    compute='_compute_is_mailing_enabled' help='Whether this model supports marketing mailing capabilities (notably email and SMS).' search='_search_is_mailing_enabled' string='Mailing Enabled'
Public methods (0)

No public methods.

New fields (1)
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (0)

No public methods.

New fields (2)
  • mailing_trace_id Many2one → mailing.trace
    index='btree_not_null' string='Mail Statistics' args: 'mailing.trace'
  • mass_mailing_id Many2one → mailing.mailing
    index='btree_not_null' string='Mass Mailing' args: 'mailing.mailing'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model

New fields (1)
  • opt_out_reason_id Many2one → mailing.subscription.optout
    ondelete='restrict' string='Opt-out Reason' tracking=10 args: 'mailing.subscription.optout'
Public methods (0)

No public methods.

New fields (4)
  • campaign_id Many2one → utm.campaign
    ondelete='set null' string='Mass Mailing Campaign' args: 'utm.campaign'
  • mailing_list_ids Many2many → mailing.list
    string='Mailing List' args: 'mailing.list'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' string='Mass Mailing' args: 'mailing.mailing'
  • mass_mailing_name Char
    help='If set, a mass mailing will be created so that you can track its results in the Email Marketing app.' string='Mass Mailing Name'
Public methods (0)

No public methods.

New fields (2)
  • mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
  • mailing_trace_ids One2many → mailing.trace
    string='Statistics' args: 'mailing.trace', 'mail_mail_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • message_mail_with_source(self, source_ref, **kwargs)
  • message_new(self, msg_dict, custom_values=None)
    @api.model
  • message_post_with_source(self, source_ref, **kwargs)

New fields (10)
  • company_name Char
    string='Company Name'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • email Char
    args: 'Email'
  • first_name Char
    args: 'First Name'
  • last_name Char
    args: 'Last Name'
  • list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mailing_subscription', 'contact_id', 'list_id'
  • name Char
    compute='_compute_name' readonly=False store=True tracking=True args: 'Name'
  • opt_out Boolean
    compute='_compute_opt_out' help='Opt out flag for a specific mailing list. This field should not be used in a view without a unique and active mailing list context.' search='_search_opt_out' args: 'Opt Out'
  • subscription_ids One2many → mailing.subscription
    string='Subscription Information' args: 'mailing.subscription', 'contact_id'
  • tag_ids Many2many → res.partner.category
    string='Tags' args: 'res.partner.category'
Public methods (9)
  • action_add_to_mailing_list(self)
  • action_import(self)
  • add_to_list(self, name, list_id)
    @api.model
  • copy(self, default=None)
    Cleans the default_list_ids while duplicating mailing contact in context of a mailing list because we already have subscription lists copied over for newly created contact, no need to add the ones from default_list_ids again
  • create(self, vals_list)
    @api.model_create_multi
    Synchronize default_list_ids (currently used notably for computed fields) default key with subscription_ids given by user when creating contacts. Those two values have the same purpose, adding a list to to the contact either through a direct write on m2m, either through a write on middle model subscription. This is a bit hackish but is due to default_list_ids key being used to compute oupt_out field. This should be cleaned in master but here we simply try to limit issues while keeping current behavior.
  • default_get(self, fields)
    @api.model
    When coming from a mailing list we may have a default_list_ids context key. We should use it to create subscription_ids default value that are displayed to the user as list_ids is not displayed on form view.
  • fields_get(self, allfields=None, attributes=None)
    @api.model
    Hide first and last name field if the split name feature is not enabled.
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model

New fields (2)
  • contact_list Text
    help='Contact list that will be imported, one contact per line' args: 'Contact List'
  • mailing_list_ids Many2many → mailing.list
    string='Lists' args: 'mailing.list'
Public methods (2)
  • action_import(self)
    Import each lines of "contact_list" as a new contact.
  • action_open_base_import(self)
    Open the base import wizard to import mailing list contacts with a xlsx file.

New fields (2)
  • contact_ids Many2many → mailing.contact
    string='Contacts' args: 'mailing.contact'
  • mailing_list_id Many2one → mailing.list
    required=True string='Mailing List' args: 'mailing.list'
Public methods (2)
  • action_add_contacts(self)
    Simply add contacts to the mailing list and close wizard.
  • action_add_contacts_and_send_mailing(self)
    Add contacts to the mailing list and redirect to a new mailing on this list.

New fields (5)
  • create_uid Many2one → res.users
    default=<expr> index=True readonly=True args: 'res.users', 'Saved by'
  • mailing_domain Char
    required=True string='Filter Domain'
  • mailing_model_id Many2one → ir.model
    ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    related='mailing_model_id.model' string='Recipients Model Name'
  • name Char
    required=True string='Filter Name'
Public methods (0)

No public methods.

New fields (14)
  • active Boolean
    default=True
  • contact_count Integer
    compute='_compute_mailing_list_statistics' string='Number of Contacts'
  • contact_count_blacklisted Integer
    compute='_compute_mailing_list_statistics' string='Number of Blacklisted'
  • contact_count_email Integer
    compute='_compute_mailing_list_statistics' string='Number of Emails'
  • contact_count_opt_out Integer
    compute='_compute_mailing_list_statistics' string='Number of Opted-out'
  • contact_ids Many2many → mailing.contact
    copy=False string='Mailing Lists' args: 'mailing.contact', 'mailing_subscription', 'list_id', 'contact_id'
  • contact_pct_blacklisted Float
    compute='_compute_mailing_list_statistics' string='Percentage of Blacklisted'
  • contact_pct_bounce Float
    compute='_compute_mailing_list_statistics' string='Percentage of Bouncing'
  • contact_pct_opt_out Float
    compute='_compute_mailing_list_statistics' string='Percentage of Opted-out'
  • is_public Boolean
    default=False help='The mailing list can be accessible by recipients in the subscription management page to allow them to update their preferences.' string='Show In Preferences'
  • mailing_count Integer
    compute='_compute_mailing_count' string='Number of Mailing'
  • mailing_ids Many2many → mailing.mailing
    copy=False string='Mass Mailings' args: 'mailing.mailing', 'mail_mass_mailing_list_rel'
  • name Char
    required=True string='Mailing List'
  • subscription_ids One2many → mailing.subscription
    copy=True depends=['contact_ids'] string='Subscription Information' args: 'mailing.subscription', 'list_id'
Public methods (11)
  • action_merge(self, src_lists, archive)
    Insert all the contact from the mailing lists 'src_lists' to the mailing list in 'self'. Possibility to archive the mailing lists 'src_lists' after the merge except the destination mailing list 'self'.
  • action_open_import(self)
    Open the mailing list contact import wizard.
  • action_send_mailing(self)
    Open the mailing form view, with the current lists set as recipients.
  • action_view_contacts(self)
  • action_view_contacts_blacklisted(self)
  • action_view_contacts_bouncing(self)
  • action_view_contacts_email(self)
  • action_view_contacts_opt_out(self)
  • action_view_mailings(self)
  • copy_data(self, default=None)
  • write(self, vals)

New fields (5)
  • archive_src_lists Boolean
    default=True args: 'Archive source mailing lists'
  • dest_list_id Many2one → mailing.list
    string='Destination Mailing List' args: 'mailing.list'
  • merge_options Selection
    default='new' required=True args: [('new', 'Merge into a new mailing list'), ('existing', 'Merge into an existing mailing list')], 'Merge Option'
  • new_list_name Char
    args: 'New Mailing List Name'
  • src_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list'
Public methods (2)
  • action_mailing_lists_merge(self)
  • default_get(self, fields)
    @api.model

New fields (69)
  • ab_testing_completed Boolean
    related='campaign_id.ab_testing_completed'
  • ab_testing_description Html
    compute='_compute_ab_testing_description' args: 'A/B Testing Description'
  • ab_testing_enabled Boolean
    default=False help='If checked, recipients will be mailed only once for the whole campaign. This lets you send different mailings to randomly selected recipients and test the effectiveness of the mailings, without causing duplicate messages.' string='Allow A/B Testing'
  • ab_testing_is_winner_mailing Boolean
    compute='_compute_ab_testing_is_winner_mailing' args: 'Is the Winner of its Campaign'
  • ab_testing_mailings_count Integer
    related='campaign_id.ab_testing_mailings_count'
  • ab_testing_pc Integer
    default=10 help='Percentage of the contacts that will be mailed. Recipients will be chosen randomly.' string='A/B Testing percentage'
  • ab_testing_schedule_datetime Datetime
    default=<expr> readonly=False related='campaign_id.ab_testing_schedule_datetime'
  • ab_testing_winner_selection Selection
    copy=True default='opened_ratio' readonly=False related='campaign_id.ab_testing_winner_selection'
  • active Boolean
    default=True tracking=True
  • attachment_ids Many2many → ir.attachment
    bypass_search_access=True string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_arch Html
    sanitize='email_outgoing' sanitize_output_method='html' string='Body' translate=False
  • body_html Html
    render_engine='qweb' render_options={'post_process': True} sanitize='email_outgoing' string='Body converted to be sent by mail'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Float
    compute='_compute_statistics' string='Bounced Ratio'
  • calendar_date Datetime
    compute='_compute_calendar_date' copy=False help='Date at which the mailing was or will be sent.' store=True args: 'Calendar Date'
  • campaign_id Many2one → utm.campaign
    index=True ondelete='set null' string='UTM Campaign' args: 'utm.campaign'
  • canceled Integer
    compute='_compute_statistics'
  • clicked Integer
    compute='_compute_statistics'
  • clicks_ratio Float
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    string='Color Index'
  • contact_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mail_mass_mailing_list_rel'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    compute='_compute_email_from' precompute=True readonly=False store=True string='Send From'
  • expected Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • favorite Boolean
    copy=False tracking=True args: 'Favorite'
  • favorite_date Datetime
    compute='_compute_favorite_date' copy=False help='When this mailing was added in the favorites' store=True args: 'Favorite Date'
  • is_ab_test_sent Boolean
    compute='_compute_is_ab_test_sent'
  • is_body_empty Boolean
    compute='_compute_is_body_empty'
  • keep_archives Boolean
    string='Keep Archives'
  • kpi_mail_required Boolean
    copy=False args: 'KPI mail required'
  • link_trackers_count Integer
    compute='_compute_link_trackers_count' string='Link Trackers Count'
  • mail_server_available Boolean
    compute='_compute_mail_server_available' help='Technical field used to know if the user has activated the outgoing mail server option in the settings'
  • mail_server_id Many2one → ir.mail_server
    default=_get_default_mail_server_id help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' index='btree_not_null' string='Mail Server' args: 'ir.mail_server'
  • mailing_domain Char
    compute='_compute_mailing_domain' compute_sudo=False readonly=False store=True string='Domain'
  • mailing_filter_count Integer
    compute='_compute_mailing_filter_count' args: '# Favorite Filters'
  • mailing_filter_domain Char
    related='mailing_filter_id.mailing_domain' args: 'Favorite filter domain'
  • mailing_filter_id Many2one → mailing.filter
    compute='_compute_mailing_filter_id' domain="[('mailing_model_name', '=', mailing_model_name)]" readonly=False store=True string='Favorite Filter' args: 'mailing.filter'
  • mailing_model_id Many2one → ir.model
    default=<expr> domain=[('is_mailing_enabled', '=', True)] ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    readonly=True related='mailing_model_id.model' related_sudo=True string='Recipients Model Name'
  • mailing_model_real Char
    compute='_compute_mailing_model_real' string='Recipients Real Model'
  • mailing_on_mailing_list Boolean
    compute='_compute_mailing_on_mailing_list' string='Based on Mailing Lists'
  • mailing_trace_ids One2many → mailing.trace
    string='Emails Statistics' args: 'mailing.trace', 'mass_mailing_id'
  • mailing_type Selection
    default='mail' required=True string='Mailing Type' args: [('mail', 'Email')]
  • mailing_type_description Char
    compute='_compute_mailing_type_description' args: 'Mailing Type Description'
  • medium_id Many2one → utm.medium
    compute='_compute_medium_id' help='UTM Medium: delivery method (email, sms, ...)' ondelete='restrict' readonly=False store=True string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Scheduled date'
  • next_departure_is_past Boolean
    compute='_compute_next_departure'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Float
    compute='_compute_statistics' string='Opened Ratio'
  • pending Integer
    compute='_compute_statistics'
  • preview Char
    help='Catchy preview sentence that encourages recipients to open this email.\nIn most inboxes, this is displayed next to the subject.\nKeep it empty if you prefer the first characters of your email content to appear instead.' render_engine='inline_template' render_options={'post_process': True} translate=False args: 'Preview'
  • process Integer
    compute='_compute_statistics'
  • received_ratio Float
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Float
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    compute='_compute_reply_to' help='Preferred Reply-To Address' readonly=False store=True string='Reply To'
  • reply_to_mode Selection
    compute='_compute_reply_to_mode' help='Thread: replies go to target document. Email: replies are routed to a given email.' readonly=False store=True string='Reply-To Mode' args: [('update', 'Recipient Followers'), ('new', 'Specified Email Address')]
  • schedule_date Datetime
    compute='_compute_schedule_date' copy=True readonly=False store=True string='Scheduled for' tracking=True
  • schedule_type Selection
    default='now' readonly=False required=True string='Schedule' args: [('now', 'Send now'), ('scheduled', 'Send on')]
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False string='Sent Date'
  • state Selection
    copy=False default='draft' group_expand=True required=True string='Status' tracking=True args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • subject Char
    required=True translate=False args: 'Subject'
  • total Integer
    compute='_compute_total'
  • use_exclusion_list Boolean
    copy=False default=True help='Prevent sending messages to blacklisted contacts. Disable only when absolutely necessary.' args: 'Use Exclusion List'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
  • warning_message Char
    compute='_compute_warning_message' help='Warning message displayed in the mailing form view' args: 'Warning Message'
Public methods (32)
  • action_cancel(self)
  • action_compare_versions(self)
  • action_duplicate(self)
  • action_fetch_favorites(self, extra_domain=None)
    @api.model
    Return all mailings set as favorite and skip mailings with empty body. Return archived mailing templates as well, so the user can archive the templates while keeping using it, without cluttering the Kanban view if they're a lot of templates.
  • action_launch(self)
  • action_put_in_queue(self)
  • action_reload(self)
  • action_remove_favorite(self)
    Remove the current mailing from the favorites list.
  • action_retry_failed(self)
    Remove all failed emails and their traces, and try sending them again.
  • action_schedule(self)
  • action_select_as_winner(self)
  • action_send_mail(self, res_ids=None)
  • action_send_winner_mailing(self)
    Send the winner mailing based on the winner selection field. This action is used in 2 cases: - When the user clicks on a button to send the winner mailing. There is only one mailing in self - When the cron is executed to send winner mailing based on the A/B testing schedule datetime. In this case 'self' contains all the mailing for the campaigns so we just need to take the first to determine the winner. If the winner mailing is computed automatically, we sudo the mailings of the campaign in order to sort correctly the mailings based on the selection that can be used with sub-modules like CRM and Sales
  • action_set_favorite(self)
    Add the current mailing in the favorites list.
  • action_test(self)
  • action_view_bounced(self)
  • action_view_clicked(self)
  • action_view_delivered(self)
  • action_view_link_trackers(self)
  • action_view_mailing_contacts(self)
    Show the mailing contacts who are in a mailing list selected for this mailing.
  • action_view_opened(self)
  • action_view_replied(self)
  • action_view_traces_canceled(self)
  • action_view_traces_failed(self)
  • action_view_traces_process(self)
  • action_view_traces_scheduled(self)
  • action_view_traces_sent(self)
  • convert_links(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields)
    @api.model
  • write(self, vals)

New fields (2)
  • mass_mailing_id Many2one → mailing.mailing
    required=True args: 'mailing.mailing'
  • schedule_date Datetime
    string='Scheduled for'
Public methods (1)
  • action_schedule_date(self)

New fields (2)
  • email_to Text
    default=_default_email_to help='Carriage-return-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' required=True string='Mailing' args: 'mailing.mailing'
Public methods (1)
  • send_mail_test(self)

New fields (7)
  • contact_id Many2one → mailing.contact
    ondelete='cascade' required=True string='Contact' args: 'mailing.contact'
  • is_blacklisted Boolean
    readonly=False related='contact_id.is_blacklisted' store=False
  • list_id Many2one → mailing.list
    index=True ondelete='cascade' required=True string='Mailing List' args: 'mailing.list'
  • message_bounce Integer
    readonly=False related='contact_id.message_bounce' store=False
  • opt_out Boolean
    default=False help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • opt_out_datetime Datetime
    compute='_compute_opt_out_datetime' readonly=False store=True string='Unsubscription Date'
  • opt_out_reason_id Many2one → mailing.subscription.optout
    ondelete='restrict' string='Reason' args: 'mailing.subscription.optout'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • open_mailing_contact(self)
  • write(self, vals)

New fields (3)
  • is_feedback Boolean
    string='Ask For Feedback'
  • name Char
    string='Reason' translate=True
  • sequence Integer
    default=10 string='Sequence'
Public methods (0)

No public methods.

New fields (20)
  • campaign_id Many2one
    index='btree_not_null' readonly=True related='mass_mailing_id.campaign_id' store=True string='Campaign'
  • email Char
    help='Normalized email address' string='Email'
  • failure_reason Text
    copy=False readonly=True args: 'Failure reason'
  • failure_type Selection
    selection=[('unknown', 'Unknown error'), ('mail_bounce', 'Bounce'), ('mail_spam', 'Detected As Spam'), ('mail_email_invalid', 'Invalid email address'), ('mail_email_missing', 'Missing email address'), ('mail_from_invalid', 'Invalid from address'), ('mail_from_missing', 'Missing from address'), ('mail_smtp', 'Connection failed (outgoing mail server problem)'), ('mail_bl', 'Blacklisted Address'), ('mail_dup', 'Duplicated Email'), ('mail_optout', 'Opted Out')] string='Failure type'
  • is_test_trace Boolean
    args: 'Generated for testing'
  • links_click_datetime Datetime
    help='Stores last click datetime in case of multi clicks.' args: 'Clicked On'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mailing_trace_id'
  • mail_mail_id Many2one → mail.mail
    index='btree_not_null' string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index='btree_not_null' string='Mail ID (tech)'
  • mass_mailing_id Many2one → mailing.mailing
    index=True ondelete='cascade' string='Mailing' args: 'mailing.mailing'
  • medium_id Many2one
    related='mass_mailing_id.medium_id'
  • message_id Char
    string='Message-ID'
  • model Char
    required=True string='Document model'
  • open_datetime Datetime
    args: 'Opened On'
  • reply_datetime Datetime
    args: 'Replied On'
  • res_id Many2oneReference
    model_field='model' string='Document ID'
  • sent_datetime Datetime
    args: 'Sent On'
  • source_id Many2one
    related='mass_mailing_id.source_id'
  • trace_status Selection
    default='outgoing' selection=[('outgoing', 'Outgoing'), ('process', 'Processing'), ('pending', 'Sent'), ('sent', 'Delivered'), ('open', 'Opened'), ('reply', 'Replied'), ('bounce', 'Bounced'), ('error', 'Exception'), ('cancel', 'Cancelled')] string='Status'
  • trace_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Email')]
Public methods (9)
  • action_view_contact(self)
  • create(self, vals_list)
    @api.model_create_multi
  • set_bounced(self, domain=None, bounce_message=False)
  • set_canceled(self, domain=None)
  • set_clicked(self, domain=None)
  • set_failed(self, domain=None, failure_type=False)
  • set_opened(self, domain=None)
    Reply / Open are a bit shared in various processes: reply implies open, click implies open. Let us avoid status override by skipping traces that are not already opened or replied.
  • set_replied(self, domain=None)
  • set_sent(self, domain=None)

New fields (17)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mailing Campaign'
  • canceled Integer
    readonly=True
  • clicked Integer
    readonly=True
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • error Integer
    readonly=True
  • mailing_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Mail')]
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • pending Integer
    readonly=True
  • processing Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True string='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    Mass Mail Statistical Report: based on mailing.trace that models the various statistics collected for each mailing, and mailing.mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • group_mass_mailing_campaign Boolean
    help='This is useful if your marketing campaigns are composed of several emails' implied_group='mass_mailing.group_mass_mailing_campaign' string='Mailing Campaigns'
  • mass_mailing_mail_server_id Many2one → ir.mail_server
    config_parameter='mass_mailing.mail_server_id' string='Mail Server' args: 'ir.mail_server'
  • mass_mailing_outgoing_mail_server Boolean
    config_parameter='mass_mailing.outgoing_mail_server' help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Dedicated Server'
  • mass_mailing_reports Boolean
    config_parameter='mass_mailing.mass_mailing_reports' help='Check how well your mailing is doing a day after it has been sent.' string='24H Stat Mailing Reports'
  • mass_mailing_split_contact_name Boolean
    help='Separate Mailing Contact Names into two fields' string='Split First and Last Name'
  • show_blacklist_buttons Boolean
    config_parameter='mass_mailing.show_blacklist_buttons' help='Allow the recipient to manage themselves their state in the blacklist via the unsubscription page.' string='Blacklist Option when Unsubscribing'
Public methods (2)
  • get_values(self)
    @api.model
  • set_values(self)

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 (12)
  • ab_testing_completed Boolean
    compute='_compute_ab_testing_completed' copy=False readonly=True store=True args: 'A/B Testing Campaign Finished'
  • ab_testing_mailings_count Integer
    compute='_compute_mailing_mail_count' args: 'A/B Test Mailings #'
  • ab_testing_schedule_datetime Datetime
    default=<expr> help='Date that will be used to know when to determine and send the winner mailing' args: 'Send Final On'
  • ab_testing_winner_mailing_id Many2one → mailing.mailing
    copy=False args: 'mailing.mailing', 'A/B Campaign Winner Mailing'
  • ab_testing_winner_selection Selection
    default='opened_ratio' help='Selection to determine the winner mailing that will be sent.' string='Winner Selection' args: [('manual', 'Manual'), ('opened_ratio', 'Highest Open Rate'), ('clicks_ratio', 'Highest Click Rate'), ('replied_ratio', 'Highest Reply Rate')]
  • bounced_ratio Float
    compute='_compute_statistics' string='Bounced Ratio'
  • is_mailing_campaign_activated Boolean
    compute='_compute_is_mailing_campaign_activated'
  • mailing_mail_count Integer
    compute='_compute_mailing_mail_count' groups='mass_mailing.group_mass_mailing_user' args: 'Number of Mass Mailing'
  • mailing_mail_ids One2many → mailing.mailing
    domain=[('mailing_type', '=', 'mail')] groups='mass_mailing.group_mass_mailing_user' string='Mass Mailings' args: 'mailing.mailing', 'campaign_id'
  • opened_ratio Float
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Float
    compute='_compute_statistics' string='Received Ratio'
  • replied_ratio Float
    compute='_compute_statistics' string='Replied Ratio'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/18.0/mass_mailing
VERSION
VERSION 2.7
CATEGORY
CATEGORYMarketing/Email Marketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, David Monjoie, Xavier Morel, Aaron Bohy, Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Jorge Pinna Puissant, Aurélien Warnon, Xavier-Do, Andrea Grazioso (agr-odoo), Sébastien Theys, std-odoo, Nasreddin Boulif (bon), Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, abd-msyukyu-odoo, Benjamin Vray, Florian Vranckx, Antoine Guenet, Arthur Detroux (ard), Florian Charlier, luvi, Renaud Thiry, Vincent Larcin, Ipsita Borisagar, bve-odoo, jorv, alsh-odoo, Louis Wicket (wil), Mahamadasif Ansari, amdi-odoo, Pierre-Yves Dufays, Maruan Aguerdouh (magm), Dylan Kiss (dyki), Antoine (ande), Mayurrajsinh Rathod, Vivek Pathak, Adrien Schoffeniels, Mahdi Cheikh Rouhou (macr), Noe Antoine, omra-odoo, Andrzej(pian), Walid (wasa), Paul Stroobant, maad-odoo, Deependra Solanki, visp-odoo, BHanq, dane@odoo.com, Maryam Kia, Jérémy Hennecart (jeh), vava-odoo, Bastien Fafchamps (bafa), Julien Carion (juca), Lina (liew), Adnan Saiyed, Rodolpho Lima, aath-odoo, Louis (wil), Rémi - Le Filament, mano-odoo, Clément Cardot, Xavier Luyckx (xlu), guce, yagp-odoo, sabr, Rahil Ghanchi, Pierre Pulinckx (PIPU), Ezzuldin Zaky (ezza), Pierre Pulinckx (pipu), Pierre Pulinckx, Bastien PIERRE, kusi-odoo, Thomas Josse (THJO), Krzysztof Magusiak (krma), bikh-odoo, Brett Cutler, Earth Patel, pajo, defl, bhna-odoo, mojem, saurabh, tegu-odoo, Séna Nshimiyimana
WEBSITE
WEBSITEhttps://www.odoo.com/app/email-marketing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:25:53
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - contacts
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - html_editor
    - utm
    - link_tracker
    - web_editor
    - social_media
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (124)
XML IDNameModelTypeStatus
ab_testing_description Mass Mailing: A/B Test Description ir.ui.view qweb New
digest_mail_main digest_mail_main ir.ui.view qweb Inherits digest.digest_mail_main
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb Inherits web_editor.snippets
email_designer_themes email_designer_themes ir.ui.view qweb New
link_tracker_click_view_form link.tracker.click.view.form.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_form
link_tracker_click_view_graph link.tracker.click.view.graph.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_graph
link_tracker_click_view_search link.tracker.click.view.search.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_search
link_tracker_click_view_tree link.tracker.click.view.list.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_tree
link_tracker_view_form link.tracker.view.form.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_form
link_tracker_view_search link.tracker.view.search.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_search
mail_blacklist_view_form mail.blacklist.view.form.inherit.mailing mail.blacklist xpath Inherits mail.mail_blacklist_view_form
mail_blacklist_view_search mail.blacklist.view.search mail.blacklist xpath Inherits mail.mail_blacklist_view_search
mail_blacklist_view_tree mail.blacklist.view.list.inherit.mailing mail.blacklist xpath Inherits mail.mail_blacklist_view_tree
mailing_contact_import_view_form mailing.contact.import.view.form mailing.contact.import form New
mailing_contact_to_list_view_form mailing.contact.to.list.view.form mailing.contact.to.list form New
mailing_contact_view_form mailing.contact.view.form mailing.contact form New
mailing_contact_view_form_split_name mailing.contact.view.form.split.name mailing.contact xpath Inherits mass_mailing.mailing_contact_view_form
mailing_contact_view_graph mailing.contact.view.graph mailing.contact graph New
mailing_contact_view_kanban mailing.contact.view.kanban mailing.contact kanban New
mailing_contact_view_pivot mailing.contact.pivot mailing.contact pivot New
mailing_contact_view_search mailing.contact.view.search mailing.contact search New
mailing_contact_view_tree mailing.contact.view.list mailing.contact list New
mailing_contact_view_tree_split_name mailing.contact.view.list.split.name mailing.contact xpath Inherits mass_mailing.mailing_contact_view_tree
mailing_filter_view_form mailing.filter.view.form mailing.filter form New
mailing_filter_view_search mailing.filter.view.search mailing.filter search New
mailing_filter_view_tree mailing.filter.view.list mailing.filter list New
mailing_list_merge_view_form mailing.list.merge.form mailing.list.merge form New
mailing_list_view_form mailing.list.form mailing.list form New
mailing_list_view_form_simplified mailing.list.form.simplified mailing.list form New
mailing_list_view_kanban mailing.list.view.kanban mailing.list kanban New
mailing_list_view_search mailing.list.view.search mailing.list search New
mailing_list_view_tree mailing.list.view.list mailing.list list New
mailing_mailing_schedule_date_view_form mailing.mailing.schedule.date.view.form mailing.mailing.schedule.date form New
mailing_mailing_view_calendar mailing.mailing.view.calendar mailing.mailing calendar New
mailing_report_deactivated Report Unsubscribed ir.ui.view qweb New
mailing_subscription_optout_view_form mailing.subscription.optout.view.form mailing.subscription.optout form New
mailing_subscription_optout_view_search mailing.subscription.optout.view.search mailing.subscription.optout search New
mailing_subscription_optout_view_tree mailing.subscription.optout.view.list mailing.subscription.optout list New
mailing_subscription_view_form mailing.subscription.view.form mailing.subscription form New
mailing_subscription_view_graph mailing.subscription.view.graph mailing.subscription graph New
mailing_subscription_view_pivot mailing.subscription.view.pivot mailing.subscription pivot New
mailing_subscription_view_search mailing.subscription.view.search mailing.subscription search New
mailing_subscription_view_tree mailing.subscription.view.list mailing.subscription list New
mailing_trace_report_view_graph mailing.trace.report.view.graph mailing.trace.report graph New
mailing_trace_report_view_pivot mailing.trace.report.view.pivot mailing.trace.report pivot New
mailing_trace_report_view_search mailing.trace.report.view.search mailing.trace.report search New
mailing_trace_report_view_tree mailing.trace.report.view.list mailing.trace.report list New
mailing_trace_view_form mailing.trace.view.form mailing.trace form New
mailing_trace_view_search mailing.trace.view.search mailing.trace search New
mailing_trace_view_tree mailing.trace.view.list mailing.trace list New
mailing_trace_view_tree_mail mailing.trace.view.list.mail mailing.trace list New
mailing_view Browser View ir.ui.view qweb New
mailing_view_generic View in Browser ir.ui.view qweb New
mass_mailing.layout Mass Mailing Layout ir.ui.view qweb New
mass_mailing.mass_mailing_kpi_link_trackers Marketing: mailing link trackers statistic ir.ui.view qweb New
mass_mailing.preview_content_mobile mass_mailing.preview_content_mobile ir.ui.view qweb New
mass_mailing_mail_layout mass_mailing_mail_layout ir.ui.view qweb New
page_mailing_unsubscribe Unsubscribe ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.mass.mailing res.config.settings xpath Inherits base.res_config_settings_view_form
s_alert Alert ir.ui.view qweb New
s_alert_options s_alert_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_blockquote Blockquote ir.ui.view qweb New
s_call_to_action Call to Action ir.ui.view qweb New
s_color_blocks_2 Big Boxes ir.ui.view qweb New
s_company_team Team ir.ui.view qweb New
s_comparisons Comparisons ir.ui.view qweb New
s_coupon_code Promo Code ir.ui.view qweb New
s_cover Cover ir.ui.view qweb New
s_event Event ir.ui.view qweb New
s_features Features ir.ui.view qweb New
s_features_grid Features Grid ir.ui.view qweb New
s_hr Separator ir.ui.view qweb Inherits web_editor.s_hr
s_hr_options s_hr_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_image_text Image - Text ir.ui.view qweb New
s_mail_block_discount1 Discount Offer ir.ui.view qweb New
s_mail_block_footer_social Footer Center ir.ui.view qweb New
s_mail_block_footer_social_left Footer Left ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_header_view View Online ir.ui.view qweb New
s_masonry_block Masonry ir.ui.view qweb New
s_masonry_block_alternation_image_text_template s_masonry_block_alternation_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_template s_masonry_block_alternation_text_image_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_text_template s_masonry_block_alternation_text_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_template s_masonry_block_alternation_text_template ir.ui.view qweb New
s_masonry_block_default_template s_masonry_block_default_template ir.ui.view qweb New
s_masonry_block_image_texts_image_template s_masonry_block_image_texts_image_template ir.ui.view qweb New
s_masonry_block_images_template s_masonry_block_images_template ir.ui.view qweb New
s_masonry_block_mosaic_template s_masonry_block_mosaic_template ir.ui.view qweb New
s_masonry_block_options s_masonry_block_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_masonry_block_reversed_template s_masonry_block_reversed_template ir.ui.view qweb New
s_masonry_block_texts_image_texts_template s_masonry_block_texts_image_texts_template ir.ui.view qweb New
s_media_list Media List ir.ui.view qweb New
s_numbers Numbers ir.ui.view qweb New
s_picture Picture ir.ui.view qweb New
s_product_list Items ir.ui.view qweb New
s_rating Rating ir.ui.view qweb New
s_rating_options s_rating_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_references References ir.ui.view qweb New
s_showcase Showcase ir.ui.view qweb New
s_text_block Text ir.ui.view qweb New
s_text_highlight Text Highlight ir.ui.view qweb New
s_text_image Text - Image ir.ui.view qweb New
s_three_columns Columns ir.ui.view qweb New
s_title Title ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb Inherits web_editor.snippet_options
snippet_options_background_options snippet_options_background_options ir.ui.view qweb Inherits web_editor.snippet_options_background_options
snippet_options_border_line_widgets snippet_options_border_line_widgets ir.ui.view qweb New
snippet_options_border_widgets snippet_options_border_widgets ir.ui.view qweb New
social_links social_links ir.ui.view qweb New
theme_basic_template theme_basic_template ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
theme_empty_template theme_empty_template ir.ui.view qweb New
unsubscribe_form unsubscribe_form ir.ui.view qweb New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.kanban utm.campaign xpath Inherits utm.utm_campaign_view_kanban
view_mail_mail_statistics_graph Mail Statistics Graph mailing.trace graph New
view_mail_mass_mailing_form mailing.mailing.form mailing.mailing form New
view_mail_mass_mailing_kanban mailing.mailing.kanban mailing.mailing kanban New
view_mail_mass_mailing_search mailing.mailing.search mailing.mailing search New
view_mail_mass_mailing_test_form mailing.mailing.test.form mailing.mailing.test form New
view_mail_mass_mailing_tree mailing.mailing.list mailing.mailing list New
Models touched (30)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • active_mailing_ids One2many → mailing.mailing
    comodel_name='mailing.mailing' domain=[('state', '!=', 'done'), ('active', '=', True)] inverse_name='mail_server_id' readonly=True string='Active mailing using this mail server'
Public methods (0)

No public methods.

New fields (1)
  • is_mailing_enabled Boolean
    compute='_compute_is_mailing_enabled' help='Whether this model supports marketing mailing capabilities (notably email and SMS).' search='_search_is_mailing_enabled' string='Mailing Enabled'
Public methods (0)

No public methods.

New fields (1)
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (0)

No public methods.

New fields (2)
  • mailing_trace_id Many2one → mailing.trace
    index='btree_not_null' string='Mail Statistics' args: 'mailing.trace'
  • mass_mailing_id Many2one → mailing.mailing
    index='btree_not_null' string='Mass Mailing' args: 'mailing.mailing'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model

New fields (1)
  • opt_out_reason_id Many2one → mailing.subscription.optout
    ondelete='restrict' string='Opt-out Reason' tracking=10 args: 'mailing.subscription.optout'
Public methods (0)

No public methods.

New fields (4)
  • campaign_id Many2one → utm.campaign
    ondelete='set null' string='Mass Mailing Campaign' args: 'utm.campaign'
  • mailing_list_ids Many2many → mailing.list
    string='Mailing List' args: 'mailing.list'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' string='Mass Mailing' args: 'mailing.mailing'
  • mass_mailing_name Char
    help='If set, a mass mailing will be created so that you can track its results in the Email Marketing app.' string='Mass Mailing Name'
Public methods (0)

No public methods.

New fields (2)
  • mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
  • mailing_trace_ids One2many → mailing.trace
    string='Statistics' args: 'mailing.trace', 'mail_mail_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • message_mail_with_source(self, source_ref, **kwargs)
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Overrides mail_thread message_new that is called by the mailgateway through message_process. This override updates the document according to the email.
  • message_post_with_source(self, source_ref, **kwargs)

New fields (11)
  • company_name Char
    string='Company Name'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • email Char
    args: 'Email'
  • first_name Char
    args: 'First Name'
  • last_name Char
    args: 'Last Name'
  • list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mailing_subscription', 'contact_id', 'list_id'
  • name Char
    compute='_compute_name' readonly=False store=True tracking=True args: 'Name'
  • opt_out Boolean
    compute='_compute_opt_out' help='Opt out flag for a specific mailing list. This field should not be used in a view without a unique and active mailing list context.' search='_search_opt_out' args: 'Opt Out'
  • subscription_ids One2many → mailing.subscription
    string='Subscription Information' args: 'mailing.subscription', 'contact_id'
  • tag_ids Many2many → res.partner.category
    string='Tags' args: 'res.partner.category'
  • title_id Many2one → res.partner.title
    string='Title' args: 'res.partner.title'
Public methods (9)
  • action_add_to_mailing_list(self)
  • action_import(self)
  • add_to_list(self, name, list_id)
    @api.model
  • copy(self, default=None)
    Cleans the default_list_ids while duplicating mailing contact in context of a mailing list because we already have subscription lists copied over for newly created contact, no need to add the ones from default_list_ids again
  • create(self, vals_list)
    @api.model_create_multi
    Synchronize default_list_ids (currently used notably for computed fields) default key with subscription_ids given by user when creating contacts. Those two values have the same purpose, adding a list to to the contact either through a direct write on m2m, either through a write on middle model subscription. This is a bit hackish but is due to default_list_ids key being used to compute oupt_out field. This should be cleaned in master but here we simply try to limit issues while keeping current behavior.
  • default_get(self, fields_list)
    When coming from a mailing list we may have a default_list_ids context key. We should use it to create subscription_ids default value that are displayed to the user as list_ids is not displayed on form view.
  • fields_get(self, allfields=None, attributes=None)
    @api.model
    Hide first and last name field if the split name feature is not enabled.
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model

New fields (2)
  • contact_list Text
    help='Contact list that will be imported, one contact per line' args: 'Contact List'
  • mailing_list_ids Many2many → mailing.list
    string='Lists' args: 'mailing.list'
Public methods (2)
  • action_import(self)
    Import each lines of "contact_list" as a new contact.
  • action_open_base_import(self)
    Open the base import wizard to import mailing list contacts with a xlsx file.

New fields (2)
  • contact_ids Many2many → mailing.contact
    string='Contacts' args: 'mailing.contact'
  • mailing_list_id Many2one → mailing.list
    required=True string='Mailing List' args: 'mailing.list'
Public methods (2)
  • action_add_contacts(self)
    Simply add contacts to the mailing list and close wizard.
  • action_add_contacts_and_send_mailing(self)
    Add contacts to the mailing list and redirect to a new mailing on this list.

New fields (5)
  • create_uid Many2one → res.users
    default=<expr> index=True readonly=True args: 'res.users', 'Saved by'
  • mailing_domain Char
    required=True string='Filter Domain'
  • mailing_model_id Many2one → ir.model
    ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    related='mailing_model_id.model' string='Recipients Model Name'
  • name Char
    required=True string='Filter Name'
Public methods (0)

No public methods.

New fields (14)
  • active Boolean
    default=True
  • contact_count Integer
    compute='_compute_mailing_list_statistics' string='Number of Contacts'
  • contact_count_blacklisted Integer
    compute='_compute_mailing_list_statistics' string='Number of Blacklisted'
  • contact_count_email Integer
    compute='_compute_mailing_list_statistics' string='Number of Emails'
  • contact_count_opt_out Integer
    compute='_compute_mailing_list_statistics' string='Number of Opted-out'
  • contact_ids Many2many → mailing.contact
    copy=False string='Mailing Lists' args: 'mailing.contact', 'mailing_subscription', 'list_id', 'contact_id'
  • contact_pct_blacklisted Float
    compute='_compute_mailing_list_statistics' string='Percentage of Blacklisted'
  • contact_pct_bounce Float
    compute='_compute_mailing_list_statistics' string='Percentage of Bouncing'
  • contact_pct_opt_out Float
    compute='_compute_mailing_list_statistics' string='Percentage of Opted-out'
  • is_public Boolean
    default=False help='The mailing list can be accessible by recipients in the subscription management page to allow them to update their preferences.' string='Show In Preferences'
  • mailing_count Integer
    compute='_compute_mailing_count' string='Number of Mailing'
  • mailing_ids Many2many → mailing.mailing
    copy=False string='Mass Mailings' args: 'mailing.mailing', 'mail_mass_mailing_list_rel'
  • name Char
    required=True string='Mailing List'
  • subscription_ids One2many → mailing.subscription
    copy=True depends=['contact_ids'] string='Subscription Information' args: 'mailing.subscription', 'list_id'
Public methods (12)
  • action_merge(self, src_lists, archive)
    Insert all the contact from the mailing lists 'src_lists' to the mailing list in 'self'. Possibility to archive the mailing lists 'src_lists' after the merge except the destination mailing list 'self'.
  • action_open_import(self)
    Open the mailing list contact import wizard.
  • action_send_mailing(self)
    Open the mailing form view, with the current lists set as recipients.
  • action_view_contacts(self)
  • action_view_contacts_blacklisted(self)
  • action_view_contacts_bouncing(self)
  • action_view_contacts_email(self)
  • action_view_contacts_opt_out(self)
  • action_view_mailings(self)
  • close_dialog(self)
  • copy_data(self, default=None)
  • write(self, vals)

New fields (5)
  • archive_src_lists Boolean
    default=True args: 'Archive source mailing lists'
  • dest_list_id Many2one → mailing.list
    string='Destination Mailing List' args: 'mailing.list'
  • merge_options Selection
    default='new' required=True args: [('new', 'Merge into a new mailing list'), ('existing', 'Merge into an existing mailing list')], 'Merge Option'
  • new_list_name Char
    args: 'New Mailing List Name'
  • src_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list'
Public methods (2)
  • action_mailing_lists_merge(self)
  • default_get(self, fields)
    @api.model

New fields (68)
  • ab_testing_completed Boolean
    related='campaign_id.ab_testing_completed'
  • ab_testing_description Html
    compute='_compute_ab_testing_description' args: 'A/B Testing Description'
  • ab_testing_enabled Boolean
    default=False help='If checked, recipients will be mailed only once for the whole campaign. This lets you send different mailings to randomly selected recipients and test the effectiveness of the mailings, without causing duplicate messages.' string='Allow A/B Testing'
  • ab_testing_is_winner_mailing Boolean
    compute='_compute_ab_testing_is_winner_mailing' args: 'Is the Winner of its Campaign'
  • ab_testing_mailings_count Integer
    related='campaign_id.ab_testing_mailings_count'
  • ab_testing_pc Integer
    default=10 help='Percentage of the contacts that will be mailed. Recipients will be chosen randomly.' string='A/B Testing percentage'
  • ab_testing_schedule_datetime Datetime
    default=<expr> readonly=False related='campaign_id.ab_testing_schedule_datetime'
  • ab_testing_winner_selection Selection
    copy=True default='opened_ratio' readonly=False related='campaign_id.ab_testing_winner_selection'
  • active Boolean
    default=True tracking=True
  • attachment_ids Many2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_arch Html
    sanitize='email_outgoing' sanitize_output_method='html' string='Body' translate=False
  • body_html Html
    render_engine='qweb' render_options={'post_process': True} sanitize='email_outgoing' string='Body converted to be sent by mail'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Float
    compute='_compute_statistics' string='Bounced Ratio'
  • calendar_date Datetime
    compute='_compute_calendar_date' copy=False help='Date at which the mailing was or will be sent.' store=True args: 'Calendar Date'
  • campaign_id Many2one → utm.campaign
    index=True ondelete='set null' string='UTM Campaign' args: 'utm.campaign'
  • canceled Integer
    compute='_compute_statistics'
  • clicked Integer
    compute='_compute_statistics'
  • clicks_ratio Float
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    string='Color Index'
  • contact_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mail_mass_mailing_list_rel'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    compute='_compute_email_from' precompute=True readonly=False required=True store=True string='Send From'
  • expected Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • favorite Boolean
    copy=False tracking=True args: 'Favorite'
  • favorite_date Datetime
    compute='_compute_favorite_date' copy=False help='When this mailing was added in the favorites' store=True args: 'Favorite Date'
  • is_ab_test_sent Boolean
    compute='_compute_is_ab_test_sent'
  • is_body_empty Boolean
    compute='_compute_is_body_empty'
  • keep_archives Boolean
    string='Keep Archives'
  • kpi_mail_required Boolean
    copy=False args: 'KPI mail required'
  • link_trackers_count Integer
    compute='_compute_link_trackers_count' string='Link Trackers Count'
  • mail_server_available Boolean
    compute='_compute_mail_server_available' help='Technical field used to know if the user has activated the outgoing mail server option in the settings'
  • mail_server_id Many2one → ir.mail_server
    default=_get_default_mail_server_id help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Mail Server' args: 'ir.mail_server'
  • mailing_domain Char
    compute='_compute_mailing_domain' compute_sudo=False readonly=False store=True string='Domain'
  • mailing_filter_count Integer
    compute='_compute_mailing_filter_count' args: '# Favorite Filters'
  • mailing_filter_domain Char
    related='mailing_filter_id.mailing_domain' args: 'Favorite filter domain'
  • mailing_filter_id Many2one → mailing.filter
    compute='_compute_mailing_filter_id' domain="[('mailing_model_name', '=', mailing_model_name)]" readonly=False store=True string='Favorite Filter' args: 'mailing.filter'
  • mailing_model_id Many2one → ir.model
    default=<expr> domain=[('is_mailing_enabled', '=', True)] ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    readonly=True related='mailing_model_id.model' related_sudo=True string='Recipients Model Name'
  • mailing_model_real Char
    compute='_compute_mailing_model_real' string='Recipients Real Model'
  • mailing_on_mailing_list Boolean
    compute='_compute_mailing_on_mailing_list' string='Based on Mailing Lists'
  • mailing_trace_ids One2many → mailing.trace
    string='Emails Statistics' args: 'mailing.trace', 'mass_mailing_id'
  • mailing_type Selection
    default='mail' required=True string='Mailing Type' args: [('mail', 'Email')]
  • mailing_type_description Char
    compute='_compute_mailing_type_description' args: 'Mailing Type Description'
  • medium_id Many2one → utm.medium
    compute='_compute_medium_id' help='UTM Medium: delivery method (email, sms, ...)' ondelete='restrict' readonly=False store=True string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Scheduled date'
  • next_departure_is_past Boolean
    compute='_compute_next_departure'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Float
    compute='_compute_statistics' string='Opened Ratio'
  • pending Integer
    compute='_compute_statistics'
  • preview Char
    help='Catchy preview sentence that encourages recipients to open this email.\nIn most inboxes, this is displayed next to the subject.\nKeep it empty if you prefer the first characters of your email content to appear instead.' render_engine='inline_template' render_options={'post_process': True} translate=False args: 'Preview'
  • process Integer
    compute='_compute_statistics'
  • received_ratio Float
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Float
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    compute='_compute_reply_to' help='Preferred Reply-To Address' readonly=False store=True string='Reply To'
  • reply_to_mode Selection
    compute='_compute_reply_to_mode' help='Thread: replies go to target document. Email: replies are routed to a given email.' readonly=False store=True string='Reply-To Mode' args: [('update', 'Recipient Followers'), ('new', 'Specified Email Address')]
  • schedule_date Datetime
    compute='_compute_schedule_date' copy=True readonly=False store=True string='Scheduled for' tracking=True
  • schedule_type Selection
    default='now' readonly=False required=True string='Schedule' args: [('now', 'Send now'), ('scheduled', 'Send on')]
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False string='Sent Date'
  • state Selection
    copy=False default='draft' group_expand=True required=True string='Status' tracking=True args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • subject Char
    required=True translate=False args: 'Subject'
  • total Integer
    compute='_compute_total'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
  • warning_message Char
    compute='_compute_warning_message' help='Warning message displayed in the mailing form view' args: 'Warning Message'
Public methods (32)
  • action_cancel(self)
  • action_compare_versions(self)
  • action_duplicate(self)
  • action_fetch_favorites(self, extra_domain=None)
    @api.model
    Return all mailings set as favorite and skip mailings with empty body. Return archived mailing templates as well, so the user can archive the templates while keeping using it, without cluttering the Kanban view if they're a lot of templates.
  • action_launch(self)
  • action_put_in_queue(self)
  • action_reload(self)
  • action_remove_favorite(self)
    Remove the current mailing from the favorites list.
  • action_retry_failed(self)
    Remove all failed emails and their traces, and try sending them again.
  • action_schedule(self)
  • action_select_as_winner(self)
  • action_send_mail(self, res_ids=None)
  • action_send_winner_mailing(self)
    Send the winner mailing based on the winner selection field. This action is used in 2 cases: - When the user clicks on a button to send the winner mailing. There is only one mailing in self - When the cron is executed to send winner mailing based on the A/B testing schedule datetime. In this case 'self' contains all the mailing for the campaigns so we just need to take the first to determine the winner. If the winner mailing is computed automatically, we sudo the mailings of the campaign in order to sort correctly the mailings based on the selection that can be used with sub-modules like CRM and Sales
  • action_set_favorite(self)
    Add the current mailing in the favorites list.
  • action_test(self)
  • action_view_bounced(self)
  • action_view_clicked(self)
  • action_view_delivered(self)
  • action_view_link_trackers(self)
  • action_view_mailing_contacts(self)
    Show the mailing contacts who are in a mailing list selected for this mailing.
  • action_view_opened(self)
  • action_view_replied(self)
  • action_view_traces_canceled(self)
  • action_view_traces_failed(self)
  • action_view_traces_process(self)
  • action_view_traces_scheduled(self)
  • action_view_traces_sent(self)
  • convert_links(self)
  • copy_data(self, default=None)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • write(self, values)

New fields (2)
  • mass_mailing_id Many2one → mailing.mailing
    required=True args: 'mailing.mailing'
  • schedule_date Datetime
    string='Scheduled for'
Public methods (1)
  • action_schedule_date(self)

New fields (2)
  • email_to Text
    default=_default_email_to help='Carriage-return-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' required=True string='Mailing' args: 'mailing.mailing'
Public methods (1)
  • send_mail_test(self)

New fields (7)
  • contact_id Many2one → mailing.contact
    ondelete='cascade' required=True string='Contact' args: 'mailing.contact'
  • is_blacklisted Boolean
    readonly=False related='contact_id.is_blacklisted' store=False
  • list_id Many2one → mailing.list
    ondelete='cascade' required=True string='Mailing List' args: 'mailing.list'
  • message_bounce Integer
    readonly=False related='contact_id.message_bounce' store=False
  • opt_out Boolean
    default=False help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • opt_out_datetime Datetime
    compute='_compute_opt_out_datetime' readonly=False store=True string='Unsubscription Date'
  • opt_out_reason_id Many2one → mailing.subscription.optout
    ondelete='restrict' string='Reason' args: 'mailing.subscription.optout'
Public methods (3)
  • create(self, vals_list)
    @api.model_create_multi
  • open_mailing_contact(self)
  • write(self, vals)

New fields (3)
  • is_feedback Boolean
    string='Ask For Feedback'
  • name Char
    string='Reason' translate=True
  • sequence Integer
    default=10 string='Sequence'
Public methods (0)

No public methods.

New fields (19)
  • campaign_id Many2one
    index='btree_not_null' readonly=True related='mass_mailing_id.campaign_id' store=True string='Campaign'
  • email Char
    help='Normalized email address' string='Email'
  • failure_reason Text
    copy=False readonly=True args: 'Failure reason'
  • failure_type Selection
    selection=[('unknown', 'Unknown error'), ('mail_bounce', 'Bounce'), ('mail_email_invalid', 'Invalid email address'), ('mail_email_missing', 'Missing email address'), ('mail_from_invalid', 'Invalid from address'), ('mail_from_missing', 'Missing from address'), ('mail_smtp', 'Connection failed (outgoing mail server problem)'), ('mail_bl', 'Blacklisted Address'), ('mail_dup', 'Duplicated Email'), ('mail_optout', 'Opted Out')] string='Failure type'
  • links_click_datetime Datetime
    help='Stores last click datetime in case of multi clicks.' args: 'Clicked On'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mailing_trace_id'
  • mail_mail_id Many2one → mail.mail
    index='btree_not_null' string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index='btree_not_null' string='Mail ID (tech)'
  • mass_mailing_id Many2one → mailing.mailing
    index=True ondelete='cascade' string='Mailing' args: 'mailing.mailing'
  • medium_id Many2one
    related='mass_mailing_id.medium_id'
  • message_id Char
    string='Message-ID'
  • model Char
    required=True string='Document model'
  • open_datetime Datetime
    args: 'Opened On'
  • reply_datetime Datetime
    args: 'Replied On'
  • res_id Many2oneReference
    model_field='model' string='Document ID'
  • sent_datetime Datetime
    args: 'Sent On'
  • source_id Many2one
    related='mass_mailing_id.source_id'
  • trace_status Selection
    default='outgoing' selection=[('outgoing', 'Outgoing'), ('process', 'Processing'), ('pending', 'Sent'), ('sent', 'Delivered'), ('open', 'Opened'), ('reply', 'Replied'), ('bounce', 'Bounced'), ('error', 'Exception'), ('cancel', 'Cancelled')] string='Status'
  • trace_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Email')]
Public methods (9)
  • action_view_contact(self)
  • create(self, values_list)
    @api.model_create_multi
  • set_bounced(self, domain=None, bounce_message=False)
  • set_canceled(self, domain=None)
  • set_clicked(self, domain=None)
  • set_failed(self, domain=None, failure_type=False)
  • set_opened(self, domain=None)
    Reply / Open are a bit shared in various processes: reply implies open, click implies open. Let us avoid status override by skipping traces that are not already opened or replied.
  • set_replied(self, domain=None)
  • set_sent(self, domain=None)

New fields (17)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mailing Campaign'
  • canceled Integer
    readonly=True
  • clicked Integer
    readonly=True
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • error Integer
    readonly=True
  • mailing_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Mail')]
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • pending Integer
    readonly=True
  • processing Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True string='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    Mass Mail Statistical Report: based on mailing.trace that models the various statistics collected for each mailing, and mailing.mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (6)
  • group_mass_mailing_campaign Boolean
    help='This is useful if your marketing campaigns are composed of several emails' implied_group='mass_mailing.group_mass_mailing_campaign' string='Mailing Campaigns'
  • mass_mailing_mail_server_id Many2one → ir.mail_server
    config_parameter='mass_mailing.mail_server_id' string='Mail Server' args: 'ir.mail_server'
  • mass_mailing_outgoing_mail_server Boolean
    config_parameter='mass_mailing.outgoing_mail_server' help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Dedicated Server'
  • mass_mailing_reports Boolean
    config_parameter='mass_mailing.mass_mailing_reports' help='Check how well your mailing is doing a day after it has been sent.' string='24H Stat Mailing Reports'
  • mass_mailing_split_contact_name Boolean
    help='Separate Mailing Contact Names into two fields' string='Split First and Last Name'
  • show_blacklist_buttons Boolean
    config_parameter='mass_mailing.show_blacklist_buttons' help='Allow the recipient to manage themselves their state in the blacklist via the unsubscription page.' string='Blacklist Option when Unsubscribing'
Public methods (2)
  • get_values(self)
    @api.model
  • set_values(self)

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 (12)
  • ab_testing_completed Boolean
    compute='_compute_ab_testing_completed' copy=False readonly=True store=True args: 'A/B Testing Campaign Finished'
  • ab_testing_mailings_count Integer
    compute='_compute_mailing_mail_count' args: 'A/B Test Mailings #'
  • ab_testing_schedule_datetime Datetime
    default=<expr> help='Date that will be used to know when to determine and send the winner mailing' args: 'Send Final On'
  • ab_testing_winner_mailing_id Many2one → mailing.mailing
    copy=False args: 'mailing.mailing', 'A/B Campaign Winner Mailing'
  • ab_testing_winner_selection Selection
    default='opened_ratio' help='Selection to determine the winner mailing that will be sent.' string='Winner Selection' args: [('manual', 'Manual'), ('opened_ratio', 'Highest Open Rate'), ('clicks_ratio', 'Highest Click Rate'), ('replied_ratio', 'Highest Reply Rate')]
  • bounced_ratio Float
    compute='_compute_statistics' string='Bounced Ratio'
  • is_mailing_campaign_activated Boolean
    compute='_compute_is_mailing_campaign_activated'
  • mailing_mail_count Integer
    compute='_compute_mailing_mail_count' groups='mass_mailing.group_mass_mailing_user' args: 'Number of Mass Mailing'
  • mailing_mail_ids One2many → mailing.mailing
    domain=[('mailing_type', '=', 'mail')] groups='mass_mailing.group_mass_mailing_user' string='Mass Mailings' args: 'mailing.mailing', 'campaign_id'
  • opened_ratio Float
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Float
    compute='_compute_statistics' string='Received Ratio'
  • replied_ratio Float
    compute='_compute_statistics' string='Replied Ratio'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/17.0/mass_mailing
VERSION
VERSION 2.7
CATEGORY
CATEGORYMarketing/Email Marketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Thibault Delavallée, David Monjoie, Xavier Morel, Nicolas Lempereur, Géry Debongnie, Aaron Bohy, Damien Bouvy, Yannick Tivisse, qsm-odoo, Odoo Online, Romain Derie, Christophe Monniez, Jorge Pinna Puissant, Alexandre Kühn, Julien Castiaux, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Victor Feyens, Andrea Grazioso (agr-odoo), Adrien Dieudonné, Sébastien Theys, Joseph Caburnay, Samuel Degueldre, std-odoo, Nasreddin Boulif (bon), Tiffany Chang (tic), Rémy Voet (ryv), Gorash, Mathieu Duckerts-Antoine, Pierre Paridans, Benjamin Vray, Stefan-Calin Crainiciuc (stcc), Benoit Socias, Hubert Van de Walle (huvw), Guillaume (gdi), MerlinGuillaume, Antoine Guenet, Florian Charlier, Patrick Hoste, Nicolas Bayet, Hubert Van De Walle, luvi, Achraf, Renaud Thiry, Ipsita Borisagar, niyasraphy, bve-odoo, jorv, alsh-odoo, Louis Wicket (wil), Mahamadasif Ansari, miad-odoo, amdi-odoo, Pierre-Yves Dufays, Soukéina Bojabza, Robin Lejeune (role), Maruan Aguerdouh (magm), Dylan Kiss (dyki), Sébastien Geelen (sge), Mahdi cheikh rouhou (macr), Bruno Boi, Antoine (ande), FrancoisGe, Michael (mcm), Mayurrajsinh Rathod, Vivek Pathak, Adrien Schoffeniels, Xavier Bol (xbo), Brieuc-brd, Mahdi Cheikh Rouhou (macr), Noe Antoine, Walid (wasa), Paul Stroobant, maad-odoo, Deependra Solanki, dhba-odoo, visp-odoo, Astik Singh, BHanq, dane@odoo.com, Rodopho Cammarosano de Lima (rcdl), Jérémy Hennecart (jeh), Julien Carion (juca), dhba, Chrysanthe (chgo), Rodolpho Lima, aath-odoo, shsa-odoo, Louis (wil), Rémi - Le Filament, Mathieu (mano), Manushi Shah (mash), Clément Cardot, Elisabeth Dickinson, Pratik Raval (PRRA), Xavier Luyckx (xlu), guce, yagp-odoo, Antoine (anso), sabr, Rahil Ghanchi, Ezzuldin Zaky (ezza), Julien, Pierre Pulinckx (pipu), Bastien PIERRE, Thomas Josse (THJO), Pulinckx Pierre (PIPU), bikh-odoo, Brett Cutler, Earth Patel, pajo, defl, bhna-odoo, mojem
WEBSITE
WEBSITEhttps://www.odoo.com/app/email-marketing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 01:02:04
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - contacts
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - utm
    - link_tracker
    - web_editor
    - social_media
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (120)
XML IDNameModelTypeStatus
ab_testing_description Mass Mailing: A/B Test Description ir.ui.view qweb New
digest_mail_main digest_mail_main ir.ui.view qweb Inherits digest.digest_mail_main
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb Inherits web_editor.snippets
link_tracker_click_view_form link.tracker.click.view.form.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_form
link_tracker_click_view_graph link.tracker.click.view.graph.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_graph
link_tracker_click_view_search link.tracker.click.view.search.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_search
link_tracker_click_view_tree link.tracker.click.view.tree.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_tree
link_tracker_view_form link.tracker.view.form.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_form
link_tracker_view_search link.tracker.view.search.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_search
mail_blacklist_view_form mail.blacklist.view.form.inherit.mailing mail.blacklist xpath Inherits mail.mail_blacklist_view_form
mail_blacklist_view_search mail.blacklist.view.search mail.blacklist xpath Inherits mail.mail_blacklist_view_search
mail_blacklist_view_tree mail.blacklist.view.tree.inherit.mailing mail.blacklist xpath Inherits mail.mail_blacklist_view_tree
mailing_contact_import_view_form mailing.contact.import.view.form mailing.contact.import form New
mailing_contact_to_list_view_form mailing.contact.to.list.view.form mailing.contact.to.list form New
mailing_contact_view_form mailing.contact.view.form mailing.contact form New
mailing_contact_view_graph mailing.contact.view.graph mailing.contact graph New
mailing_contact_view_kanban mailing.contact.view.kanban mailing.contact kanban New
mailing_contact_view_pivot mailing.contact.pivot mailing.contact pivot New
mailing_contact_view_search mailing.contact.view.search mailing.contact search New
mailing_contact_view_tree mailing.contact.view.tree mailing.contact tree New
mailing_filter_view_form mailing.filter.view.form mailing.filter form New
mailing_filter_view_search mailing.filter.view.search mailing.filter search New
mailing_filter_view_tree mailing.filter.view.tree mailing.filter tree New
mailing_list_merge_view_form mailing.list.merge.form mailing.list.merge form New
mailing_list_view_form mailing.list.form mailing.list form New
mailing_list_view_form_simplified mailing.list.form.simplified mailing.list form New
mailing_list_view_kanban mailing.list.view.kanban mailing.list kanban New
mailing_list_view_search mailing.list.view.search mailing.list search New
mailing_list_view_tree mailing.list.view.tree mailing.list tree New
mailing_mailing_schedule_date_view_form mailing.mailing.schedule.date.view.form mailing.mailing.schedule.date form New
mailing_mailing_view_calendar mailing.mailing.view.calendar mailing.mailing calendar New
mailing_mailing_view_form_full_width mailing.mailing.view.form.full.width mailing.mailing xpath Inherits mass_mailing.view_mail_mass_mailing_form
mailing_report_deactivated Report Unsubscribed ir.ui.view qweb New
mailing_subscription_optout_view_form mailing.subscription.optout.view.form mailing.subscription.optout form New
mailing_subscription_optout_view_search mailing.subscription.optout.view.search mailing.subscription.optout search New
mailing_subscription_optout_view_tree mailing.subscription.optout.view.tree mailing.subscription.optout tree New
mailing_subscription_view_form mailing.subscription.view.form mailing.subscription form New
mailing_subscription_view_search mailing.subscription.view.search mailing.subscription search New
mailing_subscription_view_tree mailing.subscription.view.tree mailing.subscription tree New
mailing_trace_report_view_graph mailing.trace.report.view.graph mailing.trace.report graph New
mailing_trace_report_view_pivot mailing.trace.report.view.pivot mailing.trace.report pivot New
mailing_trace_report_view_search mailing.trace.report.view.search mailing.trace.report search New
mailing_trace_report_view_tree mailing.trace.report.view.tree mailing.trace.report tree New
mailing_trace_view_form mailing.trace.view.form mailing.trace form New
mailing_trace_view_search mailing.trace.view.search mailing.trace search New
mailing_trace_view_tree mailing.trace.view.tree mailing.trace tree New
mailing_trace_view_tree_mail mailing.trace.view.tree.mail mailing.trace tree New
mailing_view Browser View ir.ui.view qweb New
mass_mailing.layout Mass Mailing Layout ir.ui.view qweb New
mass_mailing.mass_mailing_kpi_link_trackers Marketing: mailing link trackers statistic ir.ui.view qweb New
mass_mailing.preview_content_mobile mass_mailing.preview_content_mobile ir.ui.view qweb New
mass_mailing_mail_layout mass_mailing_mail_layout ir.ui.view qweb New
page_mailing_unsubscribe Unsubscribe ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.mass.mailing res.config.settings xpath Inherits base.res_config_settings_view_form
s_alert Alert ir.ui.view qweb New
s_alert_options s_alert_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_blockquote Blockquote ir.ui.view qweb New
s_call_to_action Call to Action ir.ui.view qweb New
s_color_blocks_2 Big Boxes ir.ui.view qweb New
s_company_team Team ir.ui.view qweb New
s_comparisons Comparisons ir.ui.view qweb New
s_coupon_code Promo Code ir.ui.view qweb New
s_cover Cover ir.ui.view qweb New
s_event Event ir.ui.view qweb New
s_features Features ir.ui.view qweb New
s_features_grid Features Grid ir.ui.view qweb New
s_hr Separator ir.ui.view qweb Inherits web_editor.s_hr
s_hr_options s_hr_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_image_text Image - Text ir.ui.view qweb New
s_mail_block_discount1 Discount Offer ir.ui.view qweb New
s_mail_block_footer_social Footer Center ir.ui.view qweb New
s_mail_block_footer_social_left Footer Left ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_header_view View Online ir.ui.view qweb New
s_masonry_block Masonry ir.ui.view qweb New
s_masonry_block_alternation_image_text_template s_masonry_block_alternation_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_template s_masonry_block_alternation_text_image_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_text_template s_masonry_block_alternation_text_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_template s_masonry_block_alternation_text_template ir.ui.view qweb New
s_masonry_block_default_template s_masonry_block_default_template ir.ui.view qweb New
s_masonry_block_image_texts_image_template s_masonry_block_image_texts_image_template ir.ui.view qweb New
s_masonry_block_images_template s_masonry_block_images_template ir.ui.view qweb New
s_masonry_block_mosaic_template s_masonry_block_mosaic_template ir.ui.view qweb New
s_masonry_block_options s_masonry_block_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_masonry_block_reversed_template s_masonry_block_reversed_template ir.ui.view qweb New
s_masonry_block_texts_image_texts_template s_masonry_block_texts_image_texts_template ir.ui.view qweb New
s_media_list Media List ir.ui.view qweb New
s_numbers Numbers ir.ui.view qweb New
s_picture Picture ir.ui.view qweb New
s_product_list Items ir.ui.view qweb New
s_rating Rating ir.ui.view qweb New
s_rating_options s_rating_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_references References ir.ui.view qweb New
s_showcase Showcase ir.ui.view qweb New
s_text_block Text ir.ui.view qweb New
s_text_highlight Text Highlight ir.ui.view qweb New
s_text_image Text - Image ir.ui.view qweb New
s_three_columns Columns ir.ui.view qweb New
s_title Title ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb Inherits web_editor.snippet_options
snippet_options_background_options snippet_options_background_options ir.ui.view qweb Inherits web_editor.snippet_options_background_options
snippet_options_border_line_widgets snippet_options_border_line_widgets ir.ui.view qweb New
snippet_options_border_widgets snippet_options_border_widgets ir.ui.view qweb New
social_links social_links ir.ui.view qweb New
theme_basic_template theme_basic_template ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
theme_empty_template theme_empty_template ir.ui.view qweb New
unsubscribe_form unsubscribe_form ir.ui.view qweb New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.kanban utm.campaign xpath Inherits utm.utm_campaign_view_kanban
view_mail_mail_statistics_graph Mail Statistics Graph mailing.trace graph New
view_mail_mass_mailing_form mailing.mailing.form mailing.mailing form New
view_mail_mass_mailing_graph mailing.mailing.graph mailing.mailing graph New
view_mail_mass_mailing_kanban mailing.mailing.kanban mailing.mailing kanban New
view_mail_mass_mailing_search mailing.mailing.search mailing.mailing search New
view_mail_mass_mailing_test_form mailing.mailing.test.form mailing.mailing.test form New
view_mail_mass_mailing_tree mailing.mailing.tree mailing.mailing tree New
Models touched (30)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • active_mailing_ids One2many → mailing.mailing
    comodel_name='mailing.mailing' domain=[('state', '!=', 'done'), ('active', '=', True)] inverse_name='mail_server_id' readonly=True string='Active mailing using this mail server'
Public methods (0)

No public methods.

New fields (1)
  • is_mailing_enabled Boolean
    compute='_compute_is_mailing_enabled' help='Whether this model supports marketing mailing capabilities (notably email and SMS).' search='_search_is_mailing_enabled' string='Mailing Enabled'
Public methods (0)

No public methods.

New fields (1)
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (0)

No public methods.

New fields (2)
  • mailing_trace_id Many2one → mailing.trace
    string='Mail Statistics' args: 'mailing.trace'
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model

New fields (1)
  • opt_out_reason_id Many2one → mailing.subscription.optout
    ondelete='restrict' string='Reason' tracking=10 args: 'mailing.subscription.optout'
Public methods (0)

No public methods.

New fields (4)
  • campaign_id Many2one → utm.campaign
    ondelete='set null' string='Mass Mailing Campaign' args: 'utm.campaign'
  • mailing_list_ids Many2many → mailing.list
    string='Mailing List' args: 'mailing.list'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' string='Mass Mailing' args: 'mailing.mailing'
  • mass_mailing_name Char
    help='If set, a mass mailing will be created so that you can track its results in the Email Marketing app.' string='Mass Mailing Name'
Public methods (0)

No public methods.

New fields (2)
  • mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
  • mailing_trace_ids One2many → mailing.trace
    string='Statistics' args: 'mailing.trace', 'mail_mail_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (3)
  • message_mail_with_source(self, source_ref, **kwargs)
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Overrides mail_thread message_new that is called by the mailgateway through message_process. This override updates the document according to the email.
  • message_post_with_source(self, source_ref, **kwargs)

New fields (9)
  • company_name Char
    string='Company Name'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • email Char
    args: 'Email'
  • list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mailing_subscription', 'contact_id', 'list_id'
  • name Char
  • opt_out Boolean
    compute='_compute_opt_out' help='Opt out flag for a specific mailing list. This field should not be used in a view without a unique and active mailing list context.' search='_search_opt_out' args: 'Opt Out'
  • subscription_ids One2many → mailing.subscription
    string='Subscription Information' args: 'mailing.subscription', 'contact_id'
  • tag_ids Many2many → res.partner.category
    string='Tags' args: 'res.partner.category'
  • title_id Many2one → res.partner.title
    string='Title' args: 'res.partner.title'
Public methods (8)
  • action_add_to_mailing_list(self)
  • action_import(self)
  • add_to_list(self, name, list_id)
    @api.model
  • copy(self, default=None)
    @api.returns('self', <expr>)
    Cleans the default_list_ids while duplicating mailing contact in context of a mailing list because we already have subscription lists copied over for newly created contact, no need to add the ones from default_list_ids again
  • create(self, vals_list)
    @api.model_create_multi
    Synchronize default_list_ids (currently used notably for computed fields) default key with subscription_ids given by user when creating contacts. Those two values have the same purpose, adding a list to to the contact either through a direct write on m2m, either through a write on middle model subscription. This is a bit hackish but is due to default_list_ids key being used to compute oupt_out field. This should be cleaned in master but here we simply try to limit issues while keeping current behavior.
  • default_get(self, fields_list)
    When coming from a mailing list we may have a default_list_ids context key. We should use it to create subscription_ids default value that are displayed to the user as list_ids is not displayed on form view.
  • get_import_templates(self)
    @api.model
  • name_create(self, name)
    @api.model

New fields (2)
  • contact_list Text
    help='Contact list that will be imported, one contact per line' args: 'Contact List'
  • mailing_list_ids Many2many → mailing.list
    string='Lists' args: 'mailing.list'
Public methods (2)
  • action_import(self)
    Import each lines of "contact_list" as a new contact.
  • action_open_base_import(self)
    Open the base import wizard to import mailing list contacts with a xlsx file.

New fields (2)
  • contact_ids Many2many → mailing.contact
    string='Contacts' args: 'mailing.contact'
  • mailing_list_id Many2one → mailing.list
    required=True string='Mailing List' args: 'mailing.list'
Public methods (2)
  • action_add_contacts(self)
    Simply add contacts to the mailing list and close wizard.
  • action_add_contacts_and_send_mailing(self)
    Add contacts to the mailing list and redirect to a new mailing on this list.

New fields (5)
  • create_uid Many2one → res.users
    default=<expr> index=True readonly=True args: 'res.users', 'Saved by'
  • mailing_domain Char
    required=True string='Filter Domain'
  • mailing_model_id Many2one → ir.model
    ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    related='mailing_model_id.model' string='Recipients Model Name'
  • name Char
    required=True string='Filter Name'
Public methods (0)

No public methods.

New fields (14)
  • active Boolean
    default=True
  • contact_count Integer
    compute='_compute_mailing_list_statistics' string='Number of Contacts'
  • contact_count_blacklisted Integer
    compute='_compute_mailing_list_statistics' string='Number of Blacklisted'
  • contact_count_email Integer
    compute='_compute_mailing_list_statistics' string='Number of Emails'
  • contact_count_opt_out Integer
    compute='_compute_mailing_list_statistics' string='Number of Opted-out'
  • contact_ids Many2many → mailing.contact
    copy=False string='Mailing Lists' args: 'mailing.contact', 'mailing_subscription', 'list_id', 'contact_id'
  • contact_pct_blacklisted Float
    compute='_compute_mailing_list_statistics' string='Percentage of Blacklisted'
  • contact_pct_bounce Float
    compute='_compute_mailing_list_statistics' string='Percentage of Bouncing'
  • contact_pct_opt_out Float
    compute='_compute_mailing_list_statistics' string='Percentage of Opted-out'
  • is_public Boolean
    default=False help='The mailing list can be accessible by recipients in the subscription management page to allow them to update their preferences.' string='Show In Preferences'
  • mailing_count Integer
    compute='_compute_mailing_count' string='Number of Mailing'
  • mailing_ids Many2many → mailing.mailing
    copy=False string='Mass Mailings' args: 'mailing.mailing', 'mail_mass_mailing_list_rel'
  • name Char
    required=True string='Mailing List'
  • subscription_ids One2many → mailing.subscription
    copy=True depends=['contact_ids'] string='Subscription Information' args: 'mailing.subscription', 'list_id'
Public methods (12)
  • action_merge(self, src_lists, archive)
    Insert all the contact from the mailing lists 'src_lists' to the mailing list in 'self'. Possibility to archive the mailing lists 'src_lists' after the merge except the destination mailing list 'self'.
  • action_open_import(self)
    Open the mailing list contact import wizard.
  • action_send_mailing(self)
    Open the mailing form view, with the current lists set as recipients.
  • action_view_contacts(self)
  • action_view_contacts_blacklisted(self)
  • action_view_contacts_bouncing(self)
  • action_view_contacts_email(self)
  • action_view_contacts_opt_out(self)
  • action_view_mailings(self)
  • close_dialog(self)
  • copy(self, default=None)
  • write(self, vals)

New fields (5)
  • archive_src_lists Boolean
    default=True args: 'Archive source mailing lists'
  • dest_list_id Many2one → mailing.list
    string='Destination Mailing List' args: 'mailing.list'
  • merge_options Selection
    default='new' required=True args: [('new', 'Merge into a new mailing list'), ('existing', 'Merge into an existing mailing list')], 'Merge Option'
  • new_list_name Char
    args: 'New Mailing List Name'
  • src_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list'
Public methods (2)
  • action_mailing_lists_merge(self)
  • default_get(self, fields)
    @api.model

New fields (67)
  • ab_testing_completed Boolean
    related='campaign_id.ab_testing_completed'
  • ab_testing_description Html
    compute='_compute_ab_testing_description' args: 'A/B Testing Description'
  • ab_testing_enabled Boolean
    default=False help='If checked, recipients will be mailed only once for the whole campaign. This lets you send different mailings to randomly selected recipients and test the effectiveness of the mailings, without causing duplicate messages.' string='Allow A/B Testing'
  • ab_testing_is_winner_mailing Boolean
    compute='_compute_ab_testing_is_winner_mailing' args: 'Is the Winner of its Campaign'
  • ab_testing_mailings_count Integer
    related='campaign_id.ab_testing_mailings_count'
  • ab_testing_pc Integer
    default=10 help='Percentage of the contacts that will be mailed. Recipients will be chosen randomly.' string='A/B Testing percentage'
  • ab_testing_schedule_datetime Datetime
    default=<expr> readonly=False related='campaign_id.ab_testing_schedule_datetime'
  • ab_testing_winner_selection Selection
    copy=True default='opened_ratio' readonly=False related='campaign_id.ab_testing_winner_selection'
  • active Boolean
    default=True tracking=True
  • attachment_ids Many2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_arch Html
    sanitize=False string='Body' translate=False
  • body_html Html
    render_engine='qweb' render_options={'post_process': True} sanitize=False string='Body converted to be sent by mail'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Float
    compute='_compute_statistics' string='Bounced Ratio'
  • calendar_date Datetime
    compute='_compute_calendar_date' copy=False help='Date at which the mailing was or will be sent.' store=True args: 'Calendar Date'
  • campaign_id Many2one → utm.campaign
    index=True ondelete='set null' string='UTM Campaign' args: 'utm.campaign'
  • canceled Integer
    compute='_compute_statistics'
  • clicked Integer
    compute='_compute_statistics'
  • clicks_ratio Float
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    string='Color Index'
  • contact_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mail_mass_mailing_list_rel'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    compute='_compute_email_from' precompute=True readonly=False required=True store=True string='Send From'
  • expected Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • favorite Boolean
    copy=False tracking=True args: 'Favorite'
  • favorite_date Datetime
    compute='_compute_favorite_date' copy=False help='When this mailing was added in the favorites' store=True args: 'Favorite Date'
  • is_ab_test_sent Boolean
    compute='_compute_is_ab_test_sent'
  • is_body_empty Boolean
    compute='_compute_is_body_empty'
  • keep_archives Boolean
    string='Keep Archives'
  • kpi_mail_required Boolean
    copy=False args: 'KPI mail required'
  • mail_server_available Boolean
    compute='_compute_mail_server_available' help='Technical field used to know if the user has activated the outgoing mail server option in the settings'
  • mail_server_id Many2one → ir.mail_server
    default=_get_default_mail_server_id help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Mail Server' args: 'ir.mail_server'
  • mailing_domain Char
    compute='_compute_mailing_domain' compute_sudo=False readonly=False store=True string='Domain'
  • mailing_filter_count Integer
    compute='_compute_mailing_filter_count' args: '# Favorite Filters'
  • mailing_filter_domain Char
    related='mailing_filter_id.mailing_domain' args: 'Favorite filter domain'
  • mailing_filter_id Many2one → mailing.filter
    compute='_compute_mailing_filter_id' domain="[('mailing_model_name', '=', mailing_model_name)]" readonly=False store=True string='Favorite Filter' args: 'mailing.filter'
  • mailing_model_id Many2one → ir.model
    default=<expr> domain=[('is_mailing_enabled', '=', True)] ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    readonly=True related='mailing_model_id.model' related_sudo=True string='Recipients Model Name'
  • mailing_model_real Char
    compute='_compute_mailing_model_real' string='Recipients Real Model'
  • mailing_on_mailing_list Boolean
    compute='_compute_mailing_on_mailing_list' string='Based on Mailing Lists'
  • mailing_trace_ids One2many → mailing.trace
    string='Emails Statistics' args: 'mailing.trace', 'mass_mailing_id'
  • mailing_type Selection
    default='mail' required=True string='Mailing Type' args: [('mail', 'Email')]
  • mailing_type_description Char
    compute='_compute_mailing_type_description' args: 'Mailing Type Description'
  • medium_id Many2one → utm.medium
    compute='_compute_medium_id' help='UTM Medium: delivery method (email, sms, ...)' ondelete='restrict' readonly=False store=True string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Scheduled date'
  • next_departure_is_past Boolean
    compute='_compute_next_departure'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Float
    compute='_compute_statistics' string='Opened Ratio'
  • pending Integer
    compute='_compute_statistics'
  • preview Char
    help='Catchy preview sentence that encourages recipients to open this email.\nIn most inboxes, this is displayed next to the subject.\nKeep it empty if you prefer the first characters of your email content to appear instead.' render_engine='inline_template' render_options={'post_process': True} translate=False args: 'Preview'
  • process Integer
    compute='_compute_statistics'
  • received_ratio Float
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Float
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    compute='_compute_reply_to' help='Preferred Reply-To Address' readonly=False store=True string='Reply To'
  • reply_to_mode Selection
    compute='_compute_reply_to_mode' help='Thread: replies go to target document. Email: replies are routed to a given email.' readonly=False store=True string='Reply-To Mode' args: [('update', 'Recipient Followers'), ('new', 'Specified Email Address')]
  • schedule_date Datetime
    compute='_compute_schedule_date' copy=True readonly=False store=True string='Scheduled for' tracking=True
  • schedule_type Selection
    default='now' readonly=False required=True string='Schedule' args: [('now', 'Send now'), ('scheduled', 'Send on')]
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False string='Sent Date'
  • state Selection
    copy=False default='draft' group_expand='_group_expand_states' required=True string='Status' tracking=True args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • subject Char
    required=True translate=False args: 'Subject'
  • total Integer
    compute='_compute_total'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
  • warning_message Char
    compute='_compute_warning_message' help='Warning message displayed in the mailing form view' args: 'Warning Message'
Public methods (31)
  • action_cancel(self)
  • action_compare_versions(self)
  • action_duplicate(self)
  • action_fetch_favorites(self, extra_domain=None)
    @api.model
    Return all mailings set as favorite and skip mailings with empty body. Return archived mailing templates as well, so the user can archive the templates while keeping using it, without cluttering the Kanban view if they're a lot of templates.
  • action_launch(self)
  • action_put_in_queue(self)
  • action_reload(self)
  • action_remove_favorite(self)
    Remove the current mailing from the favorites list.
  • action_retry_failed(self)
    Remove all failed emails and their traces, and try sending them again.
  • action_schedule(self)
  • action_select_as_winner(self)
  • action_send_mail(self, res_ids=None)
  • action_send_winner_mailing(self)
    Send the winner mailing based on the winner selection field. This action is used in 2 cases: - When the user clicks on a button to send the winner mailing. There is only one mailing in self - When the cron is executed to send winner mailing based on the A/B testing schedule datetime. In this case 'self' contains all the mailing for the campaigns so we just need to take the first to determine the winner. If the winner mailing is computed automatically, we sudo the mailings of the campaign in order to sort correctly the mailings based on the selection that can be used with sub-modules like CRM and Sales
  • action_set_favorite(self)
    Add the current mailing in the favorites list.
  • action_test(self)
  • action_view_bounced(self)
  • action_view_clicked(self)
  • action_view_delivered(self)
  • action_view_mailing_contacts(self)
    Show the mailing contacts who are in a mailing list selected for this mailing.
  • action_view_opened(self)
  • action_view_replied(self)
  • action_view_traces_canceled(self)
  • action_view_traces_failed(self)
  • action_view_traces_process(self)
  • action_view_traces_scheduled(self)
  • action_view_traces_sent(self)
  • convert_links(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • write(self, values)

New fields (2)
  • mass_mailing_id Many2one → mailing.mailing
    required=True args: 'mailing.mailing'
  • schedule_date Datetime
    string='Scheduled for'
Public methods (1)
  • action_schedule_date(self)

New fields (2)
  • email_to Text
    default=<expr> help='Carriage-return-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' required=True string='Mailing' args: 'mailing.mailing'
Public methods (1)
  • send_mail_test(self)

New fields (7)
  • contact_id Many2one → mailing.contact
    ondelete='cascade' required=True string='Contact' args: 'mailing.contact'
  • is_blacklisted Boolean
    readonly=False related='contact_id.is_blacklisted' store=False
  • list_id Many2one → mailing.list
    ondelete='cascade' required=True string='Mailing List' args: 'mailing.list'
  • message_bounce Integer
    readonly=False related='contact_id.message_bounce' store=False
  • opt_out Boolean
    default=False help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • opt_out_datetime Datetime
    compute='_compute_opt_out_datetime' readonly=False store=True string='Unsubscription Date'
  • opt_out_reason_id Many2one → mailing.subscription.optout
    ondelete='restrict' string='Reason' args: 'mailing.subscription.optout'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (3)
  • is_feedback Boolean
    string='Allow Feedback'
  • name Char
    string='Reason' translate=True
  • sequence Integer
    default=10 string='Sequence'
Public methods (0)

No public methods.

New fields (19)
  • campaign_id Many2one
    index='btree_not_null' readonly=True related='mass_mailing_id.campaign_id' store=True string='Campaign'
  • email Char
    help='Normalized email address' string='Email'
  • failure_reason Text
    copy=False readonly=True args: 'Failure reason'
  • failure_type Selection
    selection=[('unknown', 'Unknown error'), ('mail_bounce', 'Bounce'), ('mail_email_invalid', 'Invalid email address'), ('mail_email_missing', 'Missing email address'), ('mail_from_invalid', 'Invalid from address'), ('mail_from_missing', 'Missing from address'), ('mail_smtp', 'Connection failed (outgoing mail server problem)'), ('mail_bl', 'Blacklisted Address'), ('mail_dup', 'Duplicated Email'), ('mail_optout', 'Opted Out')] string='Failure type'
  • links_click_datetime Datetime
    help='Stores last click datetime in case of multi clicks.' args: 'Clicked On'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mailing_trace_id'
  • mail_mail_id Many2one → mail.mail
    index='btree_not_null' string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index='btree_not_null' string='Mail ID (tech)'
  • mass_mailing_id Many2one → mailing.mailing
    index=True ondelete='cascade' string='Mailing' args: 'mailing.mailing'
  • medium_id Many2one
    related='mass_mailing_id.medium_id'
  • message_id Char
    string='Message-ID'
  • model Char
    required=True string='Document model'
  • open_datetime Datetime
    args: 'Opened On'
  • reply_datetime Datetime
    args: 'Replied On'
  • res_id Many2oneReference
    model_field='model' string='Document ID'
  • sent_datetime Datetime
    args: 'Sent On'
  • source_id Many2one
    related='mass_mailing_id.source_id'
  • trace_status Selection
    default='outgoing' selection=[('outgoing', 'Outgoing'), ('process', 'Processing'), ('pending', 'Sent'), ('sent', 'Delivered'), ('open', 'Opened'), ('reply', 'Replied'), ('bounce', 'Bounced'), ('error', 'Exception'), ('cancel', 'Canceled')] string='Status'
  • trace_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Email')]
Public methods (9)
  • action_view_contact(self)
  • create(self, values_list)
    @api.model_create_multi
  • set_bounced(self, domain=None, bounce_message=False)
  • set_canceled(self, domain=None)
  • set_clicked(self, domain=None)
  • set_failed(self, domain=None, failure_type=False)
  • set_opened(self, domain=None)
    Reply / Open are a bit shared in various processes: reply implies open, click implies open. Let us avoid status override by skipping traces that are not already opened or replied.
  • set_replied(self, domain=None)
  • set_sent(self, domain=None)

New fields (17)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mailing Campaign'
  • canceled Integer
    readonly=True
  • clicked Integer
    readonly=True
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • error Integer
    readonly=True
  • mailing_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Mail')]
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • pending Integer
    readonly=True
  • processing Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True string='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    Mass Mail Statistical Report: based on mailing.trace that models the various statistics collected for each mailing, and mailing.mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • group_mass_mailing_campaign Boolean
    help='This is useful if your marketing campaigns are composed of several emails' implied_group='mass_mailing.group_mass_mailing_campaign' string='Mailing Campaigns'
  • mass_mailing_mail_server_id Many2one → ir.mail_server
    config_parameter='mass_mailing.mail_server_id' string='Mail Server' args: 'ir.mail_server'
  • mass_mailing_outgoing_mail_server Boolean
    config_parameter='mass_mailing.outgoing_mail_server' help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Dedicated Server'
  • mass_mailing_reports Boolean
    config_parameter='mass_mailing.mass_mailing_reports' help='Check how well your mailing is doing a day after it has been sent.' string='24H Stat Mailing Reports'
  • show_blacklist_buttons Boolean
    config_parameter='mass_mailing.show_blacklist_buttons' help='Allow the recipient to manage themselves their state in the blacklist via the unsubscription page.' string='Blacklist Option when Unsubscribing'
Public methods (1)
  • set_values(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • systray_get_activities(self)
    @api.model
    Update systray name of mailing.mailing from "Mass Mailing" to "Email Marketing".

New fields (12)
  • ab_testing_completed Boolean
    compute='_compute_ab_testing_completed' copy=False readonly=True store=True args: 'A/B Testing Campaign Finished'
  • ab_testing_mailings_count Integer
    compute='_compute_mailing_mail_count' args: 'A/B Test Mailings #'
  • ab_testing_schedule_datetime Datetime
    default=<expr> help='Date that will be used to know when to determine and send the winner mailing' args: 'Send Final On'
  • ab_testing_winner_mailing_id Many2one → mailing.mailing
    copy=False args: 'mailing.mailing', 'A/B Campaign Winner Mailing'
  • ab_testing_winner_selection Selection
    default='opened_ratio' help='Selection to determine the winner mailing that will be sent.' string='Winner Selection' args: [('manual', 'Manual'), ('opened_ratio', 'Highest Open Rate'), ('clicks_ratio', 'Highest Click Rate'), ('replied_ratio', 'Highest Reply Rate')]
  • bounced_ratio Float
    compute='_compute_statistics' string='Bounced Ratio'
  • is_mailing_campaign_activated Boolean
    compute='_compute_is_mailing_campaign_activated'
  • mailing_mail_count Integer
    compute='_compute_mailing_mail_count' groups='mass_mailing.group_mass_mailing_user' args: 'Number of Mass Mailing'
  • mailing_mail_ids One2many → mailing.mailing
    domain=[('mailing_type', '=', 'mail')] groups='mass_mailing.group_mass_mailing_user' string='Mass Mailings' args: 'mailing.mailing', 'campaign_id'
  • opened_ratio Float
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Float
    compute='_compute_statistics' string='Received Ratio'
  • replied_ratio Float
    compute='_compute_statistics' string='Replied Ratio'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/16.0/mass_mailing
VERSION
VERSION 2.5
CATEGORY
CATEGORYMarketing/Email Marketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, David Monjoie, Xavier Morel, Nicolas Lempereur, Aaron Bohy, GitHub, Damien Bouvy, Yannick Tivisse, qsm-odoo, Dharmraj Jhala, Romain Derie, Christophe Monniez, Jorge Pinna Puissant, Julien Castiaux, Aurélien Warnon, Xavier-Do, Romeo Fragomeli, Victor Feyens, Adrien Dieudonné, Paul Morelle, Anh Thao Pham (pta), Nikunj Ladava, std-odoo, Achraf (abz), Philémon van Helden, Nasreddin Boulif (bon), Tiffany Chang (tic), Gorash, Younn Olivier, Mathieu Duckerts-Antoine, Pierre Paridans, abd-msyukyu-odoo, Romain Estievenart, Benjamin Vray, Stefan-Calin Crainiciuc (stcc), Benoit Socias, Hubert Van de Walle (huvw), MerlinGuillaume, diagnoza, Antoine Guenet, Florian Charlier, Patrick Hoste, Yolann Sabaux, Nicolas Bayet, Hubert Van De Walle, Achraf, dht-odoo, Fabio Barbero, Renaud Thiry, Julien Banken, Ipsita Borisagar, niyasraphy, bve-odoo, jorv, alsh-odoo, Louis Wicket (wil), Mahamadasif Ansari, miad-odoo, amdi-odoo, Pierre-Yves Dufays, Soukéina Bojabza, Maruan Aguerdouh (magm), Sébastien Geelen (sge), Bruno Boi, Antoine (ande), Mitul Shah, FrancoisGe, Michael (mcm), Mayurrajsinh Rathod, Vivek Pathak, Adrien Schoffeniels, Mahdi Cheikh Rouhou (macr), Noe Antoine, Walid (wasa), Paul Stroobant, maad-odoo, Deependra Solanki, dhba-odoo, visp-odoo, Jay Savaliya, stefanorigano (SRI), MAHAMADASIF ANSARI, Umesh Gupta, Astik Singh, BHanq, Pratik Raval, Rodopho Cammarosano de Lima (rcdl), Jérémy Hennecart (jeh), Martin Trigaux (mat), Rodolpho Lima, aath-odoo, shsa-odoo, vishal padhiyar, Rémi - Le Filament, Mathieu (mano), Manushi Shah (mash), Clément Cardot, Elisabeth Dickinson, Pratik Raval (PRRA), Xavier Luyckx (xlu), guce, yagp-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/app/email-marketing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:40:46
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - contacts
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - utm
    - link_tracker
    - web_editor
    - web_kanban_gauge
    - social_media
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (120)
XML IDNameModelTypeStatus
ab_testing_description Mass Mailing: A/B Test Description ir.ui.view qweb New
digest_mail_main digest_mail_main ir.ui.view qweb Inherits digest.digest_mail_main
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb Inherits web_editor.snippets
iframe_css_assets_edit iframe_css_assets_edit ir.ui.view qweb New
iframe_css_assets_readonly iframe_css_assets_readonly ir.ui.view qweb New
link_tracker_click_view_form link.tracker.click.view.form.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_form
link_tracker_click_view_graph link.tracker.click.view.graph.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_graph
link_tracker_click_view_search link.tracker.click.view.search.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_search
link_tracker_click_view_tree link.tracker.click.view.tree.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_tree
link_tracker_view_form link.tracker.view.form.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_form
link_tracker_view_search link.tracker.view.search.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_search
mailing_contact_import_view_form mailing.contact.import.view.form mailing.contact.import form New
mailing_contact_subscription_view_form mailing.contact.subscription.view.form mailing.contact.subscription form New
mailing_contact_subscription_view_search mailing.contact.subscription.view.search mailing.contact.subscription search New
mailing_contact_subscription_view_tree mailing.contact.subscription.view.tree mailing.contact.subscription tree New
mailing_contact_to_list_view_form mailing.contact.to.list.view.form mailing.contact.to.list form New
mailing_contact_view_form mailing.contact.view.form mailing.contact form New
mailing_contact_view_graph mailing.contact.view.graph mailing.contact graph New
mailing_contact_view_kanban mailing.contact.view.kanban mailing.contact kanban New
mailing_contact_view_pivot mailing.contact.pivot mailing.contact pivot New
mailing_contact_view_search mailing.contact.view.search mailing.contact search New
mailing_contact_view_tree mailing.contact.view.tree mailing.contact tree New
mailing_filter_view_form mailing.filter.view.form mailing.filter form New
mailing_filter_view_search mailing.filter.view.search mailing.filter search New
mailing_filter_view_tree mailing.filter.view.tree mailing.filter tree New
mailing_list_merge_view_form mailing.list.merge.form mailing.list.merge form New
mailing_list_view_form mailing.list.form mailing.list form New
mailing_list_view_form_simplified mailing.list.form.simplified mailing.list form New
mailing_list_view_kanban mailing.list.view.kanban mailing.list kanban New
mailing_list_view_search mailing.list.view.search mailing.list search New
mailing_list_view_tree mailing.list.view.tree mailing.list tree New
mailing_mailing_schedule_date_view_form mailing.mailing.schedule.date.view.form mailing.mailing.schedule.date form New
mailing_mailing_view_calendar mailing.mailing.view.calendar mailing.mailing calendar New
mailing_mailing_view_form_full_width mailing.mailing.view.form.full.width mailing.mailing xpath Inherits mass_mailing.view_mail_mass_mailing_form
mailing_report_deactivated Report Unsubscribed ir.ui.view qweb New
mailing_trace_report_view_graph mailing.trace.report.view.graph mailing.trace.report graph New
mailing_trace_report_view_pivot mailing.trace.report.view.pivot mailing.trace.report pivot New
mailing_trace_report_view_search mailing.trace.report.view.search mailing.trace.report search New
mailing_trace_report_view_tree mailing.trace.report.view.tree mailing.trace.report tree New
mailing_trace_view_form mailing.trace.view.form mailing.trace form New
mailing_trace_view_search mailing.trace.view.search mailing.trace search New
mailing_trace_view_tree mailing.trace.view.tree mailing.trace tree New
mailing_trace_view_tree_mail mailing.trace.view.tree.mail mailing.trace tree New
mass_mailing.layout Mass Mailing Layout ir.ui.view qweb New
mass_mailing.mass_mailing_kpi_link_trackers Marketing: mailing link trackers statistic ir.ui.view qweb New
mass_mailing_mail_layout mass_mailing_mail_layout ir.ui.view qweb New
mass_mailing_mail_style mass_mailing_mail_style ir.ui.view qweb New
page_unsubscribe Unsubscribe ir.ui.view qweb New
page_unsubscribed Unsubscribed ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.mass.mailing res.config.settings xpath Inherits base.res_config_settings_view_form
s_alert Alert ir.ui.view qweb New
s_alert_options s_alert_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_blockquote Blockquote ir.ui.view qweb New
s_call_to_action Call to Action ir.ui.view qweb New
s_color_blocks_2 Big Boxes ir.ui.view qweb New
s_company_team Team ir.ui.view qweb New
s_comparisons Comparisons ir.ui.view qweb New
s_coupon_code Promo Code ir.ui.view qweb New
s_cover Cover ir.ui.view qweb New
s_event Event ir.ui.view qweb New
s_features Features ir.ui.view qweb New
s_features_grid Features Grid ir.ui.view qweb New
s_hr Separator ir.ui.view qweb Inherits web_editor.s_hr
s_hr_options s_hr_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_image_text Image - Text ir.ui.view qweb New
s_mail_block_discount1 Discount Offer ir.ui.view qweb New
s_mail_block_footer_social Footer Center ir.ui.view qweb New
s_mail_block_footer_social_left Footer Left ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_header_view View Online ir.ui.view qweb New
s_masonry_block Masonry ir.ui.view qweb New
s_masonry_block_alternation_image_text_template s_masonry_block_alternation_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_template s_masonry_block_alternation_text_image_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_text_template s_masonry_block_alternation_text_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_template s_masonry_block_alternation_text_template ir.ui.view qweb New
s_masonry_block_default_template s_masonry_block_default_template ir.ui.view qweb New
s_masonry_block_image_texts_image_template s_masonry_block_image_texts_image_template ir.ui.view qweb New
s_masonry_block_images_template s_masonry_block_images_template ir.ui.view qweb New
s_masonry_block_mosaic_template s_masonry_block_mosaic_template ir.ui.view qweb New
s_masonry_block_options s_masonry_block_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_masonry_block_reversed_template s_masonry_block_reversed_template ir.ui.view qweb New
s_masonry_block_texts_image_texts_template s_masonry_block_texts_image_texts_template ir.ui.view qweb New
s_media_list Media List ir.ui.view qweb New
s_numbers Numbers ir.ui.view qweb New
s_picture Picture ir.ui.view qweb New
s_product_list Items ir.ui.view qweb New
s_rating Rating ir.ui.view qweb New
s_rating_options s_rating_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_references References ir.ui.view qweb New
s_showcase Showcase ir.ui.view qweb New
s_text_block Text ir.ui.view qweb New
s_text_highlight Text Highlight ir.ui.view qweb New
s_text_image Text - Image ir.ui.view qweb New
s_three_columns Columns ir.ui.view qweb New
s_title Title ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb Inherits web_editor.snippet_options
snippet_options_background_options snippet_options_background_options ir.ui.view qweb Inherits web_editor.snippet_options_background_options
snippet_options_border_line_widgets snippet_options_border_line_widgets ir.ui.view qweb New
snippet_options_border_widgets snippet_options_border_widgets ir.ui.view qweb New
snippet_options_extra_shapes snippet_options_extra_shapes ir.ui.view qweb Inherits web_editor.snippet_options
snippet_options_image_styles snippet_options_image_styles ir.ui.view qweb Inherits web_editor.snippet_options
social_links social_links ir.ui.view qweb New
theme_basic_template theme_basic_template ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
theme_empty_template theme_empty_template ir.ui.view qweb New
unsubscribe unsubscribe ir.ui.view qweb New
unsubscribed unsubscribed ir.ui.view qweb New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.kanban utm.campaign xpath Inherits utm.utm_campaign_view_kanban
view Browser View ir.ui.view qweb New
view_mail_mail_statistics_graph Mail Statistics Graph mailing.trace graph New
view_mail_mass_mailing_form mailing.mailing.form mailing.mailing form New
view_mail_mass_mailing_graph mailing.mailing.graph mailing.mailing graph New
view_mail_mass_mailing_kanban mailing.mailing.kanban mailing.mailing kanban New
view_mail_mass_mailing_search mailing.mailing.search mailing.mailing search New
view_mail_mass_mailing_test_form mailing.mailing.test.form mailing.mailing.test form New
view_mail_mass_mailing_tree mailing.mailing.tree mailing.mailing tree New
Models touched (29)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (1)
  • active_mailing_ids One2many → mailing.mailing
    comodel_name='mailing.mailing' domain=[('state', '!=', 'done'), ('active', '=', True)] inverse_name='mail_server_id' readonly=True string='Active mailing using this mail server'
Public methods (0)

No public methods.

New fields (1)
  • is_mailing_enabled Boolean
    compute='_compute_is_mailing_enabled' help='Whether this model supports marketing mailing capabilities (notably email and SMS).' search='_search_is_mailing_enabled' string='Mailing Enabled'
Public methods (0)

No public methods.

New fields (1)
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (0)

No public methods.

New fields (2)
  • mailing_trace_id Many2one → mailing.trace
    string='Mail Statistics' args: 'mailing.trace'
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model

New fields (4)
  • campaign_id Many2one → utm.campaign
    ondelete='set null' string='Mass Mailing Campaign' args: 'utm.campaign'
  • mailing_list_ids Many2many → mailing.list
    string='Mailing List' args: 'mailing.list'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' string='Mass Mailing' args: 'mailing.mailing'
  • mass_mailing_name Char
    help='If set, a mass mailing will be created so that you can track its results in the Email Marketing app.' string='Mass Mailing Name'
Public methods (1)
  • get_mail_values(self, res_ids)
    Override method that generated the mail content by creating the mailing.trace values in the o2m of mail_mail, when doing pure email mass mailing.

New fields (2)
  • mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
  • mailing_trace_ids One2many → mailing.trace
    string='Statistics' args: 'mailing.trace', 'mail_mail_id'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Overrides mail_thread message_new that is called by the mailgateway through message_process. This override updates the document according to the email.
  • message_post_with_template(self, template_id, **kwargs)

New fields (9)
  • company_name Char
    string='Company Name'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • email Char
    args: 'Email'
  • list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mailing_contact_list_rel', 'contact_id', 'list_id'
  • name Char
  • opt_out Boolean
    compute='_compute_opt_out' help='Opt out flag for a specific mailing list. This field should not be used in a view without a unique and active mailing list context.' search='_search_opt_out' args: 'Opt Out'
  • subscription_list_ids One2many → mailing.contact.subscription
    string='Subscription Information' args: 'mailing.contact.subscription', 'contact_id'
  • tag_ids Many2many → res.partner.category
    string='Tags' args: 'res.partner.category'
  • title_id Many2one → res.partner.title
    string='Title' args: 'res.partner.title'
Public methods (8)
  • action_add_to_mailing_list(self)
  • add_to_list(self, name, list_id)
    @api.model
  • copy(self, default=None)
    @api.returns('self', <expr>)
    Cleans the default_list_ids while duplicating mailing contact in context of a mailing list because we already have subscription lists copied over for newly created contact, no need to add the ones from default_list_ids again
  • create(self, vals_list)
    @api.model_create_multi
    Synchronize default_list_ids (currently used notably for computed fields) default key with subscription_list_ids given by user when creating contacts. Those two values have the same purpose, adding a list to to the contact either through a direct write on m2m, either through a write on middle model subscription. This is a bit hackish but is due to default_list_ids key being used to compute oupt_out field. This should be cleaned in master but here we simply try to limit issues while keeping current behavior.
  • default_get(self, fields_list)
    When coming from a mailing list we may have a default_list_ids context key. We should use it to create subscription_list_ids default value that are displayed to the user as list_ids is not displayed on form view.
  • get_import_templates(self)
    @api.model
  • get_name_email(self, name)
  • name_create(self, name)
    @api.model

New fields (2)
  • contact_list Text
    help='Contact list that will be imported, one contact per line' args: 'Contact List'
  • mailing_list_ids Many2many → mailing.list
    string='Lists' args: 'mailing.list'
Public methods (2)
  • action_import(self)
    Import each lines of "contact_list" as a new contact.
  • action_open_base_import(self)
    Open the base import wizard to import mailing list contacts with a xlsx file.

New fields (6)
  • contact_id Many2one → mailing.contact
    ondelete='cascade' required=True string='Contact' args: 'mailing.contact'
  • is_blacklisted Boolean
    readonly=False related='contact_id.is_blacklisted' store=False
  • list_id Many2one → mailing.list
    ondelete='cascade' required=True string='Mailing List' args: 'mailing.list'
  • message_bounce Integer
    readonly=False related='contact_id.message_bounce' store=False
  • opt_out Boolean
    default=False help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • unsubscription_date Datetime
    string='Unsubscription Date'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (6)
  • contact_id Many2one → mailing.contact
    ondelete='cascade' required=True string='Contact' args: 'mailing.contact'
  • is_blacklisted Boolean
    readonly=False related='contact_id.is_blacklisted' store=False
  • list_id Many2one → mailing.list
    ondelete='cascade' required=True string='Mailing List' args: 'mailing.list'
  • message_bounce Integer
    readonly=False related='contact_id.message_bounce' store=False
  • opt_out Boolean
    default=False help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • unsubscription_date Datetime
    string='Unsubscription Date'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • contact_ids Many2many → mailing.contact
    string='Contacts' args: 'mailing.contact'
  • mailing_list_id Many2one → mailing.list
    required=True string='Mailing List' args: 'mailing.list'
Public methods (2)
  • action_add_contacts(self)
    Simply add contacts to the mailing list and close wizard.
  • action_add_contacts_and_send_mailing(self)
    Add contacts to the mailing list and redirect to a new mailing on this list.

New fields (5)
  • create_uid Many2one → res.users
    default=<expr> index=True readonly=True args: 'res.users', 'Saved by'
  • mailing_domain Char
    required=True string='Filter Domain'
  • mailing_model_id Many2one → ir.model
    ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    related='mailing_model_id.model' string='Recipients Model Name'
  • name Char
    required=True string='Filter Name'
Public methods (0)

No public methods.

New fields (14)
  • active Boolean
    default=True
  • contact_count Integer
    compute='_compute_mailing_list_statistics' string='Number of Contacts'
  • contact_count_blacklisted Integer
    compute='_compute_mailing_list_statistics' string='Number of Blacklisted'
  • contact_count_email Integer
    compute='_compute_mailing_list_statistics' string='Number of Emails'
  • contact_count_opt_out Integer
    compute='_compute_mailing_list_statistics' string='Number of Opted-out'
  • contact_ids Many2many → mailing.contact
    copy=False string='Mailing Lists' args: 'mailing.contact', 'mailing_contact_list_rel', 'list_id', 'contact_id'
  • contact_pct_blacklisted Float
    compute='_compute_mailing_list_statistics' string='Percentage of Blacklisted'
  • contact_pct_bounce Float
    compute='_compute_mailing_list_statistics' string='Percentage of Bouncing'
  • contact_pct_opt_out Float
    compute='_compute_mailing_list_statistics' string='Percentage of Opted-out'
  • is_public Boolean
    default=True help='The mailing list can be accessible by recipients in the subscription management page to allows them to update their preferences.' string='Show In Preferences'
  • mailing_count Integer
    compute='_compute_mailing_list_count' string='Number of Mailing'
  • mailing_ids Many2many → mailing.mailing
    copy=False string='Mass Mailings' args: 'mailing.mailing', 'mail_mass_mailing_list_rel'
  • name Char
    required=True string='Mailing List'
  • subscription_ids One2many → mailing.contact.subscription
    copy=True depends=['contact_ids'] string='Subscription Information' args: 'mailing.contact.subscription', 'list_id'
Public methods (13)
  • action_merge(self, src_lists, archive)
    Insert all the contact from the mailing lists 'src_lists' to the mailing list in 'self'. Possibility to archive the mailing lists 'src_lists' after the merge except the destination mailing list 'self'.
  • action_open_import(self)
    Open the mailing list contact import wizard.
  • action_send_mailing(self)
    Open the mailing form view, with the current lists set as recipients.
  • action_view_contacts(self)
  • action_view_contacts_blacklisted(self)
  • action_view_contacts_bouncing(self)
  • action_view_contacts_email(self)
  • action_view_contacts_opt_out(self)
  • action_view_mailings(self)
  • close_dialog(self)
  • copy(self, default=None)
  • name_get(self)
  • write(self, vals)

New fields (5)
  • archive_src_lists Boolean
    default=True args: 'Archive source mailing lists'
  • dest_list_id Many2one → mailing.list
    string='Destination Mailing List' args: 'mailing.list'
  • merge_options Selection
    default='new' required=True args: [('new', 'Merge into a new mailing list'), ('existing', 'Merge into an existing mailing list')], 'Merge Option'
  • new_list_name Char
    args: 'New Mailing List Name'
  • src_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list'
Public methods (2)
  • action_mailing_lists_merge(self)
  • default_get(self, fields)
    @api.model

New fields (61)
  • ab_testing_completed Boolean
    related='campaign_id.ab_testing_completed' store=True
  • ab_testing_description Html
    compute='_compute_ab_testing_description' args: 'A/B Testing Description'
  • ab_testing_enabled Boolean
    default=False help='If checked, recipients will be mailed only once for the whole campaign. This lets you send different mailings to randomly selected recipients and test the effectiveness of the mailings, without causing duplicate messages.' string='Allow A/B Testing'
  • ab_testing_mailings_count Integer
    related='campaign_id.ab_testing_mailings_count'
  • ab_testing_pc Integer
    default=10 help='Percentage of the contacts that will be mailed. Recipients will be chosen randomly.' string='A/B Testing percentage'
  • ab_testing_schedule_datetime Datetime
    default=<expr> readonly=False related='campaign_id.ab_testing_schedule_datetime'
  • ab_testing_winner_selection Selection
    copy=True default='opened_ratio' readonly=False related='campaign_id.ab_testing_winner_selection'
  • active Boolean
    default=True tracking=True
  • attachment_ids Many2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_arch Html
    sanitize=False string='Body' translate=False
  • body_html Html
    render_engine='qweb' sanitize=False string='Body converted to be sent by mail'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • calendar_date Datetime
    compute='_compute_calendar_date' copy=False help='Date at which the mailing was or will be sent.' store=True args: 'Calendar Date'
  • campaign_id Many2one → utm.campaign
    index=True ondelete='set null' string='UTM Campaign' args: 'utm.campaign'
  • canceled Integer
    compute='_compute_statistics'
  • clicked Integer
    compute='_compute_statistics'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    string='Color Index'
  • contact_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mail_mass_mailing_list_rel'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    compute='_compute_email_from' precompute=True readonly=False required=True store=True string='Send From'
  • expected Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • favorite Boolean
    copy=False tracking=True args: 'Favorite'
  • favorite_date Datetime
    compute='_compute_favorite_date' copy=False help='When this mailing was added in the favorites' store=True args: 'Favorite Date'
  • is_body_empty Boolean
    compute='_compute_is_body_empty'
  • keep_archives Boolean
    string='Keep Archives'
  • kpi_mail_required Boolean
    copy=False args: 'KPI mail required'
  • mail_server_available Boolean
    compute='_compute_mail_server_available' help='Technical field used to know if the user has activated the outgoing mail server option in the settings'
  • mail_server_id Many2one → ir.mail_server
    default=_get_default_mail_server_id help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Mail Server' args: 'ir.mail_server'
  • mailing_domain Char
    compute='_compute_mailing_domain' readonly=False store=True string='Domain'
  • mailing_filter_count Integer
    compute='_compute_mailing_filter_count' args: '# Favorite Filters'
  • mailing_filter_domain Char
    related='mailing_filter_id.mailing_domain' args: 'Favorite filter domain'
  • mailing_filter_id Many2one → mailing.filter
    compute='_compute_mailing_filter_id' domain="[('mailing_model_name', '=', mailing_model_name)]" readonly=False store=True string='Favorite Filter' args: 'mailing.filter'
  • mailing_model_id Many2one → ir.model
    default=<expr> domain=[('is_mailing_enabled', '=', True)] ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    readonly=True related='mailing_model_id.model' related_sudo=True string='Recipients Model Name'
  • mailing_model_real Char
    compute='_compute_mailing_model_real' string='Recipients Real Model'
  • mailing_trace_ids One2many → mailing.trace
    string='Emails Statistics' args: 'mailing.trace', 'mass_mailing_id'
  • mailing_type Selection
    default='mail' required=True string='Mailing Type' args: [('mail', 'Email')]
  • mailing_type_description Char
    compute='_compute_mailing_type_description' args: 'Mailing Type Description'
  • medium_id Many2one → utm.medium
    compute='_compute_medium_id' help='UTM Medium: delivery method (email, sms, ...)' ondelete='restrict' readonly=False store=True string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Scheduled date'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • preview Char
    help='Catchy preview sentence that encourages recipients to open this email.\nIn most inboxes, this is displayed next to the subject.\nKeep it empty if you prefer the first characters of your email content to appear instead.' translate=False args: 'Preview'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    compute='_compute_reply_to' help='Preferred Reply-To Address' readonly=False store=True string='Reply To'
  • reply_to_mode Selection
    compute='_compute_reply_to_mode' help='Thread: replies go to target document. Email: replies are routed to a given email.' readonly=False store=True string='Reply-To Mode' args: [('update', 'Recipient Followers'), ('new', 'Specified Email Address')]
  • schedule_date Datetime
    compute='_compute_schedule_date' copy=True readonly=True states={'draft': [('readonly', False)], 'in_queue': [('readonly', False)]} store=True string='Scheduled for' tracking=True
  • schedule_type Selection
    default='now' readonly=True required=True states={'draft': [('readonly', False)], 'in_queue': [('readonly', False)]} string='Schedule' args: [('now', 'Send now'), ('scheduled', 'Send on')]
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False string='Sent Date'
  • state Selection
    copy=False default='draft' group_expand='_group_expand_states' required=True string='Status' tracking=True args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • subject Char
    required=True translate=False args: 'Subject'
  • total Integer
    compute='_compute_total'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
  • warning_message Char
    compute='_compute_warning_message' help='Warning message displayed in the mailing form view' args: 'Warning Message'
Public methods (30)
  • action_cancel(self)
  • action_compare_versions(self)
  • action_duplicate(self)
  • action_fetch_favorites(self, extra_domain=None)
    @api.model
    Return all mailings set as favorite and skip mailings with empty body. Return archived mailing templates as well, so the user can archive the templates while keeping using it, without cluttering the Kanban view if they're a lot of templates.
  • action_launch(self)
  • action_put_in_queue(self)
  • action_remove_favorite(self)
    Remove the current mailing from the favorites list.
  • action_retry_failed(self)
  • action_schedule(self)
  • action_select_as_winner(self)
  • action_send_mail(self, res_ids=None)
  • action_send_winner_mailing(self)
    Send the winner mailing based on the winner selection field. This action is used in 2 cases: - When the user clicks on a button to send the winner mailing. There is only one mailing in self - When the cron is executed to send winner mailing based on the A/B testing schedule datetime. In this case 'self' contains all the mailing for the campaigns so we just need to take the first to determine the winner. If the winner mailing is computed automatically, we sudo the mailings of the campaign in order to sort correctly the mailings based on the selection that can be used with sub-modules like CRM and Sales
  • action_set_favorite(self)
    Add the current mailing in the favorites list.
  • action_test(self)
  • action_view_bounced(self)
  • action_view_clicked(self)
  • action_view_delivered(self)
  • action_view_mailing_contacts(self)
    Show the mailing contacts who are in a mailing list selected for this mailing.
  • action_view_opened(self)
  • action_view_replied(self)
  • action_view_traces_canceled(self)
  • action_view_traces_failed(self)
  • action_view_traces_scheduled(self)
  • action_view_traces_sent(self)
  • convert_links(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • update_opt_out(self, email, list_ids, value)
  • write(self, values)

New fields (2)
  • mass_mailing_id Many2one → mailing.mailing
    required=True args: 'mailing.mailing'
  • schedule_date Datetime
    string='Scheduled for'
Public methods (1)
  • action_schedule_date(self)

New fields (2)
  • email_to Text
    default=<expr> help='Carriage-return-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' required=True string='Mailing' args: 'mailing.mailing'
Public methods (1)
  • send_mail_test(self)

New fields (19)
  • campaign_id Many2one
    index='btree_not_null' readonly=True related='mass_mailing_id.campaign_id' store=True string='Campaign'
  • display_name Char
    compute='_compute_display_name'
  • email Char
    help='Normalized email address' string='Email'
  • failure_type Selection
    selection=[('unknown', 'Unknown error'), ('mail_email_invalid', 'Invalid email address'), ('mail_email_missing', 'Missing email address'), ('mail_smtp', 'Connection failed (outgoing mail server problem)'), ('mail_bl', 'Blacklisted Address'), ('mail_optout', 'Opted Out'), ('mail_dup', 'Duplicated Email')] string='Failure type'
  • links_click_datetime Datetime
    help='Stores last click datetime in case of multi clicks.' args: 'Clicked On'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mailing_trace_id'
  • mail_mail_id Many2one → mail.mail
    index='btree_not_null' string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index='btree_not_null' string='Mail ID (tech)'
  • mass_mailing_id Many2one → mailing.mailing
    index=True ondelete='cascade' string='Mailing' args: 'mailing.mailing'
  • medium_id Many2one
    related='mass_mailing_id.medium_id'
  • message_id Char
    string='Message-ID'
  • model Char
    required=True string='Document model'
  • open_datetime Datetime
    args: 'Opened On'
  • reply_datetime Datetime
    args: 'Replied On'
  • res_id Many2oneReference
    model_field='model' string='Document ID'
  • sent_datetime Datetime
    args: 'Sent On'
  • source_id Many2one
    related='mass_mailing_id.source_id'
  • trace_status Selection
    default='outgoing' selection=[('outgoing', 'Outgoing'), ('sent', 'Sent'), ('open', 'Opened'), ('reply', 'Replied'), ('bounce', 'Bounced'), ('error', 'Exception'), ('cancel', 'Canceled')] string='Status'
  • trace_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Email')]
Public methods (9)
  • action_view_contact(self)
  • create(self, values_list)
    @api.model_create_multi
  • set_bounced(self, domain=None)
  • set_canceled(self, domain=None)
  • set_clicked(self, domain=None)
  • set_failed(self, domain=None, failure_type=False)
  • set_opened(self, domain=None)
    Reply / Open are a bit shared in various processes: reply implies open, click implies open. Let us avoid status override by skipping traces that are not already opened or replied.
  • set_replied(self, domain=None)
  • set_sent(self, domain=None)

New fields (15)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mailing Campaign'
  • canceled Integer
    readonly=True
  • clicked Integer
    readonly=True
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • error Integer
    readonly=True
  • mailing_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Mail')]
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True string='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    Mass Mail Statistical Report: based on mailing.trace that models the various statistics collected for each mailing, and mailing.mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (5)
  • group_mass_mailing_campaign Boolean
    help='This is useful if your marketing campaigns are composed of several emails' implied_group='mass_mailing.group_mass_mailing_campaign' string='Mailing Campaigns'
  • mass_mailing_mail_server_id Many2one → ir.mail_server
    config_parameter='mass_mailing.mail_server_id' string='Mail Server' args: 'ir.mail_server'
  • mass_mailing_outgoing_mail_server Boolean
    config_parameter='mass_mailing.outgoing_mail_server' help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Dedicated Server'
  • mass_mailing_reports Boolean
    config_parameter='mass_mailing.mass_mailing_reports' help='Check how well your mailing is doing a day after it has been sent.' string='24H Stat Mailing Reports'
  • show_blacklist_buttons Boolean
    config_parameter='mass_mailing.show_blacklist_buttons' help='Allow the recipient to manage themselves their state in the blacklist via the unsubscription page.' string='Blacklist Option when Unsubscribing'
Public methods (1)
  • set_values(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • systray_get_activities(self)
    @api.model
    Update systray name of mailing.mailing from "Mass Mailing" to "Email Marketing".

New fields (12)
  • ab_testing_completed Boolean
    copy=False args: 'A/B Testing Campaign Finished'
  • ab_testing_mailings_count Integer
    compute='_compute_mailing_mail_count' args: 'A/B Test Mailings #'
  • ab_testing_schedule_datetime Datetime
    default=<expr> help='Date that will be used to know when to determine and send the winner mailing' args: 'Send Final On'
  • ab_testing_total_pc Integer
    compute='_compute_ab_testing_total_pc' store=True args: 'Total A/B test percentage'
  • ab_testing_winner_selection Selection
    default='opened_ratio' help='Selection to determine the winner mailing that will be sent.' string='Winner Selection' args: [('manual', 'Manual'), ('opened_ratio', 'Highest Open Rate'), ('clicks_ratio', 'Highest Click Rate'), ('replied_ratio', 'Highest Reply Rate')]
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • is_mailing_campaign_activated Boolean
    compute='_compute_is_mailing_campaign_activated'
  • mailing_mail_count Integer
    compute='_compute_mailing_mail_count' groups='mass_mailing.group_mass_mailing_user' args: 'Number of Mass Mailing'
  • mailing_mail_ids One2many → mailing.mailing
    domain=[('mailing_type', '=', 'mail')] groups='mass_mailing.group_mass_mailing_user' string='Mass Mailings' args: 'mailing.mailing', 'campaign_id'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/15.0/mass_mailing
VERSION
VERSION 2.5
CATEGORY
CATEGORYMarketing/Email Marketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, David Monjoie, Xavier Morel, Mohammed Shekha, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, Lucas Perais (lpe), Barad Mahendra, qsm-odoo, Dharmraj Jhala, Romain Derie, Christophe Monniez, mreficent, Julien Castiaux, Aurélien Warnon, Xavier-Do, Paul Morelle, Julien Mougenot, Anh Thao Pham (pta), Nikunj Ladava, std-odoo, Achraf (abz), Ivan Yelizariev, Jérémy Hennecart, Nasreddin Boulif (bon), Tiffany Chang (tic), IEL, Gorash, Younn Olivier, Mathieu Duckerts-Antoine, abd-msyukyu-odoo, nounoubensebia, Kevin Baptiste, Stefan-Calin Crainiciuc (stcc), qmo-odoo, MerlinGuillaume, diagnoza, Antoine Guenet, Florian Charlier, Patrick Hoste, Yolann Sabaux, Nicolas Bayet, Michael Mattiello (mcm), dht-odoo, Renaud Thiry, Julien Banken, Ipsita Borisagar, bve-odoo, jorv, miad-odoo, amdi-odoo, Mariska Archielli (ram), Pierre-Yves Dufays, Sébastien Geelen (sge), Mitul Shah, Mahdi Cheikh Rouhou (macr), Noe Antoine, Paul Stroobant, maad-odoo, Damien (abd), Deependra Solanki, dhba-odoo, visp-odoo, Jay Savaliya, stefanorigano (SRI), MAHAMADASIF ANSARI, Umesh Gupta, Astik Singh, BHanq, Pratik Raval
WEBSITE
WEBSITEhttps://www.odoo.com/app/email-marketing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:25:26
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - contacts
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - utm
    - link_tracker
    - web_editor
    - web_kanban_gauge
    - social_media
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (126)
XML IDNameModelTypeStatus
ab_testing_description Mass Mailing: A/B Test Description ir.ui.view qweb New
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb Inherits web_editor.snippets
iframe_css_assets_edit iframe_css_assets_edit ir.ui.view qweb New
iframe_css_assets_readonly iframe_css_assets_readonly ir.ui.view qweb New
link_tracker_click_view_form link.tracker.click.view.form.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_form
link_tracker_click_view_graph link.tracker.click.view.graph.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_graph
link_tracker_click_view_search link.tracker.click.view.search.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_search
link_tracker_click_view_tree link.tracker.click.view.tree.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_tree
link_tracker_view_form link.tracker.view.form.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_form
link_tracker_view_search link.tracker.view.search.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_search
mailing_contact_subscription_view_form mailing.contact.subscription.view.form mailing.contact.subscription form New
mailing_contact_subscription_view_search mailing.contact.subscription.view.search mailing.contact.subscription search New
mailing_contact_subscription_view_tree mailing.contact.subscription.view.tree mailing.contact.subscription tree New
mailing_contact_to_list_view_form mailing.contact.to.list.view.form mailing.contact.to.list form New
mailing_contact_view_form mailing.contact.view.form mailing.contact form New
mailing_contact_view_graph mailing.contact.view.graph mailing.contact graph New
mailing_contact_view_kanban mailing.contact.view.kanban mailing.contact kanban New
mailing_contact_view_pivot mailing.contact.pivot mailing.contact pivot New
mailing_contact_view_search mailing.contact.view.search mailing.contact search New
mailing_contact_view_tree mailing.contact.view.tree mailing.contact tree New
mailing_list_merge_view_form mailing.list.merge.form mailing.list.merge form New
mailing_list_view_form mailing.list.form mailing.list form New
mailing_list_view_form_simplified mailing.list.form.simplified mailing.list form New
mailing_list_view_form_simplified_footer mailing.list.form.simplified.footer mailing.list xpath Inherits mailing_list_view_form_simplified
mailing_list_view_kanban mailing.list.view.kanban mailing.list kanban New
mailing_list_view_search mailing.list.view.search mailing.list search New
mailing_list_view_tree mailing.list.view.tree mailing.list tree New
mailing_mailing_schedule_date_view_form mailing.mailing.schedule.date.view.form mailing.mailing.schedule.date form New
mailing_mailing_view_calendar mailing.mailing.view.calendar mailing.mailing calendar New
mailing_mailing_view_form_full_width mailing.mailing.view.form.full.width mailing.mailing xpath Inherits mass_mailing.view_mail_mass_mailing_form
mailing_trace_report_view_graph mailing.trace.report.view.graph mailing.trace.report graph New
mailing_trace_report_view_pivot mailing.trace.report.view.pivot mailing.trace.report pivot New
mailing_trace_report_view_search mailing.trace.report.view.search mailing.trace.report search New
mailing_trace_report_view_tree mailing.trace.report.view.tree mailing.trace.report tree New
mailing_trace_view_form mailing.trace.view.form mailing.trace form New
mailing_trace_view_search mailing.trace.view.search mailing.trace search New
mailing_trace_view_tree mailing.trace.view.tree mailing.trace tree New
mailing_trace_view_tree_mail mailing.trace.view.tree.mail mailing.trace tree New
mass_mailing.layout Mass Mailing Layout ir.ui.view qweb New
mass_mailing.mass_mailing_kpi_link_trackers Marketing: mailing link trackers statistic ir.ui.view qweb New
mass_mailing_mail_layout mass_mailing_mail_layout ir.ui.view qweb New
mass_mailing_mail_style mass_mailing_mail_style ir.ui.view qweb New
page_unsubscribe Unsubscribe ir.ui.view qweb New
page_unsubscribed Unsubscribed ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.mass.mailing res.config.settings xpath Inherits base.res_config_settings_view_form
s_alert Alert ir.ui.view qweb New
s_alert_options s_alert_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_blockquote Blockquote ir.ui.view qweb New
s_call_to_action Call to Action ir.ui.view qweb New
s_color_blocks_2 Big Boxes ir.ui.view qweb New
s_company_team Team ir.ui.view qweb New
s_comparisons Comparisons ir.ui.view qweb New
s_coupon_code Promo Code ir.ui.view qweb New
s_cover Cover ir.ui.view qweb New
s_features Features ir.ui.view qweb New
s_features_grid Features Grid ir.ui.view qweb New
s_hr Separator ir.ui.view qweb Inherits web_editor.s_hr
s_hr_options s_hr_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_image_text Image - Text ir.ui.view qweb New
s_mail_block_banner Banner ir.ui.view qweb New
s_mail_block_comparison_table Comparison ir.ui.view qweb New
s_mail_block_discount1 Discount Offer ir.ui.view qweb New
s_mail_block_discount2 Promo Code ir.ui.view qweb New
s_mail_block_event Event ir.ui.view qweb New
s_mail_block_footer_separator Separator ir.ui.view qweb New
s_mail_block_footer_social Footer Center ir.ui.view qweb New
s_mail_block_footer_social_left Footer Left ir.ui.view qweb New
s_mail_block_footer_tag_line Tag Line ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_header_view View Online ir.ui.view qweb New
s_mail_block_image Image ir.ui.view qweb New
s_mail_block_image_text Image - Text ir.ui.view qweb New
s_mail_block_paragraph Paragraph ir.ui.view qweb New
s_mail_block_steps Steps ir.ui.view qweb New
s_mail_block_text_image Text - Image ir.ui.view qweb New
s_mail_block_three_cols Three Columns ir.ui.view qweb New
s_mail_block_title_sub Title - Subtitle ir.ui.view qweb New
s_mail_block_title_text Title Content ir.ui.view qweb New
s_mail_block_two_cols Two Columns ir.ui.view qweb New
s_masonry_block Masonry ir.ui.view qweb New
s_masonry_block_alternation_image_text_template s_masonry_block_alternation_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_template s_masonry_block_alternation_text_image_template ir.ui.view qweb New
s_masonry_block_alternation_text_image_text_template s_masonry_block_alternation_text_image_text_template ir.ui.view qweb New
s_masonry_block_alternation_text_template s_masonry_block_alternation_text_template ir.ui.view qweb New
s_masonry_block_default_template s_masonry_block_default_template ir.ui.view qweb New
s_masonry_block_image_texts_image_template s_masonry_block_image_texts_image_template ir.ui.view qweb New
s_masonry_block_images_template s_masonry_block_images_template ir.ui.view qweb New
s_masonry_block_mosaic_template s_masonry_block_mosaic_template ir.ui.view qweb New
s_masonry_block_options s_masonry_block_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_masonry_block_reversed_template s_masonry_block_reversed_template ir.ui.view qweb New
s_masonry_block_texts_image_texts_template s_masonry_block_texts_image_texts_template ir.ui.view qweb New
s_media_list Media List ir.ui.view qweb New
s_numbers Numbers ir.ui.view qweb New
s_picture Picture ir.ui.view qweb New
s_product_list Items ir.ui.view qweb New
s_rating Rating ir.ui.view qweb New
s_rating_options s_rating_options ir.ui.view qweb Inherits mass_mailing.snippet_options
s_references References ir.ui.view qweb New
s_showcase Showcase ir.ui.view qweb New
s_text_block Text ir.ui.view qweb New
s_text_highlight Text Highlight ir.ui.view qweb New
s_text_image Text - Image ir.ui.view qweb New
s_three_columns Columns ir.ui.view qweb New
s_title Title ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb New
snippet_options_border_line_widgets snippet_options_border_line_widgets ir.ui.view qweb New
snippet_options_border_widgets snippet_options_border_widgets ir.ui.view qweb New
social_links social_links ir.ui.view qweb New
theme_basic_template theme_basic_template ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
theme_empty_template theme_empty_template ir.ui.view qweb New
unsubscribe unsubscribe ir.ui.view qweb New
unsubscribed unsubscribed ir.ui.view qweb New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.kanban utm.campaign xpath Inherits utm.utm_campaign_view_kanban
view Browser View ir.ui.view qweb New
view_mail_mail_statistics_graph Mail Statistics Graph mailing.trace graph New
view_mail_mass_mailing_form mailing.mailing.form mailing.mailing form New
view_mail_mass_mailing_graph mailing.mailing.graph mailing.mailing graph New
view_mail_mass_mailing_kanban mailing.mailing.kanban mailing.mailing kanban New
view_mail_mass_mailing_search mailing.mailing.search mailing.mailing search New
view_mail_mass_mailing_test_form mailing.mailing.test.form mailing.mailing.test form New
view_mail_mass_mailing_tree mailing.mailing.tree mailing.mailing tree New
Models touched (22)

New fields (1)
  • is_mailing_enabled Boolean
    compute='_compute_is_mailing_enabled' help='Whether this model supports marketing mailing capabilities (notably email and SMS).' search='_search_is_mailing_enabled' string='Mailing Enabled'
Public methods (0)

No public methods.

New fields (1)
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (0)

No public methods.

New fields (2)
  • mailing_trace_id Many2one → mailing.trace
    string='Mail Statistics' args: 'mailing.trace'
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model

New fields (4)
  • campaign_id Many2one → utm.campaign
    string='Mass Mailing Campaign' args: 'utm.campaign'
  • mailing_list_ids Many2many → mailing.list
    string='Mailing List' args: 'mailing.list'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' string='Mass Mailing' args: 'mailing.mailing'
  • mass_mailing_name Char
    string='Mass Mailing Name'
Public methods (1)
  • get_mail_values(self, res_ids)
    Override method that generated the mail content by creating the mailing.trace values in the o2m of mail_mail, when doing pure email mass mailing.

New fields (2)
  • mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
  • mailing_trace_ids One2many → mailing.trace
    string='Statistics' args: 'mailing.trace', 'mail_mail_id'
Public methods (1)
  • create(self, values_list)
    @api.model_create_multi
    Override mail_mail creation to create an entry in mail.mail.statistics

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Overrides mail_thread message_new that is called by the mailgateway through message_process. This override updates the document according to the email.
  • message_post_with_template(self, template_id, **kwargs)

New fields (9)
  • company_name Char
    string='Company Name'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • email Char
    args: 'Email'
  • list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mailing_contact_list_rel', 'contact_id', 'list_id'
  • name Char
  • opt_out Boolean
    compute='_compute_opt_out' help='Opt out flag for a specific mailing list.This field should not be used in a view without a unique and active mailing list context.' search='_search_opt_out' args: 'Opt Out'
  • subscription_list_ids One2many → mailing.contact.subscription
    string='Subscription Information' args: 'mailing.contact.subscription', 'contact_id'
  • tag_ids Many2many → res.partner.category
    string='Tags' args: 'res.partner.category'
  • title_id Many2one → res.partner.title
    string='Title' args: 'res.partner.title'
Public methods (7)
  • action_add_to_mailing_list(self)
  • add_to_list(self, name, list_id)
    @api.model
  • copy(self, default=None)
    @api.returns('self', <expr>)
    Cleans the default_list_ids while duplicating mailing contact in context of a mailing list because we already have subscription lists copied over for newly created contact, no need to add the ones from default_list_ids again
  • create(self, vals_list)
    @api.model_create_multi
    Synchronize default_list_ids (currently used notably for computed fields) default key with subscription_list_ids given by user when creating contacts. Those two values have the same purpose, adding a list to to the contact either through a direct write on m2m, either through a write on middle model subscription. This is a bit hackish but is due to default_list_ids key being used to compute oupt_out field. This should be cleaned in master but here we simply try to limit issues while keeping current behavior.
  • default_get(self, fields)
    When coming from a mailing list we may have a default_list_ids context key. We should use it to create subscription_list_ids default value that are displayed to the user as list_ids is not displayed on form view.
  • get_name_email(self, name)
  • name_create(self, name)
    @api.model

New fields (6)
  • contact_id Many2one → mailing.contact
    ondelete='cascade' required=True string='Contact' args: 'mailing.contact'
  • is_blacklisted Boolean
    readonly=False related='contact_id.is_blacklisted' store=False
  • list_id Many2one → mailing.list
    ondelete='cascade' required=True string='Mailing List' args: 'mailing.list'
  • message_bounce Integer
    readonly=False related='contact_id.message_bounce' store=False
  • opt_out Boolean
    default=False help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • unsubscription_date Datetime
    string='Unsubscription Date'
Public methods (2)
  • create(self, vals_list)
    @api.model_create_multi
  • write(self, vals)

New fields (2)
  • contact_ids Many2many → mailing.contact
    string='Contacts' args: 'mailing.contact'
  • mailing_list_id Many2one → mailing.list
    required=True string='Mailing List' args: 'mailing.list'
Public methods (2)
  • action_add_contacts(self)
    Simply add contacts to the mailing list and close wizard.
  • action_add_contacts_and_send_mailing(self)
    Add contacts to the mailing list and redirect to a new mailing on this list.

New fields (14)
  • active Boolean
    default=True
  • contact_count Integer
    compute='_compute_mailing_list_statistics' string='Number of Contacts'
  • contact_count_blacklisted Integer
    compute='_compute_mailing_list_statistics' string='Number of Blacklisted'
  • contact_count_email Integer
    compute='_compute_mailing_list_statistics' string='Number of Emails'
  • contact_count_opt_out Integer
    compute='_compute_mailing_list_statistics' string='Number of Opted-out'
  • contact_ids Many2many → mailing.contact
    copy=False string='Mailing Lists' args: 'mailing.contact', 'mailing_contact_list_rel', 'list_id', 'contact_id'
  • contact_pct_blacklisted Float
    compute='_compute_mailing_list_statistics' string='Percentage of Blacklisted'
  • contact_pct_bounce Float
    compute='_compute_mailing_list_statistics' string='Percentage of Bouncing'
  • contact_pct_opt_out Float
    compute='_compute_mailing_list_statistics' string='Percentage of Opted-out'
  • is_public Boolean
    default=True help='The mailing list can be accessible by recipient in the unsubscription page to allows him to update his subscription preferences.'
  • mailing_count Integer
    compute='_compute_mailing_list_count' string='Number of Mailing'
  • mailing_ids Many2many → mailing.mailing
    copy=False string='Mass Mailings' args: 'mailing.mailing', 'mail_mass_mailing_list_rel'
  • name Char
    required=True string='Mailing List'
  • subscription_ids One2many → mailing.contact.subscription
    copy=True depends=['contact_ids'] string='Subscription Information' args: 'mailing.contact.subscription', 'list_id'
Public methods (11)
  • action_merge(self, src_lists, archive)
    Insert all the contact from the mailing lists 'src_lists' to the mailing list in 'self'. Possibility to archive the mailing lists 'src_lists' after the merge except the destination mailing list 'self'.
  • action_view_contacts(self)
  • action_view_contacts_blacklisted(self)
  • action_view_contacts_bouncing(self)
  • action_view_contacts_email(self)
  • action_view_contacts_opt_out(self)
  • action_view_mailings(self)
  • close_dialog(self)
  • copy(self, default=None)
  • name_get(self)
  • write(self, vals)

New fields (5)
  • archive_src_lists Boolean
    default=True args: 'Archive source mailing lists'
  • dest_list_id Many2one → mailing.list
    string='Destination Mailing List' args: 'mailing.list'
  • merge_options Selection
    default='new' required=True args: [('new', 'Merge into a new mailing list'), ('existing', 'Merge into an existing mailing list')], 'Merge Option'
  • new_list_name Char
    args: 'New Mailing List Name'
  • src_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list'
Public methods (2)
  • action_mailing_lists_merge(self)
  • default_get(self, fields)
    @api.model

New fields (57)
  • ab_testing_completed Boolean
    related='campaign_id.ab_testing_completed' store=True
  • ab_testing_description Html
    compute='_compute_ab_testing_description' args: 'A/B Testing Description'
  • ab_testing_enabled Boolean
    default=False help='If checked, recipients will be mailed only once for the whole campaign. This lets you send different mailings to randomly selected recipients and test the effectiveness of the mailings, without causing duplicate messages.' string='Allow A/B Testing'
  • ab_testing_mailings_count Integer
    related='campaign_id.ab_testing_mailings_count'
  • ab_testing_pc Integer
    default=10 help='Percentage of the contacts that will be mailed. Recipients will be chosen randomly.' string='A/B Testing percentage'
  • ab_testing_schedule_datetime Datetime
    default=<expr> readonly=False related='campaign_id.ab_testing_schedule_datetime'
  • ab_testing_winner_selection Selection
    copy=True default='opened_ratio' readonly=False related='campaign_id.ab_testing_winner_selection'
  • active Boolean
    default=True tracking=True
  • attachment_ids Many2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_arch Html
    sanitize=False string='Body' translate=False
  • body_html Html
    render_engine='qweb' sanitize=False string='Body converted to be sent by mail'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • calendar_date Datetime
    compute='_compute_calendar_date' copy=False help='Date at which the mailing was or will be sent.' store=True args: 'Calendar Date'
  • campaign_id Many2one → utm.campaign
    index=True string='UTM Campaign' args: 'utm.campaign'
  • canceled Integer
    compute='_compute_statistics'
  • clicked Integer
    compute='_compute_statistics'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    string='Color Index'
  • contact_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mail_mass_mailing_list_rel'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    compute='_compute_email_from' default=<expr> readonly=False required=True store=True string='Send From'
  • expected Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • is_body_empty Boolean
    compute='_compute_is_body_empty' help='Technical field used to determine if the mail body is empty'
  • keep_archives Boolean
    string='Keep Archives'
  • kpi_mail_required Boolean
    copy=False args: 'KPI mail required'
  • mail_server_available Boolean
    compute='_compute_mail_server_available' help='Technical field used to know if the user has activated the outgoing mail server option in the settings'
  • mail_server_id Many2one → ir.mail_server
    default=_get_default_mail_server_id help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Mail Server' args: 'ir.mail_server'
  • mailing_domain Char
    compute='_compute_mailing_domain' readonly=False store=True string='Domain'
  • mailing_model_id Many2one → ir.model
    default=<expr> domain=[('is_mailing_enabled', '=', True)] ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    readonly=True related='mailing_model_id.model' related_sudo=True string='Recipients Model Name'
  • mailing_model_real Char
    compute='_compute_mailing_model_real' string='Recipients Real Model'
  • mailing_trace_ids One2many → mailing.trace
    string='Emails Statistics' args: 'mailing.trace', 'mass_mailing_id'
  • mailing_type Selection
    default='mail' required=True string='Mailing Type' args: [('mail', 'Email')]
  • mailing_type_description Char
    compute='_compute_mailing_type_description' args: 'Mailing Type Description'
  • medium_id Many2one → utm.medium
    compute='_compute_medium_id' help='UTM Medium: delivery method (email, sms, ...)' readonly=False store=True string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Scheduled date'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • preview Char
    help='Catchy preview sentence that encourages recipients to open this email.\nIn most inboxes, this is displayed next to the subject.\nKeep it empty if you prefer the first characters of your email content to appear instead.' translate=False args: 'Preview'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    compute='_compute_reply_to' help='Preferred Reply-To Address' readonly=False store=True string='Reply To'
  • reply_to_mode Selection
    compute='_compute_reply_to_mode' help='Thread: replies go to target document. Email: replies are routed to a given email.' readonly=False store=True string='Reply-To Mode' args: [('update', 'Recipient Followers'), ('new', 'Specified Email Address')]
  • schedule_date Datetime
    compute='_compute_schedule_date' copy=True readonly=True states={'draft': [('readonly', False)], 'in_queue': [('readonly', False)]} store=True string='Scheduled for' tracking=True
  • schedule_type Selection
    default='now' readonly=True required=True states={'draft': [('readonly', False)], 'in_queue': [('readonly', False)]} string='Schedule' args: [('now', 'Send now'), ('scheduled', 'Send on')]
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False string='Sent Date'
  • source_id Many2one → utm.source
    help='This is the link source, e.g. Search Engine, another domain, or name of email list' ondelete='cascade' required=True string='Source' args: 'utm.source'
  • state Selection
    copy=False default='draft' group_expand='_group_expand_states' required=True string='Status' tracking=True args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • subject Char
    help='Subject of your Mailing' required=True translate=False args: 'Subject'
  • total Integer
    compute='_compute_total'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
  • warning_message Char
    compute='_compute_warning_message' help='Warning message displayed in the mailing form view' args: 'Warning Message'
Public methods (26)
  • action_cancel(self)
  • action_compare_versions(self)
  • action_duplicate(self)
  • action_launch(self)
  • action_put_in_queue(self)
  • action_retry_failed(self)
  • action_schedule(self)
  • action_select_as_winner(self)
  • action_send_mail(self, res_ids=None)
  • action_send_winner_mailing(self)
    Send the winner mailing based on the winner selection field. This action is used in 2 cases: - When the user clicks on a button to send the winner mailing. There is only one mailing in self - When the cron is executed to send winner mailing based on the A/B testing schedule datetime. In this case 'self' contains all the mailing for the campaigns so we just need to take the first to determine the winner. If the winner mailing is computed automatically, we sudo the mailings of the campaign in order to sort correctly the mailings based on the selection that can be used with sub-modules like CRM and Sales
  • action_test(self)
  • action_view_bounced(self)
  • action_view_clicked(self)
  • action_view_delivered(self)
  • action_view_opened(self)
  • action_view_replied(self)
  • action_view_traces_canceled(self)
  • action_view_traces_failed(self)
  • action_view_traces_scheduled(self)
  • action_view_traces_sent(self)
  • convert_links(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, vals_list)
    @api.model_create_multi
  • default_get(self, fields_list)
    @api.model
  • update_opt_out(self, email, list_ids, value)
  • write(self, values)

New fields (2)
  • mass_mailing_id Many2one → mailing.mailing
    required=True args: 'mailing.mailing'
  • schedule_date Datetime
    string='Scheduled for'
Public methods (1)
  • action_schedule_date(self)

New fields (2)
  • email_to Text
    default=<expr> help='Carriage-return-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' required=True string='Mailing' args: 'mailing.mailing'
Public methods (1)
  • send_mail_test(self)

New fields (19)
  • campaign_id Many2one
    index=True readonly=True related='mass_mailing_id.campaign_id' store=True string='Campaign'
  • display_name Char
    compute='_compute_display_name'
  • email Char
    help='Normalized email address' string='Email'
  • failure_type Selection
    selection=[('unknown', 'Unknown error'), ('mail_email_invalid', 'Invalid email address'), ('mail_email_missing', 'Missing email address'), ('mail_smtp', 'Connection failed (outgoing mail server problem)'), ('mail_bl', 'Blacklisted Address'), ('mail_optout', 'Opted Out'), ('mail_dup', 'Duplicated Email')] string='Failure type'
  • links_click_datetime Datetime
    help='Stores last click datetime in case of multi clicks.' args: 'Clicked On'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mailing_trace_id'
  • mail_mail_id Many2one → mail.mail
    index=True string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index=True string='Mail ID (tech)'
  • mass_mailing_id Many2one → mailing.mailing
    index=True ondelete='cascade' string='Mailing' args: 'mailing.mailing'
  • medium_id Many2one
    related='mass_mailing_id.medium_id'
  • message_id Char
    help='Technical field for the email Message-ID (RFC 2392)' string='Message-ID'
  • model Char
    required=True string='Document model'
  • open_datetime Datetime
    args: 'Opened On'
  • reply_datetime Datetime
    args: 'Replied On'
  • res_id Many2oneReference
    model_field='model' required=True string='Document ID'
  • sent_datetime Datetime
    args: 'Sent On'
  • source_id Many2one
    related='mass_mailing_id.source_id'
  • trace_status Selection
    default='outgoing' selection=[('outgoing', 'Outgoing'), ('sent', 'Sent'), ('open', 'Opened'), ('reply', 'Replied'), ('bounce', 'Bounced'), ('error', 'Exception'), ('cancel', 'Canceled')] string='Status'
  • trace_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Email')]
Public methods (9)
  • action_view_contact(self)
  • create(self, values_list)
    @api.model_create_multi
  • set_bounced(self, domain=None)
  • set_canceled(self, domain=None)
  • set_clicked(self, domain=None)
  • set_failed(self, domain=None, failure_type=False)
  • set_opened(self, domain=None)
    Reply / Open are a bit shared in various processes: reply implies open, click implies open. Let us avoid status override by skipping traces that are not already opened or replied.
  • set_replied(self, domain=None)
  • set_sent(self, domain=None)

New fields (15)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mailing Campaign'
  • canceled Integer
    readonly=True
  • clicked Integer
    readonly=True
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • error Integer
    readonly=True
  • mailing_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Mail')]
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True string='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    Mass Mail Statistical Report: based on mailing.trace that models the various statistics collected for each mailing, and mailing.mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • group_mass_mailing_campaign Boolean
    help='This is useful if your marketing campaigns are composed of several emails' implied_group='mass_mailing.group_mass_mailing_campaign' string='Mailing Campaigns'
  • mass_mailing_mail_server_id Many2one → ir.mail_server
    config_parameter='mass_mailing.mail_server_id' string='Mail Server' args: 'ir.mail_server'
  • mass_mailing_outgoing_mail_server Boolean
    config_parameter='mass_mailing.outgoing_mail_server' help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Dedicated Server'
  • show_blacklist_buttons Boolean
    config_parameter='mass_mailing.show_blacklist_buttons' help='Allow the recipient to manage himself his state in the blacklist via the unsubscription page.' string='Blacklist Option when Unsubscribing'
Public methods (1)
  • set_values(self)

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • systray_get_activities(self)
    @api.model
    Update systray name of mailing.mailing from "Mass Mailing" to "Email Marketing".

New fields (11)
  • ab_testing_completed Boolean
    args: 'A/B Testing Campaign Finished'
  • ab_testing_mailings_count Integer
    compute='_compute_mailing_mail_count' args: 'A/B Test Mailings #'
  • ab_testing_schedule_datetime Datetime
    default=<expr> help='Date that will be used to know when to determine and send the winner mailing' args: 'Send Final On'
  • ab_testing_total_pc Integer
    compute='_compute_ab_testing_total_pc' store=True args: 'Total A/B test percentage'
  • ab_testing_winner_selection Selection
    default='opened_ratio' help='Selection to determine the winner mailing that will be sent.' string='Winner Selection' args: [('manual', 'Manual'), ('opened_ratio', 'Highest Open Rate'), ('clicks_ratio', 'Highest Click Rate'), ('replied_ratio', 'Highest Reply Rate')]
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • mailing_mail_count Integer
    compute='_compute_mailing_mail_count' args: 'Number of Mass Mailing'
  • mailing_mail_ids One2many → mailing.mailing
    domain=[('mailing_type', '=', 'mail')] string='Mass Mailings' args: 'mailing.mailing', 'campaign_id'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/14.0/mass_mailing
VERSION
VERSION 2.2
CATEGORY
CATEGORYMarketing/Email Marketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Mohammed Shekha, Nicolas Martinelli, Nicolas Lempereur, Aaron Bohy, Barad Mahendra, Yannick Tivisse, qsm-odoo, Dharmraj Jhala, Romain Derie, Adrian Torres, Julien Castiaux, Aurélien Warnon, Xavier-Do, jvm-odoo, jerome hanke (jhk), Victor Feyens, Paul Morelle, Sébastien Theys, Julien Mougenot, Jason Van Malder, Anh Thao Pham (pta), Debauche Stéphane, Luis González, Samuel Degueldre, std-odoo, Achraf (abz), Jérémy Hennecart, Nasreddin Boulif (bon), Tiffany Chang (tic), IEL, fja-odoo, Mathieu Duckerts-Antoine, Kevin Baptiste, Kishan Gajjar, roen-odoo, Sylvain Francis, ryv-odoo, Merlin (megu), Didier (did), Sébastien Mottet (oms), Goaman, bve-odoo, miad-odoo, amdi-odoo, Krupal Oza, Mariska Archielli (ram)
WEBSITE
WEBSITEhttps://www.odoo.com/page/mailing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:14:27
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - contacts
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - utm
    - link_tracker
    - web_editor
    - web_kanban_gauge
    - social_media
    - digest
    - portal
    - http_routing
    - auth_signup
    - resource
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (82)
XML IDNameModelTypeStatus
assets_backend mass_mailing assets ir.ui.view qweb Inherits web.assets_backend
assets_common Mass Mailing Assets Common ir.ui.view qweb Inherits web.assets_common
assets_mail_themes assets_mail_themes ir.ui.view qweb New
assets_mail_themes_edition assets_mail_themes_edition ir.ui.view qweb New
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb Inherits web_editor.snippets
iframe_css_assets_edit iframe_css_assets_edit ir.ui.view qweb New
iframe_css_assets_readonly iframe_css_assets_readonly ir.ui.view qweb New
link_tracker_click_view_form link.tracker.click.view.form.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_form
link_tracker_click_view_graph link.tracker.click.view.graph.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_graph
link_tracker_click_view_search link.tracker.click.view.search.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_search
link_tracker_click_view_tree link.tracker.click.view.tree.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_tree
link_tracker_view_form link.tracker.view.form.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_form
link_tracker_view_search link.tracker.view.search.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_search
mailing_contact_subscription_view_form mailing.contact.subscription.view.form mailing.contact.subscription form New
mailing_contact_subscription_view_search mailing.contact.subscription.view.search mailing.contact.subscription search New
mailing_contact_subscription_view_tree mailing.contact.subscription.view.tree mailing.contact.subscription tree New
mailing_contact_view_form mailing.contact.view.form mailing.contact form New
mailing_contact_view_graph mailing.contact.view.graph mailing.contact graph New
mailing_contact_view_kanban mailing.contact.view.kanban mailing.contact kanban New
mailing_contact_view_pivot mailing.contact.pivot mailing.contact pivot New
mailing_contact_view_search mailing.contact.view.search mailing.contact search New
mailing_contact_view_tree mailing.contact.view.tree mailing.contact tree New
mailing_list_merge_view_form mailing.list.merge.form mailing.list.merge form New
mailing_list_view_form mailing.list.form mailing.list form New
mailing_list_view_form_simplified mailing.list.form.simplified mailing.list form New
mailing_list_view_kanban mailing.list.view.kanban mailing.list kanban New
mailing_list_view_search mailing.list.view.search mailing.list search New
mailing_list_view_tree mailing.list.view.tree mailing.list tree New
mailing_mailing_schedule_date_view_form mailing.mailing.schedule.date.view.form mailing.mailing.schedule.date form New
mailing_trace_report_view_graph mailing.trace.report.view.graph mailing.trace.report graph New
mailing_trace_report_view_pivot mailing.trace.report.view.pivot mailing.trace.report pivot New
mailing_trace_report_view_search mailing.trace.report.view.search mailing.trace.report search New
mailing_trace_view_form mailing.trace.form mailing.trace form New
mailing_trace_view_search mailing.trace.search mailing.trace search New
mailing_trace_view_tree mailing.trace.tree mailing.trace tree New
mass_mailing.layout Mass Mailing Layout ir.ui.view qweb New
mass_mailing.mass_mailing_kpi_link_trackers Email Marketing: mailing link trackers statistic ir.ui.view qweb New
mass_mailing_mail_layout mass_mailing_mail_layout ir.ui.view qweb New
mass_mailing_mail_style mass_mailing_mail_style ir.ui.view qweb New
page_unsubscribe Unsubscribe ir.ui.view qweb New
page_unsubscribed Unsubscribed ir.ui.view qweb New
qunit_suite qunit_suite ir.ui.view qweb Inherits web.qunit_suite_tests
res_config_settings_view_form res.config.settings.view.form.inherit.mass.mailing res.config.settings xpath Inherits base.res_config_settings_view_form
s_mail_block_banner Banner ir.ui.view qweb New
s_mail_block_comparison_table Comparison ir.ui.view qweb New
s_mail_block_discount1 Discount Offer ir.ui.view qweb New
s_mail_block_discount2 Promo Code ir.ui.view qweb New
s_mail_block_event Event ir.ui.view qweb New
s_mail_block_footer_separator Separator ir.ui.view qweb New
s_mail_block_footer_social Footer Center ir.ui.view qweb New
s_mail_block_footer_social_left Footer Left ir.ui.view qweb New
s_mail_block_footer_tag_line Tag Line ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_header_view View Online ir.ui.view qweb New
s_mail_block_image Image ir.ui.view qweb New
s_mail_block_image_text Image - Text ir.ui.view qweb New
s_mail_block_paragraph Paragraph ir.ui.view qweb New
s_mail_block_steps Steps ir.ui.view qweb New
s_mail_block_text_image Text - Image ir.ui.view qweb New
s_mail_block_three_cols Three Columns ir.ui.view qweb New
s_mail_block_title_sub Title - Subtitle ir.ui.view qweb New
s_mail_block_title_text Title Content ir.ui.view qweb New
s_mail_block_two_cols Two Columns ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb New
social_links social_links ir.ui.view qweb New
theme_basic_template theme_basic_template ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
unsubscribe unsubscribe ir.ui.view qweb New
unsubscribed unsubscribed ir.ui.view qweb New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.kanban utm.campaign xpath Inherits utm.utm_campaign_view_kanban
view Browser View ir.ui.view qweb New
view_mail_mail_statistics_graph Mail Statistics Graph mailing.trace graph New
view_mail_mass_mailing_form mailing.mailing.form mailing.mailing form New
view_mail_mass_mailing_graph mailing.mailing.graph mailing.mailing graph New
view_mail_mass_mailing_kanban mailing.mailing.kanban mailing.mailing kanban New
view_mail_mass_mailing_search mailing.mailing.search mailing.mailing search New
view_mail_mass_mailing_test_form mailing.mailing.test.form mailing.mailing.test form New
view_mail_mass_mailing_tree mailing.mailing.tree mailing.mailing tree New
Models touched (19)

New fields (1)
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (0)

No public methods.

New fields (2)
  • mailing_trace_id Many2one → mailing.trace
    string='Mail Statistics' args: 'mailing.trace'
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model

New fields (4)
  • campaign_id Many2one → utm.campaign
    string='Mass Mailing Campaign' args: 'utm.campaign'
  • mailing_list_ids Many2many → mailing.list
    string='Mailing List' args: 'mailing.list'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' string='Mass Mailing' args: 'mailing.mailing'
  • mass_mailing_name Char
    string='Mass Mailing Name'
Public methods (1)
  • get_mail_values(self, res_ids)
    Override method that generated the mail content by creating the mailing.trace values in the o2m of mail_mail, when doing pure email mass mailing.

New fields (2)
  • mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
  • mailing_trace_ids One2many → mailing.trace
    string='Statistics' args: 'mailing.trace', 'mail_mail_id'
Public methods (1)
  • create(self, values_list)
    @api.model_create_multi
    Override mail_mail creation to create an entry in mail.mail.statistics

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (2)
  • message_new(self, msg_dict, custom_values=None)
    @api.model
    Overrides mail_thread message_new that is called by the mailgateway through message_process. This override updates the document according to the email.
  • message_post_with_template(self, template_id, **kwargs)

New fields (9)
  • company_name Char
    string='Company Name'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • email Char
    args: 'Email'
  • list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mailing_contact_list_rel', 'contact_id', 'list_id'
  • name Char
  • opt_out Boolean
    compute='_compute_opt_out' help='Opt out flag for a specific mailing list.This field should not be used in a view without a unique and active mailing list context.' search='_search_opt_out' args: 'Opt Out'
  • subscription_list_ids One2many → mailing.contact.subscription
    string='Subscription Information' args: 'mailing.contact.subscription', 'contact_id'
  • tag_ids Many2many → res.partner.category
    string='Tags' args: 'res.partner.category'
  • title_id Many2one → res.partner.title
    string='Title' args: 'res.partner.title'
Public methods (6)
  • add_to_list(self, name, list_id)
    @api.model
  • copy(self, default=None)
    @api.returns('self', <expr>)
    Cleans the default_list_ids while duplicating mailing contact in context of a mailing list because we already have subscription lists copied over for newly created contact, no need to add the ones from default_list_ids again
  • create(self, vals_list)
    @api.model_create_multi
    Synchronize default_list_ids (currently used notably for computed fields) default key with subscription_list_ids given by user when creating contacts. Those two values have the same purpose, adding a list to to the contact either through a direct write on m2m, either through a write on middle model subscription. This is a bit hackish but is due to default_list_ids key being used to compute oupt_out field. This should be cleaned in master but here we simply try to limit issues while keeping current behavior.
  • default_get(self, fields)
    When coming from a mailing list we may have a default_list_ids context key. We should use it to create subscription_list_ids default value that are displayed to the user as list_ids is not displayed on form view.
  • get_name_email(self, name)
  • name_create(self, name)
    @api.model

New fields (6)
  • contact_id Many2one → mailing.contact
    ondelete='cascade' required=True string='Contact' args: 'mailing.contact'
  • is_blacklisted Boolean
    readonly=False related='contact_id.is_blacklisted' store=False
  • list_id Many2one → mailing.list
    ondelete='cascade' required=True string='Mailing List' args: 'mailing.list'
  • message_bounce Integer
    readonly=False related='contact_id.message_bounce' store=False
  • opt_out Boolean
    default=False help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • unsubscription_date Datetime
    string='Unsubscription Date'
Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)

New fields (6)
  • active Boolean
    default=True
  • contact_ids Many2many → mailing.contact
    string='Mailing Lists' args: 'mailing.contact', 'mailing_contact_list_rel', 'list_id', 'contact_id'
  • contact_nbr Integer
    compute='_compute_contact_nbr' string='Number of Contacts'
  • is_public Boolean
    default=True help='The mailing list can be accessible by recipient in the unsubscription page to allows him to update his subscription preferences.'
  • name Char
    required=True string='Mailing List'
  • subscription_ids One2many → mailing.contact.subscription
    depends=['contact_ids'] string='Subscription Information' args: 'mailing.contact.subscription', 'list_id'
Public methods (5)
  • action_merge(self, src_lists, archive)
    Insert all the contact from the mailing lists 'src_lists' to the mailing list in 'self'. Possibility to archive the mailing lists 'src_lists' after the merge except the destination mailing list 'self'.
  • action_view_contacts(self)
  • close_dialog(self)
  • name_get(self)
  • write(self, vals)

New fields (5)
  • archive_src_lists Boolean
    default=True args: 'Archive source mailing lists'
  • dest_list_id Many2one → mailing.list
    string='Destination Mailing List' args: 'mailing.list'
  • merge_options Selection
    default='new' required=True args: [('new', 'Merge into a new mailing list'), ('existing', 'Merge into an existing mailing list')], 'Merge Option'
  • new_list_name Char
    args: 'New Mailing List Name'
  • src_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list'
Public methods (2)
  • action_mailing_lists_merge(self)
  • default_get(self, fields)
    @api.model

New fields (46)
  • active Boolean
    default=True tracking=True
  • attachment_ids Many2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_arch Html
    string='Body' translate=False
  • body_html Html
    sanitize_attributes=False string='Body converted to be sent by mail'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • campaign_id Many2one → utm.campaign
    index=True string='UTM Campaign' args: 'utm.campaign'
  • clicked Integer
    compute='_compute_statistics'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    string='Color Index'
  • contact_ab_pc Integer
    default=100 help='Percentage of the contacts that will be mailed. Recipients will be taken randomly.' string='A/B Testing percentage'
  • contact_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mail_mass_mailing_list_rel'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    default=<expr> required=True string='Send From'
  • expected Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • ignored Integer
    compute='_compute_statistics'
  • keep_archives Boolean
    string='Keep Archives'
  • kpi_mail_required Boolean
    copy=False args: 'KPI mail required'
  • mail_server_id Many2one → ir.mail_server
    default=_get_default_mail_server_id help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Mail Server' args: 'ir.mail_server'
  • mailing_domain Char
    compute='_compute_mailing_domain' readonly=False store=True string='Domain'
  • mailing_model_id Many2one → ir.model
    default=<expr> domain=[('model', 'in', MASS_MAILING_BUSINESS_MODELS)] ondelete='cascade' required=True string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    readonly=True related='mailing_model_id.model' related_sudo=True string='Recipients Model Name'
  • mailing_model_real Char
    compute='_compute_model' string='Recipients Real Model'
  • mailing_trace_ids One2many → mailing.trace
    string='Emails Statistics' args: 'mailing.trace', 'mass_mailing_id'
  • mailing_type Selection
    default='mail' required=True string='Mailing Type' args: [('mail', 'Email')]
  • medium_id Many2one → utm.medium
    compute='_compute_medium_id' help='UTM Medium: delivery method (email, sms, ...)' readonly=False store=True string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Scheduled date'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • preview Char
    help='Catchy preview sentence that encourages recipients to open this email.\nIn most inboxes, this is displayed next to the subject.\nKeep it empty if you prefer the first characters of your email content to appear instead.' translate=True args: 'Preview'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    compute='_compute_reply_to' help='Preferred Reply-To Address' readonly=False store=True string='Reply To'
  • reply_to_mode Selection
    compute='_compute_reply_to_mode' help='Thread: replies go to target document. Email: replies are routed to a given email.' readonly=False store=True string='Reply-To Mode' args: [('thread', 'Recipient Followers'), ('email', 'Specified Email Address')]
  • schedule_date Datetime
    string='Scheduled for' tracking=True
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False string='Sent Date'
  • source_id Many2one → utm.source
    help='This is the link source, e.g. Search Engine, another domain, or name of email list' ondelete='cascade' required=True string='Source' args: 'utm.source'
  • state Selection
    copy=False default='draft' group_expand='_group_expand_states' required=True string='Status' tracking=True args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • subject Char
    help='Subject of your Mailing' required=True translate=True args: 'Subject'
  • total Integer
    compute='_compute_total'
  • unique_ab_testing Boolean
    default=False help='If checked, recipients will be mailed only once for the whole campaign. This lets you send different mailings to randomly selected recipients and test the effectiveness of the mailings, without causing duplicate messages.' string='Allow A/B Testing'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
Public methods (22)
  • action_cancel(self)
  • action_duplicate(self)
  • action_put_in_queue(self)
  • action_retry_failed(self)
  • action_schedule(self)
  • action_send_mail(self, res_ids=None)
  • action_test(self)
  • action_view_bounced(self)
  • action_view_clicked(self)
  • action_view_delivered(self)
  • action_view_opened(self)
  • action_view_replied(self)
  • action_view_traces_failed(self)
  • action_view_traces_ignored(self)
  • action_view_traces_scheduled(self)
  • action_view_traces_sent(self)
  • convert_links(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, values)
    @api.model
  • default_get(self, fields)
    @api.model
  • update_opt_out(self, email, list_ids, value)
  • write(self, values)

New fields (2)
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' required=True args: 'mailing.mailing'
  • schedule_date Datetime
    string='Scheduled for'
Public methods (1)
  • set_schedule_date(self)

New fields (2)
  • email_to Char
    default=<expr> help='Comma-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' required=True string='Mailing' args: 'mailing.mailing'
Public methods (1)
  • send_mail_test(self)

New fields (22)
  • bounced Datetime
    help='Date when this email has bounced.'
  • campaign_id Many2one
    index=True readonly=True related='mass_mailing_id.campaign_id' store=True string='Campaign'
  • clicked Datetime
    help='Date when customer clicked on at least one tracked link'
  • display_name Char
    compute='_compute_display_name'
  • email Char
    help='Normalized email address' string='Email'
  • exception Datetime
    help='Date of technical error leading to the email not being sent'
  • failure_type Selection
    selection=[('SMTP', 'Connection failed (outgoing mail server problem)'), ('RECIPIENT', 'Invalid email address'), ('BOUNCE', 'Email address rejected by destination'), ('UNKNOWN', 'Unknown error')] string='Failure type'
  • ignored Datetime
    help='Date when the email has been invalidated. Invalid emails are blacklisted, opted-out or invalid email format'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mailing_trace_id'
  • mail_mail_id Many2one → mail.mail
    index=True string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index=True string='Mail ID (tech)'
  • mass_mailing_id Many2one → mailing.mailing
    index=True ondelete='cascade' string='Mailing' args: 'mailing.mailing'
  • message_id Char
    string='Message-ID'
  • model Char
    string='Document model'
  • opened Datetime
    help='Date when the email has been opened the first time'
  • replied Datetime
    help='Date when this email has been replied for the first time.'
  • res_id Integer
    string='Document ID'
  • scheduled Datetime
    default=fields.Datetime.now help='Date when the email has been created'
  • sent Datetime
    help='Date when the email has been sent'
  • state Selection
    compute='_compute_state' selection=[('outgoing', 'Outgoing'), ('exception', 'Exception'), ('sent', 'Sent'), ('opened', 'Opened'), ('replied', 'Replied'), ('bounced', 'Bounced'), ('ignored', 'Ignored')] store=True
  • state_update Datetime
    compute='_compute_state' help='Last state update of the mail' store=True string='State Update'
  • trace_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Mail')]
Public methods (5)
  • create(self, values_list)
    @api.model_create_multi
  • set_bounced(self, mail_mail_ids=None, mail_message_ids=None)
  • set_clicked(self, mail_mail_ids=None, mail_message_ids=None)
  • set_opened(self, mail_mail_ids=None, mail_message_ids=None)
  • set_replied(self, mail_mail_ids=None, mail_message_ids=None)

New fields (12)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mailing Campaign'
  • clicked Integer
    readonly=True
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • mailing_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Mail')]
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True string='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    Mass Mail Statistical Report: based on mailing.trace that models the various statistics collected for each mailing, and mailing.mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (4)
  • group_mass_mailing_campaign Boolean
    help='This is useful if your marketing campaigns are composed of several emails' implied_group='mass_mailing.group_mass_mailing_campaign' string='Mailing Campaigns'
  • mass_mailing_mail_server_id Many2one → ir.mail_server
    config_parameter='mass_mailing.mail_server_id' string='Mail Server' args: 'ir.mail_server'
  • mass_mailing_outgoing_mail_server Boolean
    config_parameter='mass_mailing.outgoing_mail_server' help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Dedicated Server'
  • show_blacklist_buttons Boolean
    config_parameter='mass_mailing.show_blacklist_buttons' help='Allow the recipient to manage himself his state in the blacklist via the unsubscription page.' string='Blacklist Option when Unsubscribing'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • systray_get_activities(self)
    @api.model
    Update systray name of mailing.mailing from "Mass Mailing" to "Email Marketing".

New fields (6)
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • mailing_mail_count Integer
    compute='_compute_mailing_mail_count' args: 'Number of Mass Mailing'
  • mailing_mail_ids One2many → mailing.mailing
    domain=[('mailing_type', '=', 'mail')] string='Mass Mailings' args: 'mailing.mailing', 'campaign_id'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/13.0/mass_mailing
VERSION
VERSION 2.0
CATEGORY
CATEGORYMarketing/Email Marketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, David Monjoie, Xavier Morel, Nicolas Martinelli, Nicolas Lempereur, Aaron Bohy, Jeremy Kersten, Yannick Tivisse, qsm-odoo, Martin Geubelle, Dharmraj Jhala, Odoo Online, Nicolas Seinlet, Adrien Dieudonne, RomainLibert, Alexandre Kühn, Adrian Torres, Julien Castiaux, Aurélien Warnon, Xavier-Do, jvm-odoo, jerome hanke (jhk), Paul Morelle, Sébastien Theys, Jason Van Malder, Vincent Schippefilt, Anh Thao Pham (pta), std-odoo, David Beguin, Adrien Widart, Ivan Yelizariev, Naglis Jonaitis, Jérémy Hennecart, IEL, Thanh Dodeur, Gorash, Pierre Paridans, Yenthe666, Kevin Baptiste, Kishan Gajjar, Geoffroy Larue, laa, ryv-odoo
WEBSITE
WEBSITEhttps://www.odoo.com/page/mailing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-06 00:06:41
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - contacts
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - utm
    - link_tracker
    - web_editor
    - web_kanban_gauge
    - social_media
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (77)
XML IDNameModelTypeStatus
assets_backend mass_mailing assets ir.ui.view qweb Inherits web.assets_backend
assets_mail_themes assets_mail_themes ir.ui.view qweb New
assets_mail_themes_edition assets_mail_themes_edition ir.ui.view qweb New
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb Inherits web_editor.snippets
iframe_css_assets_edit iframe_css_assets_edit ir.ui.view qweb New
iframe_css_assets_readonly iframe_css_assets_readonly ir.ui.view qweb New
link_tracker_click_view_form link.tracker.click.view.form.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_form
link_tracker_click_view_graph link.tracker.click.view.graph.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_graph
link_tracker_click_view_search link.tracker.click.view.search.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_search
link_tracker_click_view_tree link.tracker.click.view.tree.inherit.mass_mailing link.tracker.click xpath Inherits link_tracker.link_tracker_click_view_tree
link_tracker_view_form link.tracker.view.form.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_form
link_tracker_view_search link.tracker.view.search.inherit.mass.mail link.tracker xpath Inherits link_tracker.link_tracker_view_search
mailing_contact_subscription_view_form mailing.contact.subscription.view.form mailing.contact.subscription form New
mailing_contact_subscription_view_search mailing.contact.subscription.view.search mailing.contact.subscription search New
mailing_contact_subscription_view_tree mailing.contact.subscription.view.tree mailing.contact.subscription tree New
mailing_list_merge_view_form mailing.list.merge.form mailing.list.merge form New
mailing_list_view_form mailing.list.form mailing.list form New
mailing_list_view_form_simplified mailing.list.form.simplified mailing.list form New
mailing_list_view_kanban mailing.list.view.kanban mailing.list kanban New
mailing_list_view_search mailing.list.view.search mailing.list search New
mailing_list_view_tree mailing.list.view.tree mailing.list tree New
mailing_mailing_schedule_date_view_form mailing.mailing.schedule.date.view.form mailing.mailing.schedule.date form New
mailing_trace_report_view_graph mailing.trace.report.view.graph mailing.trace.report graph New
mailing_trace_report_view_pivot mailing.trace.report.view.pivot mailing.trace.report pivot New
mailing_trace_report_view_search mailing.trace.report.view.search mailing.trace.report search New
mailing_trace_view_form mailing.trace.form mailing.trace form New
mailing_trace_view_search mailing.trace.search mailing.trace search New
mailing_trace_view_tree mailing.trace.tree mailing.trace tree New
mass_mailing.layout Mass Mailing Layout ir.ui.view qweb New
mass_mailing_mail_layout mass_mailing_mail_layout ir.ui.view qweb New
mass_mailing_mail_style mass_mailing_mail_style ir.ui.view qweb New
page_unsubscribe Unsubscribe ir.ui.view qweb New
page_unsubscribed Unsubscribed ir.ui.view qweb New
qunit_suite qunit_suite ir.ui.view qweb Inherits web.qunit_suite
res_config_settings_view_form res.config.settings.view.form.inherit.mass.mailing res.config.settings xpath Inherits base.res_config_settings_view_form
s_mail_block_banner Banner ir.ui.view qweb New
s_mail_block_comparison_table Comparison ir.ui.view qweb New
s_mail_block_discount1 Discount Offer ir.ui.view qweb New
s_mail_block_discount2 Promo Code ir.ui.view qweb New
s_mail_block_event Event ir.ui.view qweb New
s_mail_block_footer_separator Separator ir.ui.view qweb New
s_mail_block_footer_social Footer Center ir.ui.view qweb New
s_mail_block_footer_social_left Footer Left ir.ui.view qweb New
s_mail_block_footer_tag_line Tag Line ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_image Image ir.ui.view qweb New
s_mail_block_image_text Image - Text ir.ui.view qweb New
s_mail_block_paragraph Paragraph ir.ui.view qweb New
s_mail_block_steps Steps ir.ui.view qweb New
s_mail_block_text_image Text - Image ir.ui.view qweb New
s_mail_block_three_cols Three Columns ir.ui.view qweb New
s_mail_block_title_sub Title - Subtitle ir.ui.view qweb New
s_mail_block_title_text Title Content ir.ui.view qweb New
s_mail_block_two_cols Two Columns ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb New
theme_basic_template theme_basic_template ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
unsubscribe unsubscribe ir.ui.view qweb New
unsubscribed unsubscribed ir.ui.view qweb New
utm_campaign_view_form utm.campaign.view.form utm.campaign xpath Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.kanban utm.campaign xpath Inherits utm.utm_campaign_view_kanban
view_mail_mail_statistics_graph Mail Statistics Graph mailing.trace graph New
view_mail_mass_mailing_contact_form mailing.contact.form mailing.contact form New
view_mail_mass_mailing_contact_graph mailing.contact.graph mailing.contact graph New
view_mail_mass_mailing_contact_kanban mailing.contact.kanban mailing.contact kanban New
view_mail_mass_mailing_contact_pivot mailing.contact.pivot mailing.contact pivot New
view_mail_mass_mailing_contact_search mailing.contact.search mailing.contact search New
view_mail_mass_mailing_contact_tree mailing.contact.tree mailing.contact tree New
view_mail_mass_mailing_form mailing.mailing.form mailing.mailing form New
view_mail_mass_mailing_graph mailing.mailing.graph mailing.mailing graph New
view_mail_mass_mailing_kanban mailing.mailing.kanban mailing.mailing kanban New
view_mail_mass_mailing_search mailing.mailing.search mailing.mailing search New
view_mail_mass_mailing_test_form mailing.mailing.test.form mailing.mailing.test form New
view_mail_mass_mailing_tree mailing.mailing.tree mailing.mailing tree New
Models touched (17)

New fields (1)
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (0)

No public methods.

New fields (2)
  • mailing_trace_id Many2one → mailing.trace
    string='Mail Statistics' args: 'mailing.trace'
  • mass_mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
Public methods (1)
  • add_click(self, code, **route_values)
    @api.model

New fields (4)
  • campaign_id Many2one → utm.campaign
    string='Mass Mailing Campaign' args: 'utm.campaign'
  • mailing_list_ids Many2many → mailing.list
    string='Mailing List' args: 'mailing.list'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' string='Mass Mailing' args: 'mailing.mailing'
  • mass_mailing_name Char
    string='Mass Mailing Name'
Public methods (1)
  • get_mail_values(self, res_ids)
    Override method that generated the mail content by creating the mailing.trace values in the o2m of mail_mail, when doing pure email mass mailing.

New fields (2)
  • mailing_id Many2one → mailing.mailing
    string='Mass Mailing' args: 'mailing.mailing'
  • mailing_trace_ids One2many → mailing.trace
    string='Statistics' args: 'mailing.trace', 'mail_mail_id'
Public methods (1)
  • create(self, values)
    @api.model
    Override mail_mail creation to create an entry in mailing.trace

New fields (0)

No new fields.

Public methods (1)
  • render_post_process(self, html)
    @api.model

New fields (0)

No new fields.

Public methods (1)
  • message_post_with_template(self, template_id, **kwargs)

New fields (9)
  • company_name Char
    string='Company Name'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • email Char
    args: 'Email'
  • list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mailing_contact_list_rel', 'contact_id', 'list_id'
  • name Char
  • opt_out Boolean
    compute='_compute_opt_out' help='Opt out flag for a specific mailing list.This field should not be used in a view without a unique and active mailing list context.' search='_search_opt_out' args: 'Opt Out'
  • subscription_list_ids One2many → mailing.contact.subscription
    string='Subscription Information' args: 'mailing.contact.subscription', 'contact_id'
  • tag_ids Many2many → res.partner.category
    string='Tags' args: 'res.partner.category'
  • title_id Many2one → res.partner.title
    string='Title' args: 'res.partner.title'
Public methods (3)
  • add_to_list(self, name, list_id)
    @api.model
  • get_name_email(self, name)
  • name_create(self, name)
    @api.model

New fields (6)
  • contact_id Many2one → mailing.contact
    ondelete='cascade' required=True string='Contact' args: 'mailing.contact'
  • is_blacklisted Boolean
    readonly=False related='contact_id.is_blacklisted' store=False
  • list_id Many2one → mailing.list
    ondelete='cascade' required=True string='Mailing List' args: 'mailing.list'
  • message_bounce Integer
    readonly=False related='contact_id.message_bounce' store=False
  • opt_out Boolean
    default=False help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • unsubscription_date Datetime
    string='Unsubscription Date'
Public methods (2)
  • create(self, vals)
    @api.model
  • write(self, vals)

New fields (6)
  • active Boolean
    default=True
  • contact_ids Many2many → mailing.contact
    string='Mailing Lists' args: 'mailing.contact', 'mailing_contact_list_rel', 'list_id', 'contact_id'
  • contact_nbr Integer
    compute='_compute_contact_nbr' string='Number of Contacts'
  • is_public Boolean
    default=True help='The mailing list can be accessible by recipient in the unsubscription page to allows him to update his subscription preferences.'
  • name Char
    required=True string='Mailing List'
  • subscription_ids One2many → mailing.contact.subscription
    string='Subscription Information' args: 'mailing.contact.subscription', 'list_id'
Public methods (5)
  • action_merge(self, src_lists, archive)
    Insert all the contact from the mailing lists 'src_lists' to the mailing list in 'self'. Possibility to archive the mailing lists 'src_lists' after the merge except the destination mailing list 'self'.
  • action_view_contacts(self)
  • close_dialog(self)
  • name_get(self)
  • write(self, vals)

New fields (5)
  • archive_src_lists Boolean
    default=True args: 'Archive source mailing lists'
  • dest_list_id Many2one → mailing.list
    string='Destination Mailing List' args: 'mailing.list'
  • merge_options Selection
    default='new' required=True args: [('new', 'Merge into a new mailing list'), ('existing', 'Merge into an existing mailing list')], 'Merge Option'
  • new_list_name Char
    args: 'New Mailing List Name'
  • src_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list'
Public methods (2)
  • action_mailing_lists_merge(self)
  • default_get(self, fields)
    @api.model

New fields (44)
  • active Boolean
    default=True tracking=True
  • attachment_ids Many2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_arch Html
    string='Body' translate=False
  • body_html Html
    sanitize_attributes=False string='Body converted to be send by mail'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • campaign_id Many2one → utm.campaign
    string='UTM Campaign' args: 'utm.campaign'
  • clicked Integer
    compute='_compute_statistics'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    string='Color Index'
  • contact_ab_pc Integer
    default=100 help='Percentage of the contacts that will be mailed. Recipients will be taken randomly.' string='A/B Testing percentage'
  • contact_list_ids Many2many → mailing.list
    string='Mailing Lists' args: 'mailing.list', 'mail_mass_mailing_list_rel'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    default=<expr> required=True string='Send From'
  • expected Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • ignored Integer
    compute='_compute_statistics'
  • keep_archives Boolean
    string='Keep Archives'
  • mail_server_id Many2one → ir.mail_server
    default=_get_default_mail_server_id help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Mail Server' args: 'ir.mail_server'
  • mailing_domain Char
    default=[] string='Domain'
  • mailing_model_id Many2one → ir.model
    default=<expr> domain=[('model', 'in', MASS_MAILING_BUSINESS_MODELS)] string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    readonly=True related='mailing_model_id.model' related_sudo=True string='Recipients Model Name'
  • mailing_model_real Char
    compute='_compute_model' default='mailing.contact' required=True string='Recipients Real Model'
  • mailing_trace_ids One2many → mailing.trace
    string='Emails Statistics' args: 'mailing.trace', 'mass_mailing_id'
  • mailing_type Selection
    default='mail' required=True string='Mailing Type' args: [('mail', 'Email')]
  • medium_id Many2one → utm.medium
    help='Delivery method: Email' string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Scheduled date'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    default=<expr> help='Preferred Reply-To Address' string='Reply To'
  • reply_to_mode Selection
    required=True string='Reply-To Mode' args: [('thread', 'Recipient Followers'), ('email', 'Specified Email Address')]
  • schedule_date Datetime
    string='Scheduled for' tracking=True
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False string='Sent Date'
  • source_id Many2one → utm.source
    help='This is the link source, e.g. Search Engine, another domain, or name of email list' ondelete='cascade' required=True string='Source' args: 'utm.source'
  • state Selection
    copy=False default='draft' group_expand='_group_expand_states' required=True string='Status' tracking=True args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • subject Char
    help='Subject of emails to send' required=True translate=True args: 'Subject'
  • total Integer
    compute='_compute_total'
  • unique_ab_testing Boolean
    default=False help='If checked, recipients will be mailed only once for the whole campaign. This lets you send different mailings to randomly selected recipients and test the effectiveness of the mailings, without causing duplicate messages.' string='Allow A/B Testing'
  • user_id Many2one → res.users
    default=<expr> string='Responsible' tracking=True args: 'res.users'
Public methods (22)
  • action_cancel(self)
  • action_duplicate(self)
  • action_put_in_queue(self)
  • action_retry_failed(self)
  • action_schedule(self)
  • action_send_mail(self, res_ids=None)
  • action_test(self)
  • action_view_bounced(self)
  • action_view_clicked(self)
  • action_view_delivered(self)
  • action_view_opened(self)
  • action_view_replied(self)
  • action_view_sent(self)
  • action_view_traces_failed(self)
  • action_view_traces_ignored(self)
  • action_view_traces_scheduled(self)
  • convert_links(self)
  • copy(self, default=None)
    @api.returns('self', <expr>)
  • create(self, values)
    @api.model
  • default_get(self, fields)
    @api.model
  • update_opt_out(self, email, list_ids, value)
  • write(self, values)

New fields (2)
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' required=True args: 'mailing.mailing'
  • schedule_date Datetime
    string='Scheduled for'
Public methods (1)
  • set_schedule_date(self)

New fields (2)
  • email_to Char
    default=<expr> help='Comma-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mailing.mailing
    ondelete='cascade' required=True string='Mailing' args: 'mailing.mailing'
Public methods (1)
  • send_mail_test(self)

New fields (22)
  • bounced Datetime
    help='Date when this email has bounced.'
  • campaign_id Many2one
    index=True readonly=True related='mass_mailing_id.campaign_id' store=True string='Campaign'
  • clicked Datetime
    help='Date when customer clicked on at least one tracked link'
  • display_name Char
    compute='_compute_display_name'
  • email Char
    string='Email'
  • exception Datetime
    help='Date of technical error leading to the email not being sent'
  • failure_type Selection
    selection=[('SMTP', 'Connection failed (outgoing mail server problem)'), ('RECIPIENT', 'Invalid email address'), ('BOUNCE', 'Email address rejected by destination'), ('UNKNOWN', 'Unknown error')] string='Failure type'
  • ignored Datetime
    help='Date when the email has been invalidated. Invalid emails are blacklisted, opted-out or invalid email format'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mailing_trace_id'
  • mail_mail_id Many2one → mail.mail
    index=True string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index=True string='Mail ID (tech)'
  • mass_mailing_id Many2one → mailing.mailing
    index=True ondelete='cascade' string='Mailing' args: 'mailing.mailing'
  • message_id Char
    string='Message-ID'
  • model Char
    string='Document model'
  • opened Datetime
    help='Date when the email has been opened the first time'
  • replied Datetime
    help='Date when this email has been replied for the first time.'
  • res_id Integer
    string='Document ID'
  • scheduled Datetime
    default=fields.Datetime.now help='Date when the email has been created'
  • sent Datetime
    help='Date when the email has been sent'
  • state Selection
    compute='_compute_state' selection=[('outgoing', 'Outgoing'), ('exception', 'Exception'), ('sent', 'Sent'), ('opened', 'Opened'), ('replied', 'Replied'), ('bounced', 'Bounced'), ('ignored', 'Ignored')] store=True
  • state_update Datetime
    compute='_compute_state' help='Last state update of the mail' store=True string='State Update'
  • trace_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Mail')]
Public methods (5)
  • create(self, values_list)
    @api.model_create_multi
  • set_bounced(self, mail_mail_ids=None, mail_message_ids=None)
  • set_clicked(self, mail_mail_ids=None, mail_message_ids=None)
  • set_opened(self, mail_mail_ids=None, mail_message_ids=None)
  • set_replied(self, mail_mail_ids=None, mail_message_ids=None)

New fields (12)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mass Mail Campaign'
  • clicked Integer
    readonly=True
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • mailing_type Selection
    default='mail' required=True string='Type' args: [('mail', 'Mail')]
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True string='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    Mass Mail Statistical Report: based on mailing.trace that models the various statistics collected for each mailing, and mailing.mailing model that models the various mailing performed.

New fields (4)
  • group_mass_mailing_campaign Boolean
    help='This is useful if your marketing campaigns are composed of several emails' implied_group='mass_mailing.group_mass_mailing_campaign' string='Mailing Campaigns'
  • mass_mailing_mail_server_id Many2one → ir.mail_server
    config_parameter='mass_mailing.mail_server_id' string='Mail Server' args: 'ir.mail_server'
  • mass_mailing_outgoing_mail_server Boolean
    config_parameter='mass_mailing.outgoing_mail_server' help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Dedicated Server'
  • show_blacklist_buttons Boolean
    config_parameter='mass_mailing.show_blacklist_buttons' help='Allow the recipient to manage himself his state in the blacklist via the unsubscription page.' string='Blacklist Option when Unsubscribing'
Public methods (0)

No public methods.

New fields (18)
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • delivered Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • ignored Integer
    compute='_compute_statistics'
  • mailing_clicked Integer
    compute='_compute_mailing_items' string='Mailings Clicked'
  • mailing_clicks_ratio Integer
    compute='_compute_mailing_clicks_ratio' string='Number of clicks'
  • mailing_items Integer
    compute='_compute_mailing_items' string='Mailings'
  • mailing_mail_count Integer
    compute='_compute_mailing_mail_count' args: 'Number of Mass Mailing'
  • mailing_mail_ids One2many → mailing.mailing
    domain=[('mailing_type', '=', 'mail')] string='Mass Mailings' args: 'mailing.mailing', 'campaign_id'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics' string='Sent Emails'
  • total Integer
    compute='_compute_statistics'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/12.0/mass_mailing
VERSION
VERSION 2.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Christophe Simonis, Nicolas Martinelli, Nicolas Lempereur, qdp-odoo, Jeremy Kersten, GitHub, Lucas Perais (lpe), Yannick Tivisse, Alexandre Kühn, qsm-odoo, Martin Geubelle, Nicolas Seinlet, len-odoo, Julien (juc) Castiaux, Jairo Llopis, Adrian Torres, XavierDo, Julien Castiaux, Priyanka Kakadiya, Xavier-Do, jvm-odoo, Paul Morelle, Anh Thao Pham (pta), std-odoo, Kinjal Mehta, David Beguin, Adrien Widart, Jérémy Hennecart
WEBSITE
WEBSITEhttps://www.odoo.com/page/mailing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:57:00
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - contacts
    - base
    - mail
    - base_setup
    - web
    - bus
    - web_tour
    - utm
    - link_tracker
    - web_editor
    - web_kanban_gauge
    - social_media
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (77)
XML IDNameModelTypeStatus
FieldTextHtmlInline Editor layout ir.ui.view qweb New
FieldTextHtmlPopupContent Editor layout ir.ui.view qweb New
assets_backend mass_mailing assets ir.ui.view qweb Inherits web.assets_backend
assets_editor assets_editor ir.ui.view qweb Inherits web_editor.assets_editor
assets_mail_themes assets_mail_themes ir.ui.view qweb New
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb Inherits web_editor.snippets
mail_mass_mailing_list_contact_rel_list_contact_view_tree mail.mass_mailing.list_contact_rel.list_contact.view.tree mail.mass_mailing.list_contact_rel tree New
mail_mass_mailing_list_contact_rel_view_form mail.mass_mailing.list_contact_rel.view.form mail.mass_mailing.list_contact_rel form New
mail_mass_mailing_list_contact_view_search mail.mass_mailing.list_contact_rel.view.search mail.mass_mailing.list_contact_rel search New
mail_mass_mailing_tag_view_form mail.mass_mailing.tag.form mail.mass_mailing.tag form New
mass_mailing.layout Mass Mailing Layout ir.ui.view qweb New
mass_mailing_list_merge_view_form mass.mailing.list.merge.form mass.mailing.list.merge form New
mass_mailing_mail_layout mass_mailing_mail_layout ir.ui.view qweb New
mass_mailing_mail_style mass_mailing_mail_style ir.ui.view qweb New
mass_mailing_schedule_date_view_form mass.mailing.schedule.date.view.form mass.mailing.schedule.date form New
page_unsubscribe Unsubscribe ir.ui.view qweb New
page_unsubscribed Unsubscribed ir.ui.view qweb New
res_config_settings_view_form res.config.settings.view.form.inherit.mass.mailing res.config.settings xpath Inherits base.res_config_settings_view_form
s_mail_block_banner Banner ir.ui.view qweb New
s_mail_block_comparison_table Comparison ir.ui.view qweb New
s_mail_block_discount1 Discount Offer ir.ui.view qweb New
s_mail_block_discount2 Promo Code ir.ui.view qweb New
s_mail_block_event Event ir.ui.view qweb New
s_mail_block_footer_separator Separator ir.ui.view qweb New
s_mail_block_footer_social Footer Center ir.ui.view qweb New
s_mail_block_footer_social_left Footer Left ir.ui.view qweb New
s_mail_block_footer_tag_line Tag Line ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_image Image ir.ui.view qweb New
s_mail_block_image_text Image - Text ir.ui.view qweb New
s_mail_block_paragraph Paragraph ir.ui.view qweb New
s_mail_block_steps Steps ir.ui.view qweb New
s_mail_block_text_image Text - Image ir.ui.view qweb New
s_mail_block_three_cols Three Columns ir.ui.view qweb New
s_mail_block_title_sub Title - Subtitle ir.ui.view qweb New
s_mail_block_title_text Title Content ir.ui.view qweb New
s_mail_block_two_cols Two Columns ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb New
theme_basic_template theme_basic_template ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
unsubscribe unsubscribe ir.ui.view qweb New
unsubscribed unsubscribed ir.ui.view qweb New
view_mail_mail_statistics_form mail.mail.statistics.form mail.mail.statistics form New
view_mail_mail_statistics_graph Mail Statistics Graph mail.mail.statistics graph New
view_mail_mail_statistics_search mail.mail.statistics.search mail.mail.statistics search New
view_mail_mail_statistics_tree mail.mail.statistics.tree mail.mail.statistics tree New
view_mail_mass_mailing_campaign_form mail.mass_mailing.campaign.form mail.mass_mailing.campaign form New
view_mail_mass_mailing_campaign_kanban mail.mass_mailing.campaign.kanban mail.mass_mailing.campaign kanban New
view_mail_mass_mailing_campaign_search mail.mass_mailing.campaign.search mail.mass_mailing.campaign search New
view_mail_mass_mailing_campaign_tree mail.mass_mailing.campaign.tree mail.mass_mailing.campaign tree New
view_mail_mass_mailing_contact_form mail.mass_mailing.contact.form mail.mass_mailing.contact form New
view_mail_mass_mailing_contact_graph mail.mass_mailing.contact.graph mail.mass_mailing.contact graph New
view_mail_mass_mailing_contact_kanban mail.mass_mailing.contact.kanban mail.mass_mailing.contact kanban New
view_mail_mass_mailing_contact_pivot mail.mass_mailing.contact.pivot mail.mass_mailing.contact pivot New
view_mail_mass_mailing_contact_search mail.mass_mailing.contact.search mail.mass_mailing.contact search New
view_mail_mass_mailing_contact_tree mail.mass_mailing.contact.tree mail.mass_mailing.contact tree New
view_mail_mass_mailing_form mail.mass_mailing.form mail.mass_mailing form New
view_mail_mass_mailing_graph mail.mass_mailing.graph mail.mass_mailing graph New
view_mail_mass_mailing_kanban mail.mass_mailing.kanban mail.mass_mailing kanban New
view_mail_mass_mailing_links_search link.tracker.search link.tracker search Inherits link_tracker.view_link_tracker_filter
view_mail_mass_mailing_links_tree link.tracker.tree link.tracker tree New
view_mail_mass_mailing_list_form mail.mass_mailing.list.form mail.mass_mailing.list form New
view_mail_mass_mailing_list_form_simplified mail.mass_mailing.list.form.simplified mail.mass_mailing.list form New
view_mail_mass_mailing_list_kanban mail.mass_mailing.list.kanban mail.mass_mailing.list kanban New
view_mail_mass_mailing_list_search mail.mass_mailing.list.search mail.mass_mailing.list search New
view_mail_mass_mailing_list_tree mail.mass_mailing.list.tree mail.mass_mailing.list tree New
view_mail_mass_mailing_search mail.mass_mailing.search mail.mass_mailing search New
view_mail_mass_mailing_stage_search mail.mass_mailing.stage.search mail.mass_mailing.stage search New
view_mail_mass_mailing_stage_tree mail.mass_mailing.stage.tree mail.mass_mailing.stage tree New
view_mail_mass_mailing_test_form mail.mass_mailing.test.form mail.mass_mailing.test form New
view_mail_mass_mailing_tree mail.mass_mailing.tree mail.mass_mailing tree New
view_mail_statistics_report_graph mail.statistics.report.graph mail.statistics.report graph New
view_mail_statistics_report_pivot mail.statistics.report.pivot mail.statistics.report pivot New
view_mail_statistics_report_search mail.statistics.report.search mail.statistics.report search New
Models touched (19)

New fields (2)
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
Public methods (0)

No public methods.

New fields (3)
  • mail_stat_id Many2one → mail.mail.statistics
    string='Mail Statistics' args: 'mail.mail.statistics'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
Public methods (1)
  • add_click(self, code, ip, country_code, stat_id=False)
    @api.model

New fields (4)
  • mailing_list_ids Many2many → mail.mass_mailing.list
    string='Mailing List' args: 'mail.mass_mailing.list'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    ondelete='cascade' string='Mass Mailing' args: 'mail.mass_mailing'
  • mass_mailing_name Char
    string='Mass Mailing Name'
Public methods (1)
  • get_mail_values(self, res_ids)
    @api.multi
    Override method that generated the mail content by creating the mail.mail.statistics values in the o2m of mail_mail, when doing pure email mass mailing.

New fields (2)
  • mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
  • statistics_ids One2many → mail.mail.statistics
    string='Statistics' args: 'mail.mail.statistics', 'mail_mail_id'
Public methods (1)
  • create(self, values)
    @api.model
    Override mail_mail creation to create an entry in mail.mail.statistics

New fields (19)
  • bounced Datetime
    help='Date when this email has bounced.'
  • clicked Datetime
    help='Date when customer clicked on at least one tracked link'
  • email Char
    string='Recipient email address'
  • exception Datetime
    help='Date of technical error leading to the email not being sent'
  • ignored Datetime
    help='Date when the email has been invalidated. Invalid emails are blacklisted, opted-out or invalid email format'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mail_stat_id'
  • mail_mail_id Many2one → mail.mail
    index=True string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index=True string='Mail ID (tech)'
  • mass_mailing_campaign_id Many2one
    index=True readonly=True related='mass_mailing_id.mass_mailing_campaign_id' store=True string='Mass Mailing Campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    index=True string='Mass Mailing' args: 'mail.mass_mailing'
  • message_id Char
    string='Message-ID'
  • model Char
    string='Document model'
  • opened Datetime
    help='Date when the email has been opened the first time'
  • replied Datetime
    help='Date when this email has been replied for the first time.'
  • res_id Integer
    string='Document ID'
  • scheduled Datetime
    default=fields.Datetime.now help='Date when the email has been created'
  • sent Datetime
    help='Date when the email has been sent'
  • state Selection
    compute='_compute_state' selection=[('outgoing', 'Outgoing'), ('exception', 'Exception'), ('sent', 'Sent'), ('opened', 'Opened'), ('replied', 'Replied'), ('bounced', 'Bounced'), ('ignored', 'Ignored')] store=True
  • state_update Datetime
    compute='_compute_state' help='Last state update of the mail' store=True string='State Update'
Public methods (5)
  • create(self, values)
    @api.model
  • set_bounced(self, mail_mail_ids=None, mail_message_ids=None)
  • set_clicked(self, mail_mail_ids=None, mail_message_ids=None)
  • set_opened(self, mail_mail_ids=None, mail_message_ids=None)
  • set_replied(self, mail_mail_ids=None, mail_message_ids=None)

New fields (41)
  • active Boolean
    default=True
  • attachment_ids Many2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_html Html
    sanitize_attributes=False string='Body'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    String='Bounced Ratio' compute='_compute_statistics'
  • campaign_id Many2one → utm.campaign
    help='This name helps you tracking your different campaign efforts, e.g. Fall_Drive, Christmas_Special' string='Campaign' args: 'utm.campaign'
  • clicked Integer
    compute='_compute_statistics'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    string='Color Index'
  • contact_ab_pc Integer
    default=100 help='Percentage of the contacts that will be mailed. Recipients will be taken randomly.' string='A/B Testing percentage'
  • contact_list_ids Many2many → mail.mass_mailing.list
    string='Mailing Lists' args: 'mail.mass_mailing.list', 'mail_mass_mailing_list_rel'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    default=<expr> required=True string='From'
  • expected Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • ignored Integer
    compute='_compute_statistics'
  • keep_archives Boolean
    string='Keep Archives'
  • mail_server_id Many2one → ir.mail_server
    default=_get_default_mail_server_id help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Mail Server' args: 'ir.mail_server'
  • mailing_domain Char
    default=[] oldname='domain' string='Domain'
  • mailing_model_id Many2one → ir.model
    default=<expr> domain=[('model', 'in', MASS_MAILING_BUSINESS_MODELS)] string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    readonly=True related='mailing_model_id.model' related_sudo=True string='Recipients Model Name'
  • mailing_model_real Char
    compute='_compute_model' default='mail.mass_mailing.contact' required=True string='Recipients Real Model'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • medium_id Many2one → utm.medium
    default=<expr> help='This is the delivery method, e.g. Postcard, Email, or Banner Ad' string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Scheduled date'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    default=<expr> help='Preferred Reply-To Address' string='Reply To'
  • reply_to_mode Selection
    required=True string='Reply-To Mode' args: [('thread', 'Recipient Followers'), ('email', 'Specified Email Address')]
  • schedule_date Datetime
    string='Schedule in the Future'
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False oldname='date' string='Sent Date'
  • source_id Many2one → utm.source
    help='This is the link source, e.g. Search Engine, another domain, or name of email list' ondelete='cascade' required=True string='Subject' args: 'utm.source'
  • state Selection
    copy=False default='draft' group_expand='_group_expand_states' required=True string='Status' args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • statistics_ids One2many → mail.mail.statistics
    string='Emails Statistics' args: 'mail.mail.statistics', 'mass_mailing_id'
  • total Integer
    compute='_compute_total'
  • user_id Many2one → res.users
    default=<expr> string='Mailing Manager' args: 'res.users'
Public methods (22)
  • action_duplicate(self)
    @api.multi
  • action_schedule_date(self)
    @api.multi
  • action_test_mailing(self)
    @api.multi
  • action_view_bounced(self)
  • action_view_clicked(self)
  • action_view_delivered(self)
  • action_view_opened(self)
  • action_view_replied(self)
  • action_view_sent(self)
  • cancel_mass_mailing(self)
    @api.multi
  • convert_links(self)
  • copy(self, default=None)
    @api.multi@api.returns('self', <expr>)
  • create(self, values)
    @api.model
  • default_get(self, fields)
    @api.model
  • get_recipients(self)
  • get_remaining_recipients(self)
  • name_create(self, name)
    @api.model
    _rec_name is source_id, creates a utm.source instead
  • put_in_queue(self)
    @api.multi
  • retry_failed_mail(self)
    @api.multi
  • send_mail(self, res_ids=None)
  • update_opt_out(self, email, list_ids, value)
  • write(self, values)

New fields (24)
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • campaign_id Many2one → utm.campaign
    help='This name helps you tracking your different campaign efforts, e.g. Fall_Drive, Christmas_Special' ondelete='cascade' required=True args: 'utm.campaign', 'campaign_id'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of clicks'
  • color Integer
    string='Color Index'
  • delivered Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • ignored Integer
    compute='_compute_statistics'
  • mass_mailing_ids One2many → mail.mass_mailing
    string='Mass Mailings' args: 'mail.mass_mailing', 'mass_mailing_campaign_id'
  • medium_id Many2one → utm.medium
    default=<expr> help='This is the delivery method, e.g. Postcard, Email, or Banner Ad' string='Medium' args: 'utm.medium'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics' string='Sent Emails'
  • source_id Many2one → utm.source
    default=<expr> help='This is the link source, e.g. Search Engine, another domain,or name of email list' string='Source' args: 'utm.source'
  • stage_id Many2one → mail.mass_mailing.stage
    default=<expr> group_expand='_group_expand_stage_ids' ondelete='restrict' required=True string='Stage' args: 'mail.mass_mailing.stage'
  • tag_ids Many2many → mail.mass_mailing.tag
    string='Tags' args: 'mail.mass_mailing.tag', 'mail_mass_mailing_tag_rel', 'tag_id', 'campaign_id'
  • total Integer
    compute='_compute_statistics'
  • total_mailings Integer
    compute='_compute_total_mailings' string='Mailings'
  • unique_ab_testing Boolean
    default=False help='If checked, recipients will be mailed only once for the whole campaign. This lets you send different mailings to randomly selected recipients and test the effectiveness of the mailings, without causing duplicate messages.' string='Allow A/B Testing'
  • user_id Many2one → res.users
    default=<expr> required=True string='Responsible' args: 'res.users'
Public methods (1)
  • get_recipients(self, model=None)
    Return the recipients of a mailing campaign. This is based on the statistics build for each mailing.

New fields (11)
  • company_name Char
    string='Company Name'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • email Char
    required=True
  • is_email_valid Boolean
    compute='_compute_is_email_valid' store=True
  • list_ids Many2many → mail.mass_mailing.list
    string='Mailing Lists' args: 'mail.mass_mailing.list', 'mail_mass_mailing_contact_list_rel', 'contact_id', 'list_id'
  • message_bounce Integer
    default=0 help='Counter of the number of bounced emails for this contact.' string='Bounced'
  • name Char
  • opt_out Boolean
    compute='_compute_opt_out' help='Opt out flag for a specific mailing list.This field should not be used in a view without a unique and active mailing list context.' search='_search_opt_out' args: 'Opt Out'
  • subscription_list_ids One2many → mail.mass_mailing.list_contact_rel
    string='Subscription Information' args: 'mail.mass_mailing.list_contact_rel', 'contact_id'
  • tag_ids Many2many → res.partner.category
    string='Tags' args: 'res.partner.category'
  • title_id Many2one → res.partner.title
    string='Title' args: 'res.partner.title'
Public methods (4)
  • add_to_list(self, name, list_id)
    @api.model
  • get_name_email(self, name)
  • message_get_default_recipients(self)
    @api.multi
  • name_create(self, name)
    @api.model

New fields (6)
  • active Boolean
    default=True
  • contact_ids Many2many → mail.mass_mailing.contact
    string='Mailing Lists' args: 'mail.mass_mailing.contact', 'mail_mass_mailing_contact_list_rel', 'list_id', 'contact_id'
  • contact_nbr Integer
    compute='_compute_contact_nbr' string='Number of Contacts'
  • is_public Boolean
    default=True help='The mailing list can be accessible by recipient in the unsubscription page to allows him to update his subscription preferences.'
  • name Char
    required=True string='Mailing List'
  • subscription_contact_ids One2many → mail.mass_mailing.list_contact_rel
    string='Subscription Information' args: 'mail.mass_mailing.list_contact_rel', 'list_id'
Public methods (4)
  • action_merge(self, src_lists, archive)
    @api.multi
    Insert all the contact from the mailing lists 'src_lists' to the mailing list in 'self'. Possibility to archive the mailing lists 'src_lists' after the merge except the destination mailing list 'self'.
  • close_dialog(self)
    @api.multi
  • name_get(self)
    @api.multi
  • write(self, vals)
    @api.multi

New fields (7)
  • contact_count Integer
    readonly=False related='list_id.contact_nbr' store=False
  • contact_id Many2one → mail.mass_mailing.contact
    ondelete='cascade' required=True string='Contact' args: 'mail.mass_mailing.contact'
  • is_blacklisted Boolean
    readonly=False related='contact_id.is_blacklisted' store=False
  • list_id Many2one → mail.mass_mailing.list
    ondelete='cascade' required=True string='Mailing List' args: 'mail.mass_mailing.list'
  • message_bounce Integer
    readonly=False related='contact_id.message_bounce' store=False
  • opt_out Boolean
    default=False help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • unsubscription_date Datetime
    string='Unsubscription Date'
Public methods (3)
  • action_open_mailing_list_contact(self)
    TODO DBE : To remove - Deprecated
  • create(self, vals)
    @api.model
  • write(self, vals)
    @api.multi

New fields (2)
  • name Char
    required=True translate=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (2)
  • color Integer
    string='Color Index'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (2)
  • email_to Char
    default=<expr> help='Comma-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mail.mass_mailing
    ondelete='cascade' required=True string='Mailing' args: 'mail.mass_mailing'
Public methods (1)
  • send_mail_test(self)
    @api.multi

New fields (11)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mass Mail Campaign'
  • clicked Integer
    readonly=True
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True stirng='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    @api.model_cr
    Mass Mail Statistical Report: based on mail.mail.statistics that models the various statistics collected for each mailing, and mail.mass_mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (1)
  • render_post_process(self, html)
    @api.model

New fields (0)

No new fields.

Public methods (4)
  • message_post_with_template(self, template_id, **kwargs)
    @api.multi
  • message_receive_bounce(self, email, partner, mail_id=None)
    @api.multi
    In addition, an auto blacklist rule check if the email can be blacklisted to avoid sending mails indefinitely to this email address. This rule checks if the email bounced too much. If this is the case, the email address is added to the blacklist in order to avoid continuing to send mass_mail to that email address. If it bounced too much times in the last month and the bounced are at least separated by one week, to avoid blacklist someone because of a temporary mail server error, then the email is considered as invalid and is blacklisted.
  • message_route(self, message, message_dict, model=None, thread_id=None, custom_values=None)
    @api.model
    Override to udpate mass mailing statistics based on bounce emails
  • message_route_process(self, message, message_dict, routes)
    @api.model
    Override to update the parent mail statistics. The parent is found by using the References header of the incoming message and looking for matching message_id in mail.mail.statistics.

New fields (5)
  • archive_src_lists Boolean
    default=True args: 'Archive source mailing lists'
  • dest_list_id Many2one → mail.mass_mailing.list
    string='Destination Mailing List' args: 'mail.mass_mailing.list'
  • merge_options Selection
    default='new' required=True args: [('new', 'Merge into a new mailing list'), ('existing', 'Merge into an existing mailing list')], 'Merge Option'
  • new_list_name Char
    args: 'New Mailing List Name'
  • src_list_ids Many2many → mail.mass_mailing.list
    string='Mailing Lists' args: 'mail.mass_mailing.list'
Public methods (2)
  • action_mailing_lists_merge(self)
    @api.multi
  • default_get(self, fields)
    @api.model

New fields (2)
  • mass_mailing_id Many2one → mail.mass_mailing
    required=True args: 'mail.mass_mailing'
  • schedule_date Datetime
    string='Schedule in the Future'
Public methods (1)
  • set_schedule_date(self)

New fields (4)
  • group_mass_mailing_campaign Boolean
    help='This is useful if your marketing campaigns are composed of several emails' implied_group='mass_mailing.group_mass_mailing_campaign' string='Mass Mailing Campaigns'
  • mass_mailing_mail_server_id Many2one → ir.mail_server
    config_parameter='mass_mailing.mail_server_id' string='Mail Server' args: 'ir.mail_server'
  • mass_mailing_outgoing_mail_server Boolean
    config_parameter='mass_mailing.outgoing_mail_server' help='Use a specific mail server in priority. Otherwise Odoo relies on the first outgoing mail server available (based on their sequencing) as it does for normal mails.' string='Specific Mail Server'
  • show_blacklist_buttons Boolean
    config_parameter='mass_mailing.show_blacklist_buttons' help='Allow the recipient to manage himself his state in the blacklist via the unsubscription page.' string='Show blacklist buttons on unsubscribe page'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/11.0/mass_mailing
VERSION
VERSION 2.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Christophe Simonis, Xavier Morel, Joren Van Onder, Nicolas Martinelli, Nicolas Lempereur, Julien Legros, xmo-odoo, Aaron Bohy, Pedro M. Baeza, Jeremy Kersten, GitHub, Lucas Perais (lpe), Damien Bouvy, Olivier Colson, Yannick Tivisse, qsm-odoo, Martin Geubelle, Odoo Online, Pierre Masereel, Toufik Benjaa, Adrien Dieudonne, Julien Castiaux, Hugo Adan, Adrien Dieudonné, Paul Morelle
WEBSITE
WEBSITEhttps://www.odoo.com/page/mailing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:53:42
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web
    - bus
    - web_tour
    - utm
    - link_tracker
    - web_editor
    - web_kanban_gauge
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION

Code Analysis

Views touched (65)
XML IDNameModelTypeStatus
FieldTextHtmlInline Editor layout ir.ui.view qweb New
FieldTextHtmlPopupContent Editor layout ir.ui.view qweb New
assets_backend mass_mailing assets ir.ui.view qweb Inherits web.assets_backend
assets_editor assets_editor ir.ui.view qweb Inherits web_editor.assets_editor
assets_mail_themes assets_mail_themes ir.ui.view qweb New
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb Inherits web_editor.snippets
mail_mass_mailing_tag_view_form mail.mass_mailing.tag.form mail.mass_mailing.tag form New
res_config_settings_view_form res.config.settings.view.form.inherit.mass.mailing res.config.settings xpath Inherits base.res_config_settings_view_form
s_mail_block_banner Banner ir.ui.view qweb New
s_mail_block_comparison_table Comparison ir.ui.view qweb New
s_mail_block_discount1 Discount Offer ir.ui.view qweb New
s_mail_block_discount2 Promo Code ir.ui.view qweb New
s_mail_block_event Event ir.ui.view qweb New
s_mail_block_footer_separator Separator ir.ui.view qweb New
s_mail_block_footer_social Footer Center ir.ui.view qweb New
s_mail_block_footer_social_left Footer Left ir.ui.view qweb New
s_mail_block_footer_tag_line Tag Line ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_image Image ir.ui.view qweb New
s_mail_block_image_text Image - Text ir.ui.view qweb New
s_mail_block_paragraph Paragraph ir.ui.view qweb New
s_mail_block_steps Steps ir.ui.view qweb New
s_mail_block_text_image Text - Image ir.ui.view qweb New
s_mail_block_three_cols Three Columns ir.ui.view qweb New
s_mail_block_title_sub Title - Subtitle ir.ui.view qweb New
s_mail_block_title_text Title Content ir.ui.view qweb New
s_mail_block_two_cols Two Columns ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb New
theme_basic_template theme_basic_template ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
view_company_form_inherit_mass_mailing res.company.form.inherit.mass.mail res.company xpath Inherits base.view_company_form
view_mail_mail_statistics_form mail.mail.statistics.form mail.mail.statistics form New
view_mail_mail_statistics_graph Mail Statistics Graph mail.mail.statistics graph New
view_mail_mail_statistics_search mail.mail.statistics.search mail.mail.statistics search New
view_mail_mail_statistics_tree mail.mail.statistics.tree mail.mail.statistics tree New
view_mail_mass_mailing_campaign_form mail.mass_mailing.campaign.form mail.mass_mailing.campaign form New
view_mail_mass_mailing_campaign_kanban mail.mass_mailing.campaign.kanban mail.mass_mailing.campaign kanban New
view_mail_mass_mailing_campaign_search mail.mass_mailing.campaign.search mail.mass_mailing.campaign search New
view_mail_mass_mailing_campaign_tree mail.mass_mailing.campaign.tree mail.mass_mailing.campaign tree New
view_mail_mass_mailing_contact_form mail.mass_mailing.contact.form mail.mass_mailing.contact form New
view_mail_mass_mailing_contact_graph mail.mass_mailing.contact.graph mail.mass_mailing.contact graph New
view_mail_mass_mailing_contact_kanban mail.mass_mailing.contact.kanban mail.mass_mailing.contact kanban New
view_mail_mass_mailing_contact_pivot mail.mass_mailing.contact.pivot mail.mass_mailing.contact pivot New
view_mail_mass_mailing_contact_search mail.mass_mailing.contact.search mail.mass_mailing.contact search New
view_mail_mass_mailing_contact_tree mail.mass_mailing.contact.tree mail.mass_mailing.contact tree New
view_mail_mass_mailing_form mail.mass_mailing.form mail.mass_mailing form New
view_mail_mass_mailing_graph mail.mass_mailing.graph mail.mass_mailing graph New
view_mail_mass_mailing_kanban mail.mass_mailing.kanban mail.mass_mailing kanban New
view_mail_mass_mailing_links_search link.tracker.search link.tracker search Inherits link_tracker.view_link_tracker_filter
view_mail_mass_mailing_links_tree link.tracker.tree link.tracker tree New
view_mail_mass_mailing_list_form mail.mass_mailing.list.form mail.mass_mailing.list form New
view_mail_mass_mailing_list_kanban mail.mass_mailing.list.kanban mail.mass_mailing.list kanban New
view_mail_mass_mailing_list_search mail.mass_mailing.list.search mail.mass_mailing.list search New
view_mail_mass_mailing_list_tree mail.mass_mailing.list.tree mail.mass_mailing.list tree New
view_mail_mass_mailing_search mail.mass_mailing.search mail.mass_mailing search New
view_mail_mass_mailing_stage_search mail.mass_mailing.stage.search mail.mass_mailing.stage search New
view_mail_mass_mailing_stage_tree mail.mass_mailing.stage.tree mail.mass_mailing.stage tree New
view_mail_mass_mailing_test_form mail.mass_mailing.test.form mail.mass_mailing.test form New
view_mail_mass_mailing_tree mail.mass_mailing.tree mail.mass_mailing tree New
view_mail_statistics_report_graph mail.statistics.report.graph mail.statistics.report graph New
view_mail_statistics_report_pivot mail.statistics.report.pivot mail.statistics.report pivot New
view_mail_statistics_report_search mail.statistics.report.search mail.statistics.report search New
Models touched (18)

New fields (0)

No new fields.

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

New fields (2)
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
Public methods (0)

No public methods.

New fields (3)
  • mail_stat_id Many2one → mail.mail.statistics
    string='Mail Statistics' args: 'mail.mail.statistics'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
Public methods (1)
  • add_click(self, code, ip, country_code, stat_id=False)
    @api.model

New fields (4)
  • mailing_list_ids Many2many → mail.mass_mailing.list
    string='Mailing List' args: 'mail.mass_mailing.list'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    ondelete='cascade' string='Mass Mailing' args: 'mail.mass_mailing'
  • mass_mailing_name Char
    string='Mass Mailing'
Public methods (1)
  • get_mail_values(self, res_ids)
    @api.multi
    Override method that generated the mail content by creating the mail.mail.statistics values in the o2m of mail_mail, when doing pure email mass mailing.

New fields (2)
  • mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
  • statistics_ids One2many → mail.mail.statistics
    string='Statistics' args: 'mail.mail.statistics', 'mail_mail_id'
Public methods (3)
  • create(self, values)
    @api.model
    Override mail_mail creation to create an entry in mail.mail.statistics
  • send_get_email_dict(self, partner=None)
    @api.multi
  • send_get_mail_body(self, partner=None)
    @api.multi
    Override to add the tracking URL to the body and to add Statistic_id in shorted urls

New fields (18)
  • bounced Datetime
    help='Date when this email has bounced.'
  • clicked Datetime
    help='Date when customer clicked on at least one tracked link'
  • exception Datetime
    help='Date of technical error leading to the email not being sent'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mail_stat_id'
  • mail_mail_id Many2one → mail.mail
    index=True string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index=True string='Mail ID (tech)'
  • mass_mailing_campaign_id Many2one
    readonly=True related='mass_mailing_id.mass_mailing_campaign_id' store=True string='Mass Mailing Campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
  • message_id Char
    string='Message-ID'
  • model Char
    string='Document model'
  • opened Datetime
    help='Date when the email has been opened the first time'
  • recipient Char
    compute='_compute_recipient'
  • replied Datetime
    help='Date when this email has been replied for the first time.'
  • res_id Integer
    string='Document ID'
  • scheduled Datetime
    default=fields.Datetime.now help='Date when the email has been created'
  • sent Datetime
    help='Date when the email has been sent'
  • state Selection
    compute='_compute_state' selection=[('outgoing', 'Outgoing'), ('exception', 'Exception'), ('sent', 'Sent'), ('opened', 'Opened'), ('replied', 'Replied'), ('bounced', 'Bounced')] store=True
  • state_update Datetime
    compute='_compute_state' help='Last state update of the mail' store=True string='State Update'
Public methods (5)
  • create(self, values)
    @api.model
  • set_bounced(self, mail_mail_ids=None, mail_message_ids=None)
  • set_clicked(self, mail_mail_ids=None, mail_message_ids=None)
  • set_opened(self, mail_mail_ids=None, mail_message_ids=None)
  • set_replied(self, mail_mail_ids=None, mail_message_ids=None)

New fields (38)
  • active Boolean
    default=True
  • attachment_ids Many2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_html Html
    sanitize_attributes=False string='Body'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    String='Bounced Ratio' compute='_compute_statistics'
  • campaign_id Many2one → utm.campaign
    help='This name helps you tracking your different campaign efforts, e.g. Fall_Drive, Christmas_Special' string='Campaign' args: 'utm.campaign'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    string='Color Index'
  • contact_ab_pc Integer
    default=100 help='Percentage of the contacts that will be mailed. Recipients will be taken randomly.' string='A/B Testing percentage'
  • contact_list_ids Many2many → mail.mass_mailing.list
    string='Mailing Lists' args: 'mail.mass_mailing.list', 'mail_mass_mailing_list_rel'
  • create_date Datetime
    string='Creation Date'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    default=<expr> required=True string='From'
  • failed Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • keep_archives Boolean
    string='Keep Archives'
  • mailing_domain Char
    default=[] oldname='domain' string='Domain'
  • mailing_model_id Many2one → ir.model
    default=<expr> domain=[('model', 'in', MASS_MAILING_BUSINESS_MODELS)] string='Recipients Model' args: 'ir.model'
  • mailing_model_name Char
    readonly=True related='mailing_model_id.model' related_sudo=True string='Recipients Model Name'
  • mailing_model_real Char
    compute='_compute_model' default='mail.mass_mailing.contact' required=True string='Recipients Real Model'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • medium_id Many2one → utm.medium
    default=<expr> help='This is the delivery method, e.g. Postcard, Email, or Banner Ad' string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Scheduled date'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    default=<expr> help='Preferred Reply-To Address' string='Reply To'
  • reply_to_mode Selection
    required=True string='Reply-To Mode' args: [('thread', 'Followers of leads/applicants'), ('email', 'Specified Email Address')]
  • schedule_date Datetime
    string='Schedule in the Future'
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False oldname='date' string='Sent Date'
  • source_id Many2one → utm.source
    help='This is the link source, e.g. Search Engine, another domain, or name of email list' ondelete='cascade' required=True string='Subject' args: 'utm.source'
  • state Selection
    copy=False default='draft' required=True string='Status' args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • statistics_ids One2many → mail.mail.statistics
    string='Emails Statistics' args: 'mail.mail.statistics', 'mass_mailing_id'
  • total Integer
    compute='_compute_total'
Public methods (14)
  • action_duplicate(self)
    @api.multi
  • action_test_mailing(self)
    @api.multi
  • cancel_mass_mailing(self)
    @api.multi
  • convert_links(self)
  • copy(self, default=None)
    @api.multi
  • default_get(self, fields)
    @api.model
  • get_recipients(self)
  • get_remaining_recipients(self)
  • name_create(self, name)
    @api.model
    _rec_name is source_id, creates a utm.source instead
  • put_in_queue(self)
    @api.multi
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Override read_group to always display all states.
  • retry_failed_mail(self)
    @api.multi
  • send_mail(self, res_ids=None)
  • update_opt_out(self, email, res_ids, value)

New fields (23)
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • campaign_id Many2one → utm.campaign
    help='This name helps you tracking your different campaign efforts, e.g. Fall_Drive, Christmas_Special' ondelete='cascade' required=True args: 'utm.campaign', 'campaign_id'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of clicks'
  • color Integer
    string='Color Index'
  • delivered Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • mass_mailing_ids One2many → mail.mass_mailing
    string='Mass Mailings' args: 'mail.mass_mailing', 'mass_mailing_campaign_id'
  • medium_id Many2one → utm.medium
    default=<expr> help='This is the delivery method, e.g. Postcard, Email, or Banner Ad' string='Medium' args: 'utm.medium'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics' string='Sent Emails'
  • source_id Many2one → utm.source
    default=<expr> help='This is the link source, e.g. Search Engine, another domain,or name of email list' string='Source' args: 'utm.source'
  • stage_id Many2one → mail.mass_mailing.stage
    default=<expr> required=True string='Stage' args: 'mail.mass_mailing.stage'
  • tag_ids Many2many → mail.mass_mailing.tag
    string='Tags' args: 'mail.mass_mailing.tag', 'mail_mass_mailing_tag_rel', 'tag_id', 'campaign_id'
  • total Integer
    compute='_compute_statistics'
  • total_mailings Integer
    compute='_compute_total_mailings' string='Mailings'
  • unique_ab_testing Boolean
    default=False help='If checked, recipients will be mailed only once for the whole campaign. This lets you send different mailings to randomly selected recipients and test the effectiveness of the mailings, without causing duplicate messages.' string='Allow A/B Testing'
  • user_id Many2one → res.users
    default=<expr> required=True string='Responsible' args: 'res.users'
Public methods (2)
  • get_recipients(self, model=None)
    Return the recipients of a mailing campaign. This is based on the statistics build for each mailing.
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Override read_group to always display all states.

New fields (11)
  • company_name Char
    string='Company Name'
  • country_id Many2one → res.country
    string='Country' args: 'res.country'
  • create_date Datetime
    string='Creation Date'
  • email Char
    required=True
  • list_ids Many2many → mail.mass_mailing.list
    string='Mailing Lists' args: 'mail.mass_mailing.list', 'mail_mass_mailing_contact_list_rel', 'contact_id', 'list_id'
  • message_bounce Integer
    default=0 help='Counter of the number of bounced emails for this contact.' string='Bounced'
  • name Char
  • opt_out Boolean
    help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • tag_ids Many2many → res.partner.category
    string='Tags' args: 'res.partner.category'
  • title_id Many2one → res.partner.title
    string='Title' args: 'res.partner.title'
  • unsubscription_date Datetime
    string='Unsubscription Date'
Public methods (6)
  • add_to_list(self, name, list_id)
    @api.model
  • create(self, vals)
    @api.model
  • get_name_email(self, name)
  • message_get_default_recipients(self)
    @api.multi
  • name_create(self, name)
    @api.model
  • write(self, vals)
    @api.multi

New fields (4)
  • active Boolean
    default=True
  • contact_nbr Integer
    compute='_compute_contact_nbr' string='Number of Contacts'
  • create_date Datetime
    string='Creation Date'
  • name Char
    required=True string='Mailing List'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (2)
  • color Integer
    string='Color Index'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (2)
  • email_to Char
    default=<expr> help='Comma-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mail.mass_mailing
    ondelete='cascade' required=True string='Mailing' args: 'mail.mass_mailing'
Public methods (1)
  • send_mail_test(self)
    @api.multi

New fields (10)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mass Mail Campaign'
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True stirng='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    @api.model_cr
    Mass Mail Statistical Report: based on mail.mail.statistics that models the various statistics collected for each mailing, and mail.mass_mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (1)
  • render_post_process(self, html)
    @api.model

New fields (0)

No new fields.

Public methods (3)
  • message_post_with_template(self, template_id, **kwargs)
    @api.multi
  • message_route(self, message, message_dict, model=None, thread_id=None, custom_values=None)
    @api.model
    Override to udpate mass mailing statistics based on bounce emails
  • message_route_process(self, message, message_dict, routes)
    @api.model
    Override to update the parent mail statistics. The parent is found by using the References header of the incoming message and looking for matching message_id in mail.mail.statistics.

New fields (6)
  • social_facebook Char
    args: 'Facebook Account'
  • social_github Char
    args: 'GitHub Account'
  • social_googleplus Char
    args: 'Google+ Account'
  • social_linkedin Char
    args: 'LinkedIn Account'
  • social_twitter Char
    args: 'Twitter Account'
  • social_youtube Char
    args: 'Youtube Account'
Public methods (0)

No public methods.

New fields (1)
  • group_mass_mailing_campaign Boolean
    help='This is useful if your marketing campaigns are composed of several emails' implied_group='mass_mailing.group_mass_mailing_campaign' string='Mass Mailing Campaigns'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/10.0/mass_mailing
VERSION
VERSION 2.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Olivier Dony, Thibault Delavallée, Denis Ledoux, Christophe Simonis, Goffin Simon, Simon Lejeune, Nicolas Martinelli, Nicolas Lempereur, Julien Legros, Richard Mathot, qdp-odoo, Jeremy Kersten, Yannick Tivisse, qsm-odoo, Tanguy Charlier
WEBSITE
WEBSITEhttps://www.odoo.com/page/mailing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:50:47
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web_kanban
    - web
    - bus
    - web_tour
    - utm
    - link_tracker
    - web_editor
    - web_kanban_gauge
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Easily send mass mailing to your leads, opportunities or customers. Track
marketing campaigns performance to improve conversion rates. Design
professional emails and reuse templates in a few clicks.
    

Code Analysis

Views touched (59)
XML IDNameModelTypeStatus
FieldTextHtmlInline Editor layout ir.ui.view qweb New
FieldTextHtmlPopupContent Editor layout ir.ui.view qweb New
assets_backend mass_mailing assets ir.ui.view qweb Inherits web.assets_backend
assets_editor assets_editor ir.ui.view qweb Inherits web_editor.assets_editor
assets_mail_themes assets_mail_themes ir.ui.view qweb New
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb Inherits web_editor.snippets
mail_mass_mailing_tag_view_form mail.mass_mailing.tag.form mail.mass_mailing.tag form New
s_mail_block_banner Banner ir.ui.view qweb New
s_mail_block_comparison_table Comparison ir.ui.view qweb New
s_mail_block_discount1 Discount Offer ir.ui.view qweb New
s_mail_block_discount2 Promo Code ir.ui.view qweb New
s_mail_block_event Event ir.ui.view qweb New
s_mail_block_footer_separator Separator ir.ui.view qweb New
s_mail_block_footer_social Footer Center ir.ui.view qweb New
s_mail_block_footer_social_left Footer Left ir.ui.view qweb New
s_mail_block_footer_tag_line Tag Line ir.ui.view qweb New
s_mail_block_header_logo Centered Logo ir.ui.view qweb New
s_mail_block_header_social Left Logo ir.ui.view qweb New
s_mail_block_header_text_social Left Text ir.ui.view qweb New
s_mail_block_image Image ir.ui.view qweb New
s_mail_block_image_text Image - Text ir.ui.view qweb New
s_mail_block_paragraph Paragraph ir.ui.view qweb New
s_mail_block_steps Steps ir.ui.view qweb New
s_mail_block_text_image Text - Image ir.ui.view qweb New
s_mail_block_three_cols Three Columns ir.ui.view qweb New
s_mail_block_title_sub Title - Subtitle ir.ui.view qweb New
s_mail_block_title_text Title Content ir.ui.view qweb New
s_mail_block_two_cols Two Columns ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb New
theme_default_template theme_default_template ir.ui.view qweb New
view_mail_mail_statistics_form mail.mail.statistics.form mail.mail.statistics form New
view_mail_mail_statistics_graph Mail Statistics Graph mail.mail.statistics graph New
view_mail_mail_statistics_search mail.mail.statistics.search mail.mail.statistics search New
view_mail_mail_statistics_tree mail.mail.statistics.tree mail.mail.statistics tree New
view_mail_mass_mailing_campaign_form mail.mass_mailing.campaign.form mail.mass_mailing.campaign form New
view_mail_mass_mailing_campaign_kanban mail.mass_mailing.campaign.kanban mail.mass_mailing.campaign kanban New
view_mail_mass_mailing_campaign_search mail.mass_mailing.campaign.search mail.mass_mailing.campaign search New
view_mail_mass_mailing_campaign_tree mail.mass_mailing.campaign.tree mail.mass_mailing.campaign tree New
view_mail_mass_mailing_contact_graph mail.mass_mailing.contact.graph mail.mass_mailing.contact graph New
view_mail_mass_mailing_contact_search mail.mass_mailing.contact.search mail.mass_mailing.contact search New
view_mail_mass_mailing_contact_tree mail.mass_mailing.contact.tree mail.mass_mailing.contact tree New
view_mail_mass_mailing_form mail.mass_mailing.form mail.mass_mailing form New
view_mail_mass_mailing_graph mail.mass_mailing.graph mail.mass_mailing graph New
view_mail_mass_mailing_kanban mail.mass_mailing.kanban mail.mass_mailing kanban New
view_mail_mass_mailing_links_search link.tracker.search link.tracker search Inherits link_tracker.view_link_tracker_filter
view_mail_mass_mailing_links_tree link.tracker.tree link.tracker tree New
view_mail_mass_mailing_list_form mail.mass_mailing.list.form mail.mass_mailing.list form New
view_mail_mass_mailing_list_search mail.mass_mailing.list.search mail.mass_mailing.list search New
view_mail_mass_mailing_list_tree mail.mass_mailing.list.tree mail.mass_mailing.list tree New
view_mail_mass_mailing_search mail.mass_mailing.search mail.mass_mailing search New
view_mail_mass_mailing_stage_search mail.mass_mailing.stage.search mail.mass_mailing.stage search New
view_mail_mass_mailing_stage_tree mail.mass_mailing.stage.tree mail.mass_mailing.stage tree New
view_mail_mass_mailing_test_form mail.mass_mailing.test.form mail.mass_mailing.test form New
view_mail_mass_mailing_tree mail.mass_mailing.tree mail.mass_mailing tree New
view_mail_statistics_report_graph mail.statistics.report.graph mail.statistics.report graph New
view_mail_statistics_report_pivot mail.statistics.report.pivot mail.statistics.report pivot New
view_mail_statistics_report_search mail.statistics.report.search mail.statistics.report search New
view_mass_mailing_configuration Configure Mass Mailing mass.mailing.config.settings form New
Models touched (15)

New fields (2)
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
Public methods (0)

No public methods.

New fields (3)
  • mail_stat_id Many2one → mail.mail.statistics
    string='Mail Statistics' args: 'mail.mail.statistics'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
Public methods (0)

No public methods.

New fields (4)
  • mailing_list_ids Many2many → mail.mass_mailing.list
    string='Mailing List' args: 'mail.mass_mailing.list'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    ondelete='cascade' string='Mass Mailing' args: 'mail.mass_mailing'
  • mass_mailing_name Char
    string='Mass Mailing'
Public methods (1)
  • get_mail_values(self, res_ids)
    @api.multi
    Override method that generated the mail content by creating the mail.mail.statistics values in the o2m of mail_mail, when doing pure email mass mailing.

New fields (2)
  • mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
  • statistics_ids One2many → mail.mail.statistics
    string='Statistics' args: 'mail.mail.statistics', 'mail_mail_id'
Public methods (3)
  • create(self, values)
    @api.model
    Override mail_mail creation to create an entry in mail.mail.statistics
  • send_get_email_dict(self, partner=None)
    @api.multi
  • send_get_mail_body(self, partner=None)
    @api.multi
    Override to add the tracking URL to the body and to add Statistic_id in shorted urls

New fields (17)
  • bounced Datetime
    help='Date when this email has bounced.'
  • exception Datetime
    help='Date of technical error leading to the email not being sent'
  • links_click_ids One2many → link.tracker.click
    string='Links click' args: 'link.tracker.click', 'mail_stat_id'
  • mail_mail_id Many2one → mail.mail
    index=True string='Mail' args: 'mail.mail'
  • mail_mail_id_int Integer
    help='ID of the related mail_mail. This field is an integer field because the related mail_mail can be deleted separately from its statistics. However the ID is needed for several action and controllers.' index=True string='Mail ID (tech)'
  • mass_mailing_campaign_id Many2one
    readonly=True related='mass_mailing_id.mass_mailing_campaign_id' store=True string='Mass Mailing Campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
  • message_id Char
    string='Message-ID'
  • model Char
    string='Document model'
  • opened Datetime
    help='Date when the email has been opened the first time'
  • recipient Char
    compute='_compute_recipient'
  • replied Datetime
    help='Date when this email has been replied for the first time.'
  • res_id Integer
    string='Document ID'
  • scheduled Datetime
    default=fields.Datetime.now help='Date when the email has been created'
  • sent Datetime
    help='Date when the email has been sent'
  • state Selection
    compute='_compute_state' selection=[('outgoing', 'Outgoing'), ('exception', 'Exception'), ('sent', 'Sent'), ('opened', 'Opened'), ('replied', 'Replied'), ('bounced', 'Bounced')] store=True
  • state_update Datetime
    compute='_compute_state' help='Last state update of the mail' store=True string='State Update'
Public methods (4)
  • create(self, values)
    @api.model
  • set_bounced(self, mail_mail_ids=None, mail_message_ids=None)
  • set_opened(self, mail_mail_ids=None, mail_message_ids=None)
  • set_replied(self, mail_mail_ids=None, mail_message_ids=None)

New fields (36)
  • active Boolean
    default=True
  • attachment_ids Many2many → ir.attachment
    string='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id'
  • body_html Html
    sanitize_attributes=False string='Body'
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    String='Bounced Ratio' compute='_compute_statistics'
  • campaign_id Many2one → utm.campaign
    help='This name helps you tracking your different campaign efforts, e.g. Fall_Drive, Christmas_Special' string='Campaign' args: 'utm.campaign'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of Clicks'
  • color Integer
    related='mass_mailing_campaign_id.color' string='Color Index'
  • contact_ab_pc Integer
    default=100 help='Percentage of the contacts that will be mailed. Recipients will be taken randomly.' string='A/B Testing percentage'
  • contact_list_ids Many2many → mail.mass_mailing.list
    string='Mailing Lists' args: 'mail.mass_mailing.list', 'mail_mass_mailing_list_rel'
  • create_date Datetime
    string='Creation Date'
  • delivered Integer
    compute='_compute_statistics'
  • email_from Char
    default=<expr> required=True string='From'
  • failed Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • keep_archives Boolean
    string='Keep Archives'
  • mailing_domain Char
    default=[] oldname='domain' string='Domain'
  • mailing_model Selection
    default='mail.mass_mailing.contact' required=True selection=_mailing_model string='Recipients Model'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • medium_id Many2one → utm.medium
    default=<expr> help='This is the delivery method, e.g. Postcard, Email, or Banner Ad' string='Medium' args: 'utm.medium'
  • next_departure Datetime
    compute='_compute_next_departure' string='Next Departure'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • reply_to Char
    default=<expr> help='Preferred Reply-To Address' string='Reply To'
  • reply_to_mode Selection
    required=True string='Reply-To Mode' args: [('thread', 'Followers of leads/applicants'), ('email', 'Specified Email Address')]
  • schedule_date Datetime
    string='Schedule in the Future'
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics'
  • sent_date Datetime
    copy=False oldname='date' string='Sent Date'
  • source_id Many2one → utm.source
    help='This is the link source, e.g. Search Engine, another domain, or name of email list' ondelete='cascade' required=True string='Subject' args: 'utm.source'
  • state Selection
    copy=False default='draft' required=True string='Status' args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')]
  • statistics_ids One2many → mail.mail.statistics
    string='Emails Statistics' args: 'mail.mail.statistics', 'mass_mailing_id'
  • total Integer
    compute='_compute_total'
Public methods (14)
  • action_duplicate(self)
    @api.multi
  • action_test_mailing(self)
    @api.multi
  • cancel_mass_mailing(self)
    @api.multi
  • convert_links(self)
  • copy(self, default=None)
    @api.multi
  • default_get(self, fields)
    @api.model
  • get_recipients(self)
  • get_remaining_recipients(self)
  • name_create(self, name)
    @api.model
    _rec_name is source_id, creates a utm.source instead
  • put_in_queue(self)
    @api.multi
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Override read_group to always display all states.
  • retry_failed_mail(self)
    @api.multi
  • send_mail(self)
  • update_opt_out(self, email, res_ids, value)

New fields (23)
  • bounced Integer
    compute='_compute_statistics'
  • bounced_ratio Integer
    compute='_compute_statistics' string='Bounced Ratio'
  • campaign_id Many2one → utm.campaign
    help='This name helps you tracking your different campaign efforts, e.g. Fall_Drive, Christmas_Special' ondelete='cascade' required=True args: 'utm.campaign', 'campaign_id'
  • clicks_ratio Integer
    compute='_compute_clicks_ratio' string='Number of clicks'
  • color Integer
    string='Color Index'
  • delivered Integer
    compute='_compute_statistics'
  • failed Integer
    compute='_compute_statistics'
  • mass_mailing_ids One2many → mail.mass_mailing
    string='Mass Mailings' args: 'mail.mass_mailing', 'mass_mailing_campaign_id'
  • medium_id Many2one → utm.medium
    default=<expr> help='This is the delivery method, e.g. Postcard, Email, or Banner Ad' string='Medium' args: 'utm.medium'
  • opened Integer
    compute='_compute_statistics'
  • opened_ratio Integer
    compute='_compute_statistics' string='Opened Ratio'
  • received_ratio Integer
    compute='_compute_statistics' string='Received Ratio'
  • replied Integer
    compute='_compute_statistics'
  • replied_ratio Integer
    compute='_compute_statistics' string='Replied Ratio'
  • scheduled Integer
    compute='_compute_statistics'
  • sent Integer
    compute='_compute_statistics' string='Sent Emails'
  • source_id Many2one → utm.source
    default=<expr> help='This is the link source, e.g. Search Engine, another domain,or name of email list' string='Source' args: 'utm.source'
  • stage_id Many2one → mail.mass_mailing.stage
    default=<expr> required=True string='Stage' args: 'mail.mass_mailing.stage'
  • tag_ids Many2many → mail.mass_mailing.tag
    string='Tags' args: 'mail.mass_mailing.tag', 'mail_mass_mailing_tag_rel', 'tag_id', 'campaign_id'
  • total Integer
    compute='_compute_statistics'
  • total_mailings Integer
    compute='_compute_total_mailings' string='Mailings'
  • unique_ab_testing Boolean
    help='If checked, recipients will be mailed only once, allowing to send various mailings in a single campaign to test the effectiveness of the mailings.' string='AB Testing'
  • user_id Many2one → res.users
    default=<expr> required=True string='Responsible' args: 'res.users'
Public methods (2)
  • get_recipients(self, model=None)
    Return the recipients of a mailing campaign. This is based on the statistics build for each mailing.
  • read_group(self, domain, fields, groupby, offset=0, limit=None, orderby=False, lazy=True)
    @api.model
    Override read_group to always display all states.

New fields (7)
  • create_date Datetime
    string='Create Date'
  • email Char
    required=True
  • list_id Many2one → mail.mass_mailing.list
    default=<expr> ondelete='cascade' required=True string='Mailing List' args: 'mail.mass_mailing.list'
  • message_bounce Integer
    help='Counter of the number of bounced emails for this contact.' string='Bounce'
  • name Char
  • opt_out Boolean
    help='The contact has chosen not to receive mails anymore from this list' string='Opt Out'
  • unsubscription_date Datetime
    string='Unsubscription Date'
Public methods (6)
  • add_to_list(self, name, list_id)
    @api.model
  • create(self, vals)
    @api.model
  • get_name_email(self, name)
  • message_get_default_recipients(self)
    @api.multi
  • name_create(self, name)
    @api.model
  • write(self, vals)
    @api.multi

New fields (4)
  • active Boolean
    default=True
  • contact_nbr Integer
    compute='_compute_contact_nbr' string='Number of Contacts'
  • create_date Datetime
    string='Creation Date'
  • name Char
    required=True string='Mailing List'
Public methods (0)

No public methods.

New fields (2)
  • name Char
    required=True translate=True
  • sequence Integer
Public methods (0)

No public methods.

New fields (2)
  • color Integer
    string='Color Index'
  • name Char
    required=True translate=True
Public methods (0)

No public methods.

New fields (2)
  • email_to Char
    default=<expr> help='Comma-separated list of email addresses.' required=True string='Recipients'
  • mass_mailing_id Many2one → mail.mass_mailing
    ondelete='cascade' required=True string='Mailing' args: 'mail.mass_mailing'
Public methods (1)
  • send_mail_test(self)
    @api.multi

New fields (10)
  • bounced Integer
    readonly=True
  • campaign Char
    readonly=True string='Mass Mail Campaign'
  • delivered Integer
    readonly=True
  • email_from Char
    readonly=True args: 'From'
  • name Char
    readonly=True string='Mass Mail'
  • opened Integer
    readonly=True
  • replied Integer
    readonly=True
  • scheduled_date Datetime
    readonly=True stirng='Scheduled Date'
  • sent Integer
    readonly=True
  • state Selection
    readonly=True string='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
Public methods (1)
  • init(self)
    @api.model_cr
    Mass Mail Statistical Report: based on mail.mail.statistics that models the various statistics collected for each mailing, and mail.mass_mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (3)
  • message_post_with_template(self, template_id, **kwargs)
    @api.multi
  • message_route(self, message, message_dict, model=None, thread_id=None, custom_values=None)
    @api.model
    Override to udpate mass mailing statistics based on bounce emails
  • message_route_process(self, message, message_dict, routes)
    @api.model
    Override to update the parent mail statistics. The parent is found by using the References header of the incoming message and looking for matching message_id in mail.mail.statistics.

New fields (2)
  • group_mass_mailing_campaign Selection
    help='Manage mass mailign using Campaigns' implied_group='mass_mailing.group_mass_mailing_campaign' string='Campaigns' args: [(0, 'Do not organize and schedule mail campaigns (easy)'), (1, 'Allow using marketing campaigns (advanced)')]
  • module_mass_mailing_themes Boolean
    args: 'Mass mailing themes'
Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/9.0/mass_mailing
VERSION
VERSION 2.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONYes
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORS
MAINTAINERS
MAINTAINERS
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, David Monjoie, Xavier Morel, Joren Van Onder, Goffin Simon, Nicolas Martinelli, Nicolas Lempereur, Jérome Maes, Richard Mathot, Géry Debongnie, Aaron Bohy, Jeremy Kersten, GitHub, Damien Bouvy, Julien De Coster, Yannick Tivisse, qsm-odoo, Martin Geubelle
WEBSITE
WEBSITEhttps://www.odoo.com/page/mailing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:48:29
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web_kanban
    - web
    - bus
    - marketing
    - utm
    - link_tracker
    - web_editor
    - web_kanban_gauge
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Easily send mass mailing to your leads, opportunities or customers. Track
marketing campaigns performance to improve conversion rates. Design
professional emails and reuse templates in a few clicks.
    

Code Analysis

Views touched (37)
XML IDNameModelTypeStatus
FieldTextHtmlInline Editor layout ir.ui.view qweb New
FieldTextHtmlPopupContent Editor layout ir.ui.view qweb New
assets_backend mass_mailing assets ir.ui.view qweb Inherits web.assets_backend
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_designer_snippets email_designer_snippets ir.ui.view qweb New
email_template_form_minimal email.template.form.minimal mail.template form New
mass_mail_theme_list mass_mail_theme_list ir.ui.view qweb New
snippet_options snippet_options ir.ui.view qweb New
view_email_template_kanban email.template.kanban mail.template kanban New
view_mail_mail_statistics_form mail.mail.statistics.form mail.mail.statistics form New
view_mail_mail_statistics_graph Mail Statistics Graph mail.mail.statistics graph New
view_mail_mail_statistics_search mail.mail.statistics.search mail.mail.statistics search New
view_mail_mail_statistics_tree mail.mail.statistics.tree mail.mail.statistics tree New
view_mail_mass_mailing_campaign_form mail.mass_mailing.campaign.form mail.mass_mailing.campaign form New
view_mail_mass_mailing_campaign_kanban mail.mass_mailing.campaign.kanban mail.mass_mailing.campaign kanban New
view_mail_mass_mailing_campaign_search mail.mass_mailing.campaign.search mail.mass_mailing.campaign search New
view_mail_mass_mailing_campaign_tree mail.mass_mailing.campaign.tree mail.mass_mailing.campaign tree New
view_mail_mass_mailing_contact_graph mail.mass_mailing.contact.graph mail.mass_mailing.contact graph New
view_mail_mass_mailing_contact_search mail.mass_mailing.contact.search mail.mass_mailing.contact search New
view_mail_mass_mailing_contact_tree mail.mass_mailing.contact.tree mail.mass_mailing.contact tree New
view_mail_mass_mailing_form mail.mass_mailing.form mail.mass_mailing form New
view_mail_mass_mailing_graph mail.mass_mailing.graph mail.mass_mailing graph New
view_mail_mass_mailing_kanban mail.mass_mailing.kanban mail.mass_mailing kanban New
view_mail_mass_mailing_links_search link.tracker.search link.tracker search Inherits link_tracker.view_link_tracker_filter
view_mail_mass_mailing_links_tree link.tracker.tree link.tracker tree New
view_mail_mass_mailing_list_form mail.mass_mailing.list.form mail.mass_mailing.list form New
view_mail_mass_mailing_list_search mail.mass_mailing.list.search mail.mass_mailing.list search New
view_mail_mass_mailing_list_tree mail.mass_mailing.list.tree mail.mass_mailing.list tree New
view_mail_mass_mailing_search mail.mass_mailing.search mail.mass_mailing search New
view_mail_mass_mailing_stage_search mail.mass_mailing.stage.search mail.mass_mailing.stage search New
view_mail_mass_mailing_stage_tree mail.mass_mailing.stage.tree mail.mass_mailing.stage tree New
view_mail_mass_mailing_test_form mail.mass_mailing.test.form mail.mass_mailing.test form New
view_mail_mass_mailing_tree mail.mass_mailing.tree mail.mass_mailing tree New
view_mail_statistics_report_graph mail.statistics.report.graph mail.statistics.report graph New
view_mail_statistics_report_pivot mail.statistics.report.pivot mail.statistics.report pivot New
view_mail_statistics_report_search mail.statistics.report.search mail.statistics.report search New
view_mass_mailing_configuration Configure Mass Mailing mass.mailing.config.settings form New
Models touched (15)

New fields (2)
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
Public methods (0)

No public methods.

New fields (3)
  • mail_stat_id Many2one → mail.mail.statistics
    string='Mail Statistics' args: 'mail.mail.statistics'
  • mass_mailing_campaign_id Many2one → mail.mass_mailing.campaign
    string='Mass Mailing Campaign' args: 'mail.mass_mailing.campaign'
  • mass_mailing_id Many2one → mail.mass_mailing
    string='Mass Mailing' args: 'mail.mass_mailing'
Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • get_mail_values(self, cr, uid, ids, res_ids, context=None)
    Override method that generated the mail content by creating the mail.mail.statistics values in the o2m of mail_mail, when doing pure email mass mailing.

New fields (0)

No new fields.

Public methods (3)
  • create(self, cr, uid, values, context=None)
    Override mail_mail creation to create an entry in mail.mail.statistics
  • send_get_email_dict(self, cr, uid, ids, partner=None, context=None)
  • send_get_mail_body(self, cr, uid, ids, partner=None, context=None)
    Override to add the tracking URL to the body and to add Statistic_id in shorted urls

New fields (0)

No new fields.

Public methods (4)
  • create(self, cr, uid, values, context=None)
  • set_bounced(self, cr, uid, ids=None, mail_mail_ids=None, mail_message_ids=None, context=None)
  • set_opened(self, cr, uid, ids=None, mail_mail_ids=None, mail_message_ids=None, context=None)
  • set_replied(self, cr, uid, ids=None, mail_mail_ids=None, mail_message_ids=None, context=None)

New fields (0)

No new fields.

Public methods (16)
  • action_duplicate(self, cr, uid, ids, context=None)
  • action_test_mailing(self, cr, uid, ids, context=None)
  • cancel_mass_mailing(self, cr, uid, ids, context=None)
  • convert_links(self, cr, uid, ids, context=None)
  • copy_data(self, cr, uid, id, default=None, context=None)
  • default_get(self, cr, uid, fields, context=None)
  • get_recipients(self, cr, uid, mailing, context=None)
  • get_remaining_recipients(self, cr, uid, mailing, context=None)
  • mass_mailing_statistics_action(self, cr, uid, ids, context=None)
  • on_change_model_and_list(self, cr, uid, ids, mailing_model, list_ids, context=None)
  • onchange_mass_mailing_campaign_id(self, cr, uid, id, mass_mailing_campaign_ids, context=None)
  • put_in_queue(self, cr, uid, ids, context=None)
  • read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True)
    Override read_group to always display all states.
  • retry_failed_mail(self, cr, uid, mass_mailing_ids, context=None)
  • send_mail(self, cr, uid, ids, context=None)
  • update_opt_out(self, cr, uid, mailing_id, email, res_ids, value, context=None)

New fields (0)

No new fields.

Public methods (4)
  • get_recipients(self, cr, uid, ids, model=None, context=None)
    Return the recipients of a mailing campaign. This is based on the statistics build for each mailing.
  • mass_mailing_statistics_action(self, cr, uid, ids, context=None)
  • on_change_campaign_name(self, cr, uid, ids, name, context=None)
  • read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True)
    Override read_group to always display all states.

New fields (0)

No new fields.

Public methods (8)
  • add_to_list(self, cr, uid, name, list_id, context=None)
  • create(self, cr, uid, vals, context=None)
  • get_name_email(self, name, context)
  • message_get_default_recipients(self, cr, uid, ids, context=None)
  • message_receive_bounce(self, cr, uid, ids, mail_id=None, context=None)
    Called by ``message_process`` when a bounce email (such as Undelivered Mail Returned to Sender) is received for an existing thread. As contacts do not inherit form mail.thread, we have to define this method to be able to track bounces (see mail.thread for more details).
  • name_create(self, cr, uid, name, context=None)
  • on_change_opt_out(self, cr, uid, id, opt_out, context=None)
  • write(self, cr, uid, ids, vals, context=None)

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 (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (1)
  • send_mail_test(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • init(self, cr)
    Mass Mail Statistical Report: based on mail.mail.statistics that models the various statistics collected for each mailing, and mail.mass_mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (4)
  • message_receive_bounce(self, cr, uid, ids, mail_id=None, context=None)
    Called by ``message_process`` when a bounce email (such as Undelivered Mail Returned to Sender) is received for an existing thread. The default behavior is to check is an integer ``message_bounce`` column exists. If it is the case, its content is incremented.
  • message_route(self, cr, uid, message, message_dict, model=None, thread_id=None, custom_values=None, context=None)
  • message_route_check_bounce(self, cr, uid, message, context=None)
    Override to verify that the email_to is the bounce alias. If it is the case, log the bounce, set the parent and related document as bounced and return False to end the routing process.
  • message_route_process(self, cr, uid, message, message_dict, routes, context=None)
    Override to update the parent mail statistics. The parent is found by using the References header of the incoming message and looking for matching message_id in mail.mail.statistics.

New fields (0)

No new fields.

Public methods (0)

No public methods.

REPOSITORY
REPOSITORYodoo/odoo
GIT
GIThttps://github.com/odoo/odoo.git
GIT FOLDER
GIT FOLDERhttps://github.com/odoo/odoo/tree/8.0/mass_mailing
VERSION
VERSION 2.0
CATEGORY
CATEGORYMarketing
LICENSE
LICENSELGPL-3
APPLICATION
APPLICATIONNo
AUTO-INSTALLABLE
AUTO-INSTALLABLENo
AUTHORS
AUTHORSOpenERP
MAINTAINERS
MAINTAINERSOpenERP
COMMITTERS
COMMITTERSRaphael Collet, Odoo Translation Bot, Christophe Matthieu, Martin Trigaux, Fabien Pinckaers, Antony Lesuisse, Olivier Dony, Thibault Delavallée, Denis Ledoux, Fabien Meghazi, Christophe Simonis, David Monjoie, Xavier Morel, Nicolas Lempereur, Richard Mathot, Géry Debongnie, Olivier LAURENT, ged-odoo, Jeremy Kersten, ima-openerp, Gery Debongnie, Anthony Muschang, Julien De Coster
WEBSITE
WEBSITEhttps://www.odoo.com/page/mailing
LAST TRACKING UPDATE
LAST TRACKING UPDATE2026-07-05 23:45:38
ODOO DEPENDENCIES
ODOO DEPENDENCIES odoo/odoo:
    - mail
    - base
    - base_setup
    - web_kanban
    - web
    - email_template
    - marketing
    - web_kanban_gauge
    - web_kanban_sparkline
    - website_mail
    - website
    - share
PYTHON DEPENDENCIES
PYTHON DEPENDENCIES Not have
SYSTEM DEPENDENCIES
SYSTEM DEPENDENCIES Not have
DESCRIPTION
DESCRIPTION
Easily send mass mailing to your leads, opportunities or customers. Track
marketing campaigns performance to improve conversion rates. Design
professional emails and reuse templates in a few clicks.
    

Code Analysis

Views touched (30)
XML IDNameModelTypeStatus
assets_backend mass_mailing assets ir.ui.view qweb Inherits web.assets_backend
assets_editor wesbite_mass_mailing Editor assets ir.ui.view qweb Inherits website.assets_editor
assets_frontend wesbite_mass_mailing assets ir.ui.view qweb Inherits website.assets_frontend
email_compose_form_mass_mailing mail.compose.message.form.mass_mailing mail.compose.message xpath Inherits mail.email_compose_message_wizard_form
email_template_form_minimal email.template.form.minimal email.template form New
mailing_list_subscribe Subscribe to Newsletter ir.ui.view qweb Inherits website.snippets
view_email_template_kanban email.template.kanban email.template kanban New
view_mail_mail_statistics_form mail.mail.statistics.form mail.mail.statistics form New
view_mail_mail_statistics_search mail.mail.statistics.search mail.mail.statistics search New
view_mail_mail_statistics_tree mail.mail.statistics.tree mail.mail.statistics tree New
view_mail_mass_mailing_campaign_form mail.mass_mailing.campaign.form mail.mass_mailing.campaign form New
view_mail_mass_mailing_campaign_kanban mail.mass_mailing.campaign.kanban mail.mass_mailing.campaign kanban New
view_mail_mass_mailing_campaign_search mail.mass_mailing.campaign.search mail.mass_mailing.campaign search New
view_mail_mass_mailing_campaign_tree mail.mass_mailing.campaign.tree mail.mass_mailing.campaign tree New
view_mail_mass_mailing_contact_search mail.mass_mailing.contact.search mail.mass_mailing.contact search New
view_mail_mass_mailing_contact_tree mail.mass_mailing.contact.tree mail.mass_mailing.contact tree New
view_mail_mass_mailing_form mail.mass_mailing.form mail.mass_mailing form New
view_mail_mass_mailing_graph mail.mass_mailing.graph mail.mass_mailing graph New
view_mail_mass_mailing_kanban mail.mass_mailing.kanban mail.mass_mailing kanban New
view_mail_mass_mailing_list_form mail.mass_mailing.list.form mail.mass_mailing.list form New
view_mail_mass_mailing_list_search mail.mass_mailing.list.search mail.mass_mailing.list search New
view_mail_mass_mailing_list_tree mail.mass_mailing.list.tree mail.mass_mailing.list tree New
view_mail_mass_mailing_search mail.mass_mailing.search mail.mass_mailing search New
view_mail_mass_mailing_stage_search mail.mass_mailing.stage.search mail.mass_mailing.stage search New
view_mail_mass_mailing_stage_tree mail.mass_mailing.stage.tree mail.mass_mailing.stage tree New
view_mail_mass_mailing_test_form mail.mass_mailing.test.form mail.mass_mailing.test form New
view_mail_mass_mailing_tree mail.mass_mailing.tree mail.mass_mailing tree New
view_mail_statistics_report_graph mail.statistics.report.graph mail.statistics.report graph New
view_mail_statistics_report_search mail.statistics.report.search mail.statistics.report search New
view_marketing_configuration_mass_mailing marketing.config.settings.mass.mailing marketing.config.settings xpath Inherits marketing.view_marketing_configuration
Models touched (13)

New fields (0)

No new fields.

Public methods (1)
  • get_mail_values(self, cr, uid, wizard, res_ids, context=None)
    Override method that generated the mail content by creating the mail.mail.statistics values in the o2m of mail_mail, when doing pure email mass mailing.

New fields (0)

No new fields.

Public methods (3)
  • create(self, cr, uid, values, context=None)
    Override mail_mail creation to create an entry in mail.mail.statistics
  • send_get_email_dict(self, cr, uid, mail, partner=None, context=None)
  • send_get_mail_body(self, cr, uid, mail, partner=None, context=None)
    Override to add the tracking URL to the body.

New fields (0)

No new fields.

Public methods (4)
  • create(self, cr, uid, values, context=None)
  • set_bounced(self, cr, uid, ids=None, mail_mail_ids=None, mail_message_ids=None, context=None)
  • set_opened(self, cr, uid, ids=None, mail_mail_ids=None, mail_message_ids=None, context=None)
  • set_replied(self, cr, uid, ids=None, mail_mail_ids=None, mail_message_ids=None, context=None)

New fields (0)

No new fields.

Public methods (9)
  • action_duplicate(self, cr, uid, ids, context=None)
  • action_edit_html(self, cr, uid, ids, context=None)
  • action_test_mailing(self, cr, uid, ids, context=None)
  • copy_data(self, cr, uid, id, default=None, context=None)
  • default_get(self, cr, uid, fields, context=None)
  • get_recipients(self, cr, uid, mailing, context=None)
  • on_change_model_and_list(self, cr, uid, ids, mailing_model, list_ids, context=None)
  • read_group(self, cr, uid, domain, fields, groupby, offset=0, limit=None, context=None, orderby=False, lazy=True)
    Override read_group to always display all states.
  • send_mail(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • get_recipients(self, cr, uid, ids, model=None, context=None)
    Return the recipients of a mailing campaign. This is based on the statistics build for each mailing.

New fields (0)

No new fields.

Public methods (0)

No public methods.

New fields (0)

No new fields.

Public methods (4)
  • add_to_list(self, cr, uid, name, list_id, context=None)
  • get_name_email(self, name, context)
  • message_get_default_recipients(self, cr, uid, ids, context=None)
  • name_create(self, cr, uid, name, context=None)

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 (0)

No new fields.

Public methods (1)
  • send_mail_test(self, cr, uid, ids, context=None)

New fields (0)

No new fields.

Public methods (1)
  • init(self, cr)
    Mass Mail Statistical Report: based on mail.mail.statistics that models the various statistics collected for each mailing, and mail.mass_mailing model that models the various mailing performed.

New fields (0)

No new fields.

Public methods (4)
  • message_receive_bounce(self, cr, uid, ids, mail_id=None, context=None)
    Called by ``message_process`` when a bounce email (such as Undelivered Mail Returned to Sender) is received for an existing thread. The default behavior is to check is an integer ``message_bounce`` column exists. If it is the case, its content is incremented.
  • message_route(self, cr, uid, message, message_dict, model=None, thread_id=None, custom_values=None, context=None)
  • message_route_check_bounce(self, cr, uid, message, context=None)
    Override to verify that the email_to is the bounce alias. If it is the case, log the bounce, set the parent and related document as bounced and return False to end the routing process.
  • message_route_process(self, cr, uid, message, message_dict, routes, context=None)
    Override to update the parent mail statistics. The parent is found by using the References header of the incoming message and looking for matching message_id in mail.mail.statistics.

New fields (0)

No new fields.

Public methods (0)

No public methods.