Repository
odoo/odoo · module folder
Module version
2.7
Category
Marketing/Email Marketing
Folder size
17.23 MB
License
LGPL-3
Application
Yes
Auto-installable
No
Website
https://www.odoo.com/app/email-marketing
Last tracking update
2026-08-15 22:44:14
Authors
Odoo S.A.
Maintainers
Odoo S.A.
Committers
Xavier Morel, Raphael Collet, Thibault Delavallée, Odoo Translation Bot, David Monjoie, 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, Louis Wicket (wil), alsh-odoo, 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, jorv-odoo, aath-odoo, Rodolpho Lima, mano-odoo, guce, Rémi - Le Filament, yagp-odoo, Pierre Pulinckx (PIPU), Ezzuldin Zaky (ezza), Pierre Pulinckx, Anton Romanova (roan), Bastien PIERRE, Michaël Mattiello, Panagiotis Kyriakou, Thomas Josse (THJO), Krzysztof Magusiak (krma), Ajit Singh, mojem, pajo, bhna-odoo, Brett Cutler, defl, bikh-odoo, agbr-odoo, Alice Gaudon, Augustin (duau), Alessandro Lupo, saurabh, sbbh-odoo, Séna Nshimiyimana, Kadam Darji, h4818 (ayh), ELCO, chpa-odoo, shmn-odoo
Odoo dependencies
Python dependencies
None
System dependencies
None
Required by
mail_tracking_mass_mailing, marketing_card, mass_mailing_crm, mass_mailing_event, mass_mailing_event_sms, mass_mailing_event_track, mass_mailing_event_track_sms, mass_mailing_partner, mass_mailing_resend, mass_mailing_sale, mass_mailing_slides, mass_mailing_sms, mass_mailing_themes, test_mail_full, test_mass_mailing, website_mass_mailing
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 form 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 form Inherits link_tracker.link_tracker_click_view_form
link_tracker_click_view_graph link.tracker.click.view.graph.inherit.mass_mailing link.tracker.click graph Inherits link_tracker.link_tracker_click_view_graph
link_tracker_click_view_search link.tracker.click.view.search.inherit.mass_mailing link.tracker.click search Inherits link_tracker.link_tracker_click_view_search
link_tracker_click_view_tree link.tracker.click.view.list.inherit.mass_mailing link.tracker.click list Inherits link_tracker.link_tracker_click_view_tree
link_tracker_view_form link.tracker.view.form.inherit.mass.mail link.tracker form Inherits link_tracker.link_tracker_view_form
link_tracker_view_search link.tracker.view.search.inherit.mass.mail link.tracker search Inherits link_tracker.link_tracker_view_search
link_tracker_view_tree link.tracker.view.list.inherit.mass.mail link.tracker list Inherits link_tracker.link_tracker_view_tree
mail_blacklist_view_form mail.blacklist.view.form.inherit.mailing mail.blacklist form Inherits mail.mail_blacklist_view_form
mail_blacklist_view_search mail.blacklist.view.search mail.blacklist search Inherits mail.mail_blacklist_view_search
mail_blacklist_view_tree mail.blacklist.view.list.inherit.mailing mail.blacklist list 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 form 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 list 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 form 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 form Inherits utm.utm_campaign_view_form
utm_campaign_view_kanban utm.campaign.view.kanban utm.campaign kanban 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
HTTP endpoints (17)
Route(s)HandlerAuthTypeMethodsFlags
/mail/mailing/<int:mailing_id>/unsubscribe MailingLegacy.mailing_unsubscribe public http ALL website
/r/<string:code>/m/<int:mailing_trace_id> MassMailController.full_url_redirect public http ALL sudo
/mailing/blocklist/add MassMailController.mail_blocklist_add public jsonrpc ALL sudo
/mailing/blocklist/remove MassMailController.mail_blocklist_remove public jsonrpc ALL sudo
/mailing/<int:mailing_id>/confirm_unsubscribe MassMailController.mailing_confirm_unsubscribe public http ALL sudo website
/mailing/confirm_unsubscribe MassMailController.mailing_confirm_unsubscribe_post public http POST website
/mailing/my MassMailController.mailing_my user http ALL website
/mailing/report/unsubscribe MassMailController.mailing_report_deactivate public http ALL sudo website
/mailing/feedback MassMailController.mailing_send_feedback public jsonrpc ALL sudo
/mailing/<int:mailing_id>/unsubscribe MassMailController.mailing_unsubscribe public http ALL website
/mailing/<int:mailing_id>/unsubscribe_oneclick MassMailController.mailing_unsubscribe_oneclick public http POST csrf off website
/unsubscribe_from_list MassMailController.mailing_unsubscribe_placeholder_link public http ALL website
/mailing/list/update MassMailController.mailing_update_list_subscription public jsonrpc ALL sudo
/mailing/<int:mailing_id>/view MassMailController.mailing_view_in_browser public http ALL sudo website
/view MassMailController.mailing_view_in_browser_placeholder_link user http ALL website
/mailing/mobile/preview MassMailController.mass_mailing_preview_mobile_content user http GET website
/mail/track/<int:mail_id>/<string:token>/blank.gif MassMailController.track_mail_open public http ALL sudo
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.

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…

Loading…