TIP: You can type at any time to perform a new search.
Email Marketing
mass_mailing · odoo/odoo
Security findings
- Repository
- odoo/odoo · module folder
- Module version
- 2.7
- Category
- Marketing/Email Marketing
- Folder size
- 17.44 MB
- License
- LGPL-3
- Application
- Yes
- Auto-installable
- No
- Website
- https://www.odoo.com/app/email-marketing
- Last tracking update
- 2026-10-05 00:19:42
- Authors
- Odoo S.A.
- Maintainers
- Odoo S.A.
- Committers
- Xavier Morel, Raphael Collet, Thibault Delavallée, odoo, Odoo Translation Bot, Christophe Matthieu, David Monjoie, Aaron Bohy, Géry Debongnie, Lucas Perais (lpe), qsm-odoo, Jorge Pinna Puissant, Aurélien Warnon, Xavier-Do, Victor Feyens, Adrien Dieudonné, Sébastien Theys, Julien Mougenot, std-odoo, David Beguin, Prakash Prajapati, Tiffany Chang (tic), Gorash, Pierre Paridans, abd-msyukyu-odoo, Benjamin Vray, Miquel Raïch, Antoine Guenet, Florian Charlier, Nicolas Bayet, luvi, Renaud Thiry, Julien Banken, Julien (jula), amdi-odoo, Robin Lejeune (role), Louis (loco), Dylan Kiss (dyki), FrancoisGe, Chong Wang (cwg), Brieuc-brd, omra-odoo, Walid (wasa), Deependra Solanki, jorv-odoo, dhba, Bastien Fafchamps (bafa), adch-odoo, Rodolpho Lima, Adnan Saiyed, Chrysanthe (chgo), sami odoo, Harsh Shah, Xavier Luyckx (xlu), guce, Sébastien (blse), Ezzuldin Zaky (ezza), Pierre Pulinckx, Michaël Mattiello, Thomas Josse (THJO), Krzysztof Magusiak (krma), mojem, pajo, bhna-odoo, Brett Cutler, defl, bikh-odoo, agbr-odoo, Julien Launois (jula), Laetitia (ldau), Augustin (duau), Subhadeep R. Dev, Serhii Rubanskyi, romo, Alessandro Lupo, Yagnik ✗ (yagp), Saurabh, sbbh-odoo, assk-odoo, Séna Nshimiyimana, alan-odoo, Kadam Darji, h4818 (ayh), Julien Carion, ELCO, chpa-odoo, Oussema Heni, Haroune Hassine (Hahas), Louis Wicket, Julien Piron, Jean Schoenlaub, Mayur Barad
- 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_sale, mass_mailing_slides, mass_mailing_sms, mass_mailing_themes, test_mail_full, test_mass_mailing, website_mass_mailing, website_mass_mailing_event
- Description
Code Analysis
Views touched (91)
| XML ID | Name | Model | Type | Status |
|---|---|---|---|---|
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_list_simplified |
link.tracker.click.view.list.simplified | link.tracker.click | list | New |
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_list_from_filter |
mailing.contact.view.list.from.filter | mailing.contact | list | Inherits mailing_contact_view_tree |
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_form_simplified |
mailing.filter.view.form.inherit.simplified | mailing.filter | form | Inherits mailing_filter_view_form |
mailing_filter_view_kanban |
mailing.filter.view.kanban | mailing.filter | kanban | 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_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_mailing_view_kanban_templates |
mailing.mailing.view.kanban.templates | mailing.mailing | kanban | New |
mailing_mailing_view_list_template |
mailing.mailing.view.list.template | mailing.mailing | list | New |
mailing_mailing_view_search_templates |
mailing.mailing.view.search.templates | mailing.mailing | search | 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_mail_1_body |
mass_mail_1_body | 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_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 |
res_partner_view_form |
res.partner.view.form.inherit.mass.mail | res.partner | form | Inherits base.view_partner_form |
res_partner_view_list |
res.partner.view.list.inherit.mass.mail | res.partner | list | Inherits base.view_partner_tree |
s_mail_block_footer_social |
Social + Footer | ir.ui.view | qweb | New |
s_mail_block_header_logo_and_stacked_menu |
Logo + Stacked Menu | ir.ui.view | qweb | New |
s_mail_company_logo |
s_mail_company_logo | ir.ui.view | qweb | New |
s_social_media |
Social Media | ir.ui.view | qweb | New |
s_social_media_template |
s_social_media_template | 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_test_send_test_form |
mailing.mailing.send.test.form | mailing.mailing.test | form | New |
view_mail_mass_mailing_tree |
mailing.mailing.list | mailing.mailing | list | New |
HTTP endpoints (17)
| Route(s) | Handler | Auth | Type | Methods | Flags |
|---|---|---|---|---|---|
/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 (31)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (1)
-
active_mailing_idsOne2many → mailing.mailingcomodel_name='mailing.mailing'domain=[('state', '!=', 'done'), ('active', '=', True)]inverse_name='mail_server_id'readonly=Truestring='Active mailing using this mail server'
No public methods.
New fields (1)
-
is_mailing_enabledBooleancompute='_compute_is_mailing_enabled'help='Whether this model supports marketing mailing capabilities (notably email and SMS).'search='_search_is_mailing_enabled'string='Mailing Enabled'
No public methods.
New fields (1)
-
technical_usageSelectionselection_add=[('mass_mailing', 'Mass Mailing Technical')]
No public methods.
New fields (1)
-
mass_mailing_idMany2one → mailing.mailingstring='Mass Mailing' args: 'mailing.mailing'
No public methods.
New fields (4)
-
emailCharhelp='The email address of the entity that clicked the link'related='mailing_trace_id.email'string='Email' -
mailing_trace_idMany2one → mailing.traceindex='btree_not_null'string='Mail Statistics' args: 'mailing.trace' -
mass_mailing_idMany2one → mailing.mailingindex='btree_not_null'string='Mass Mailing' args: 'mailing.mailing' -
urlCharrelated='link_id.url'string='URL'
-
add_click(self, code, **route_values)@api.model
New fields (1)
-
opt_out_reason_idMany2one → mailing.subscription.optoutondelete='restrict'string='Opt-out Reason'tracking=10 args: 'mailing.subscription.optout'
No public methods.
New fields (4)
-
campaign_idMany2one → utm.campaignondelete='set null'string='Mass Mailing Campaign' args: 'utm.campaign' -
mailing_list_idsMany2many → mailing.liststring='Mailing List' args: 'mailing.list' -
mass_mailing_createBooleanhelp='If set, a mass mailing will be created so that you can track its results in the Email Marketing app.' args: 'Create Mass Mailing' -
mass_mailing_idMany2one → mailing.mailingondelete='cascade'string='Mass Mailing' args: 'mailing.mailing'
No public methods.
New fields (2)
-
mailing_idMany2one → mailing.mailingstring='Mass Mailing' args: 'mailing.mailing' -
mailing_trace_idsOne2many → mailing.tracestring='Statistics' args: 'mailing.trace', 'mail_mail_id'
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 (19)
-
clicks_ratioFloatcompute='_compute_clicks_ratio' args: 'Clicks Ratio' -
company_nameCharstring='Company Name' -
country_idMany2one → res.countrystring='Country' args: 'res.country' -
emailCharargs: 'Email' -
first_nameCharargs: 'First Name' -
last_clicked_datetimeDatetimeargs: 'Last Clicked On' -
last_nameCharargs: 'Last Name' -
last_opened_datetimeDatetimeargs: 'Last Opened On' -
last_replied_datetimeDatetimeargs: 'Last Replied On' -
list_idsMany2many → mailing.liststring='Mailing Lists' args: 'mailing.list', 'mailing_subscription', 'contact_id', 'list_id' -
mailing_countIntegercompute='_compute_statistics' args: 'Number of Mailing' -
nameCharcompute='_compute_name'readonly=Falsestore=Truetracking=True args: 'Name' -
opened_ratioFloatcompute='_compute_statistics' args: 'Opened Ratio' -
opt_outBooleancompute='_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' -
partner_idMany2one → res.partnerindex='btree_not_null'string='Contact' args: 'res.partner' -
received_ratioFloatcompute='_compute_statistics' args: 'Received Ratio' -
replied_ratioFloatcompute='_compute_statistics' args: 'Replied Ratio' -
subscription_idsOne2many → mailing.subscriptionstring='Subscription Information' args: 'mailing.subscription', 'contact_id' -
tag_idsMany2many → res.partner.categorystring='Tags' args: 'res.partner.category'
-
action_add_to_mailing_list(self) -
action_import(self) -
action_open_base_import(self)Open the base import wizard to import mailing contacts with a xlsx file. -
action_view_clicked(self) -
action_view_mailings(self) -
action_view_opened(self) -
action_view_received(self) -
action_view_replied(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_multiSynchronize 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.modelWhen 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.modelHide 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_listTexthelp='Contact list that will be imported, one contact per line' args: 'Contact List' -
mailing_list_idsMany2many → mailing.liststring='Lists' args: 'mailing.list'
-
action_import(self)Import each lines of "contact_list" as a new contact. -
action_open_base_import(self)
New fields (3)
-
contact_idsMany2many → mailing.contactstring='Mailing Contacts' args: 'mailing.contact' -
mailing_list_idsMany2many → mailing.listrequired=Truestring='Mailing Lists' args: 'mailing.list' -
partner_idsMany2many → res.partnerstring='Contacts' args: 'res.partner'
-
action_add_contacts(self)
New fields (8)
-
activeBooleandefault=True -
colorIntegerdefault=0string='Color' -
create_uidMany2one → res.usersdefault=<expr>index=Truereadonly=True args: 'res.users', 'Saved by' -
mailing_countIntegercompute='_compute_mailing_count' args: 'Number of Mailing' -
mailing_domainChardefault='[]'required=Truestring='Filter Domain' -
mailing_model_idMany2one → ir.modeldomain=[('is_mailing_enabled', '=', True)]ondelete='cascade'required=Truestring='Recipients Model' args: 'ir.model' -
mailing_model_nameCharrelated='mailing_model_id.model'string='Recipients Model Name' -
nameCharrequired=Truestring='List Name'
-
action_send_mailing(self)Open the mailing form view, with the current model & domain set as the mailing model & mailing domain. respectively -
action_view_mailings(self) -
action_view_recipients(self)Redirect to the list view of the model of the selected dynamic list, with the domain of the latter set as the domain of that view. If the model is `mailing.contact`, the `New`, `Paste` and `Upload` buttons will be hidden.
New fields (15)
-
activeBooleandefault=True -
colorIntegerdefault=0string='Color' -
contact_countIntegercompute='_compute_mailing_list_statistics'string='Number of Contacts' -
contact_count_blacklistedIntegercompute='_compute_mailing_list_statistics'string='Number of Blacklisted' -
contact_count_emailIntegercompute='_compute_mailing_list_statistics'string='Number of Emails' -
contact_count_opt_outIntegercompute='_compute_mailing_list_statistics'string='Number of Opted-out' -
contact_idsMany2many → mailing.contactcopy=Falsestring='Mailing Lists' args: 'mailing.contact', 'mailing_subscription', 'list_id', 'contact_id' -
contact_pct_blacklistedFloatcompute='_compute_mailing_list_statistics'string='Percentage of Blacklisted' -
contact_pct_bounceFloatcompute='_compute_mailing_list_statistics'string='Percentage of Bouncing' -
contact_pct_opt_outFloatcompute='_compute_mailing_list_statistics'string='Percentage of Opted-out' -
is_publicBooleandefault=Falsehelp='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_countIntegercompute='_compute_mailing_count'string='Number of Mailing' -
mailing_idsMany2many → mailing.mailingcopy=Falsestring='Mass Mailings' args: 'mailing.mailing', 'mail_mass_mailing_list_rel' -
nameCharrequired=Truestring='Mailing List' -
subscription_idsOne2many → mailing.subscriptioncopy=Truedepends=['contact_ids']string='Subscription Information' args: 'mailing.subscription', 'list_id'
-
action_mailing_lists_merge(self) -
action_merge(self, src_lists)Merge lists into self, removing exact duplicates from source lists. Duplicates are completely removed and mailings using the source lists will be updated to use self instead. The opt-out status of the destination list is preffered. Otherwise if it is opted out of any list, it is opted out of the final one. -
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) -
write(self, vals)
New fields (70)
-
ab_testing_completedBooleanrelated='campaign_id.ab_testing_completed' -
ab_testing_descriptionHtmlcompute='_compute_ab_testing_description' args: 'A/B Testing Description' -
ab_testing_enabledBooleandefault=Falsehelp='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_mailingBooleancompute='_compute_ab_testing_is_winner_mailing' args: 'Is the Winner of its Campaign' -
ab_testing_mailings_countIntegerrelated='campaign_id.ab_testing_mailings_count' -
ab_testing_pcIntegerdefault=10help='Percentage of the contacts that will be mailed. Recipients will be chosen randomly.'string='A/B Testing percentage' -
ab_testing_schedule_datetimeDatetimedefault=<expr>readonly=Falserelated='campaign_id.ab_testing_schedule_datetime' -
ab_testing_version_nameCharcopy=False args: 'A/B Testing Version' -
ab_testing_winner_selectionSelectioncopy=Truedefault='opened_ratio'readonly=Falserelated='campaign_id.ab_testing_winner_selection' -
activeBooleandefault=Truetracking=True -
attachment_idsMany2many → ir.attachmentbypass_search_access=Truestring='Attachments' args: 'ir.attachment', 'mass_mailing_ir_attachments_rel', 'mass_mailing_id', 'attachment_id' -
body_archHtmlsanitize='email_outgoing'sanitize_output_method='html'string='Body'translate=False -
body_htmlHtmlrender_engine='qweb'render_options={'post_process': True}sanitize='email_outgoing'string='Body converted to be sent by mail' -
bouncedIntegercompute='_compute_statistics' -
bounced_ratioFloatcompute='_compute_statistics'string='Bounced Ratio' -
calendar_dateDatetimecompute='_compute_calendar_date'copy=Falsehelp='Date at which the mailing was or will be sent.'store=True args: 'Calendar Date' -
campaign_idMany2one → utm.campaignindex=Trueondelete='set null'string='UTM Campaign' args: 'utm.campaign' -
canceledIntegercompute='_compute_statistics' -
canceled_ratioFloatcompute='_compute_statistics'string='Cancelled Ratio' -
clickedIntegercompute='_compute_statistics' -
clicks_ratioFloatcompute='_compute_clicks_ratio'string='Number of Clicks' -
colorIntegerstring='Color Index' -
contact_list_idsMany2many → mailing.listcontext={'active_test': False}string='Mailing Lists' args: 'mailing.list', 'mail_mass_mailing_list_rel' -
deliveredIntegercompute='_compute_statistics' -
email_fromCharcompute='_compute_email_from'precompute=Truereadonly=Falsestore=Truestring='Send From' -
expectedIntegercompute='_compute_statistics' -
failedIntegercompute='_compute_statistics' -
is_ab_test_sentBooleancompute='_compute_is_ab_test_sent' -
is_body_emptyBooleancompute='_compute_is_body_empty' -
is_templateBooleantracking=True args: 'Is Template' -
keep_archivesBooleanstring='Keep Archives' -
kpi_mail_requiredBooleancopy=False args: 'KPI mail required' -
link_trackers_countIntegercompute='_compute_link_trackers_count'string='Link Trackers Count' -
mail_server_availableBooleancompute='_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_idMany2one → ir.mail_serverdefault=_get_default_mail_server_idhelp='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_domainCharcompute='_compute_mailing_domain'compute_sudo=Falsereadonly=Falsestore=Truestring='Domain' -
mailing_filter_idsMany2many → mailing.filtercompute='_compute_mailing_filter_ids'domain="[('mailing_model_name', '=', mailing_model_name)]"readonly=Falsestore=Truestring='Dynamic Lists' args: 'mailing.filter', 'mail_mass_mailing_filter_rel', 'mailing_mailing_id', 'mailing_filter_id' -
mailing_model_idMany2one → ir.modelcompute='_compute_mailing_model_id'domain=[('is_mailing_enabled', '=', True)]ondelete='cascade'precompute=Truereadonly=Falserequired=Truestore=Truestring='Recipients Model' args: 'ir.model' -
mailing_model_nameCharreadonly=Truerelated='mailing_model_id.model'related_sudo=Truestring='Recipients Model Name' -
mailing_model_realCharcompute='_compute_mailing_model_real'string='Recipients Real Model' -
mailing_on_mailing_listBooleancompute='_compute_mailing_on_mailing_list'string='Based on Mailing Lists' -
mailing_trace_idsOne2many → mailing.tracestring='Emails Statistics' args: 'mailing.trace', 'mass_mailing_id' -
mailing_typeSelectiondefault='mail'required=Truestring='Mailing Type' args: [('mail', 'Email')] -
mailing_type_descriptionCharcompute='_compute_mailing_type_description' args: 'Mailing Type Description' -
medium_idMany2one → utm.mediumcompute='_compute_medium_id'help='UTM Medium: delivery method (email, sms, ...)'ondelete='restrict'readonly=Falsestore=Truestring='Medium' args: 'utm.medium' -
next_departureDatetimecompute='_compute_next_departure'string='Scheduled date' -
next_departure_is_pastBooleancompute='_compute_next_departure' -
openedIntegercompute='_compute_statistics' -
opened_ratioFloatcompute='_compute_statistics'string='Opened Ratio' -
pendingIntegercompute='_compute_statistics' -
previewCharrender_engine='inline_template'render_options={'post_process': True}translate=False args: 'Preview' -
processIntegercompute='_compute_statistics' -
received_ratioFloatcompute='_compute_statistics'string='Received Ratio' -
recipients_countIntegercompute='_compute_recipients_count' args: '# Of Recipients' -
repliedIntegercompute='_compute_statistics' -
replied_ratioFloatcompute='_compute_statistics'string='Replied Ratio' -
reply_toCharcompute='_compute_reply_to'help='Preferred Reply-To Address'readonly=Falsestore=Truestring='Reply To' -
reply_to_modeSelectioncompute='_compute_reply_to_mode'help='Thread: replies go to target document. Email: replies are routed to a given email.'readonly=Falsestore=Truestring='Reply-To Mode' args: [('update', 'Recipient Followers'), ('new', 'Specified Email Address')] -
schedule_dateDatetimecompute='_compute_schedule_date'copy=Truereadonly=Falsestore=Truestring='Scheduled for'tracking=True -
schedule_typeSelectiondefault='now'readonly=Falserequired=Truestring='Schedule' args: [('now', 'Send now'), ('scheduled', 'Send on')] -
scheduledIntegercompute='_compute_statistics' -
sentIntegercompute='_compute_statistics' -
sent_dateDatetimecopy=Falsestring='Sent Date' -
source_idMany2one → utm.sourcecompute='_compute_source_id'help='UTM Source: source tracking (mass_mailing, newsletter, mass_sms, ...)'ondelete='restrict'readonly=Falsestore=Truestring='Source' args: 'utm.source' -
stateSelectioncopy=Falsedefault='draft'group_expand=Truerequired=Truestring='Status'tracking=True args: [('draft', 'Draft'), ('in_queue', 'In Queue'), ('sending', 'Sending'), ('done', 'Sent')] -
subjectCharrequired=Truetranslate=False args: 'Subject' -
totalIntegercompute='_compute_total' -
use_exclusion_listBooleancompute='_compute_use_exclusion_list'copy=Falsedefault=Truehelp='Prevent sending messages to blacklisted contacts. Disable only when absolutely necessary.'readonly=Falsestore=True args: 'Use Exclusion List' -
user_idMany2one → res.usersdefault=<expr>string='Responsible'tracking=True args: 'res.users' -
warning_messageCharcompute='_compute_warning_message'help='Warning message displayed in the mailing form view' args: 'Warning Message'
-
action_cancel(self) -
action_compare_versions(self) -
action_duplicate(self) -
action_fetch_templates(self, extra_domain=None)@api.modelReturn all active mailings set as template and skip mailings with empty body. -
action_import_mailing_contacts(self)Display the mailing contact import-by-paste wizard for this mailing's contact lists -
action_launch(self) -
action_new_mailing_from_template(self) -
action_preview(self) -
action_put_in_queue(self) -
action_reload(self) -
action_retry_failed(self, extra_domain=None)Remove all failed emails and their traces, and try sending them again. -
action_save_as_template(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_link_trackers(self) -
action_view_opened(self) -
action_view_replied(self) -
action_view_traces(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_idMany2one → mailing.mailingrequired=True args: 'mailing.mailing' -
schedule_dateDatetimestring='Scheduled for'
-
action_schedule_date(self)
New fields (8)
-
body_htmlHtmlcompute='_compute_mailing_preview'sanitize='email_outgoing'string='Preview Body' -
email_fromCharcompute='_compute_mailing_preview'string='From' -
email_toTextdefault=_default_email_torequired=Truestring='Recipients' -
mass_mailing_idMany2one → mailing.mailingondelete='cascade'required=Truestring='Mailing' args: 'mailing.mailing' -
preview_record_refReferencecompute='_compute_preview_record_ref'readonly=Falseselection='_get_model_selection'store=Truestring='Preview for' -
preview_textCharcompute='_compute_mailing_preview'string='Preview Text' -
reply_toCharcompute='_compute_mailing_preview'string='Reply To' -
subjectCharcompute='_compute_mailing_preview'string='Subject'
-
send_mail_test(self)
New fields (7)
-
contact_idMany2one → mailing.contactondelete='cascade'required=Truestring='Contact' args: 'mailing.contact' -
is_blacklistedBooleanreadonly=Falserelated='contact_id.is_blacklisted'store=False -
list_idMany2one → mailing.listindex=Trueondelete='cascade'required=Truestring='Mailing List' args: 'mailing.list' -
message_bounceIntegerreadonly=Falserelated='contact_id.message_bounce'store=False -
opt_outBooleandefault=Falsehelp='The contact has chosen not to receive mails anymore from this list'string='Opt Out' -
opt_out_datetimeDatetimecompute='_compute_opt_out_datetime'readonly=Falsestore=Truestring='Unsubscription Date' -
opt_out_reason_idMany2one → mailing.subscription.optoutondelete='restrict'string='Reason' args: 'mailing.subscription.optout'
-
create(self, vals_list)@api.model_create_multi -
open_mailing_contact(self) -
write(self, vals)
New fields (3)
-
is_feedbackBooleanstring='Ask For Feedback' -
nameCharstring='Reason'translate=True -
sequenceIntegerdefault=10string='Sequence'
No public methods.
New fields (20)
-
campaign_idMany2oneindex='btree_not_null'readonly=Truerelated='mass_mailing_id.campaign_id'store=Truestring='Campaign' -
emailCharhelp='Normalized email address'string='Email' -
failure_reasonTextcopy=Falsereadonly=True args: 'Failure reason' -
failure_typeSelectionselection=[('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_traceBooleanargs: 'Generated for testing' -
links_click_datetimeDatetimehelp='Stores last click datetime in case of multi clicks.' args: 'Clicked On' -
links_click_idsOne2many → link.tracker.clickstring='Links click' args: 'link.tracker.click', 'mailing_trace_id' -
mail_mail_idMany2one → mail.mailindex='btree_not_null'string='Mail' args: 'mail.mail' -
mail_mail_id_intIntegerhelp='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_idMany2one → mailing.mailingindex=Trueondelete='cascade'string='Mailing' args: 'mailing.mailing' -
medium_idMany2onerelated='mass_mailing_id.medium_id' -
message_idCharstring='Message-ID' -
modelCharindex=Truerequired=Truestring='Document model' -
open_datetimeDatetimeargs: 'Opened On' -
reply_datetimeDatetimeargs: 'Replied On' -
res_idMany2oneReferenceindex=Truemodel_field='model'string='Document ID' -
sent_datetimeDatetimeargs: 'Sent On' -
source_idMany2onerelated='mass_mailing_id.source_id' -
trace_statusSelectiondefault='outgoing'selection=[('outgoing', 'Outgoing'), ('process', 'Processing'), ('pending', 'Sent'), ('sent', 'Delivered'), ('open', 'Opened'), ('reply', 'Replied'), ('bounce', 'Bounced'), ('error', 'Exception'), ('cancel', 'Cancelled')]string='Status' -
trace_typeSelectiondefault='mail'required=Truestring='Type' args: [('mail', 'Email')]
-
action_retry_failed(self) -
action_view_contact(self) -
create(self, vals_list)@api.model_create_multi -
set_bounced(self, domain=None, failure_reason=False, failure_type=False) -
set_canceled(self, domain=None, failure_reason=False, failure_type=False)Note: cancel trace_status is mainly done when detecting invalid recipients at sending time. Trace is created in 'cancel' state, which explains this method is seldom used. -
set_clicked(self, domain=None) -
set_failed(self, domain=None, failure_reason=False, 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)
-
bouncedIntegerreadonly=True -
campaignCharreadonly=Truestring='Mailing Campaign' -
canceledIntegerreadonly=True -
clickedIntegerreadonly=True -
deliveredIntegerreadonly=True -
email_fromCharreadonly=True args: 'From' -
errorIntegerreadonly=True -
mailing_typeSelectiondefault='mail'required=Truestring='Type' args: [('mail', 'Mail')] -
nameCharreadonly=Truestring='Mass Mail' -
openedIntegerreadonly=True -
pendingIntegerreadonly=True -
processingIntegerreadonly=True -
repliedIntegerreadonly=True -
scheduledIntegerreadonly=True -
scheduled_dateDatetimereadonly=Truestring='Scheduled Date' -
sentIntegerreadonly=True -
stateSelectionreadonly=Truestring='Status' args: [('draft', 'Draft'), ('test', 'Tested'), ('done', 'Sent')]
-
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 (2)-
get_mailing_snippet_info(self) -
update_social_links(self, social_links)Update social media link fields without unnecessarily reloading a view (see reload_company_service.js). :param dict social_links: Social link field names to URL path. :raises UserError: If a provided key is not a valid social media field.
New fields (6)
-
group_mass_mailing_campaignBooleanhelp='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_idMany2one → ir.mail_serverconfig_parameter='mass_mailing.mail_server_id'string='Mail Server' args: 'ir.mail_server' -
mass_mailing_outgoing_mail_serverBooleanconfig_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_reportsBooleanconfig_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_nameBooleanhelp='Separate Mailing Contact Names into two fields'string='Split First and Last Name' -
show_blacklist_buttonsBooleanconfig_parameter='mass_mailing.show_blacklist_buttons'default=Truehelp='Allow the recipient to manage themselves their state in the blacklist via the unsubscription page.'string='Blacklist Option when Unsubscribing'
-
get_values(self)@api.model -
set_values(self)
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (2)
-
mailing_contact_idMany2one → mailing.contactcompute='_compute_mailing_contact_id'groups='mass_mailing.group_mass_mailing_user'string='Contact' args: 'mailing.contact' -
mailing_contact_idsOne2many → mailing.contactgroups='mass_mailing.group_mass_mailing_user'string='Contacts' args: 'mailing.contact', 'partner_id'
-
action_open_mailing_contacts(self)Open form view if a single Mailing Contact is linked, multi-record view otherwise.
New fields (0)
No new fields.
Public methods (0)No public methods.
New fields (12)
-
ab_testing_completedBooleancompute='_compute_ab_testing_completed'copy=Falsereadonly=Truestore=True args: 'A/B Testing Campaign Finished' -
ab_testing_mailings_countIntegercompute='_compute_mailing_mail_count' args: 'A/B Test Mailings #' -
ab_testing_schedule_datetimeDatetimedefault=<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_idMany2one → mailing.mailingcopy=False args: 'mailing.mailing', 'A/B Campaign Winner Mailing' -
ab_testing_winner_selectionSelectiondefault='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_ratioFloatcompute='_compute_statistics'string='Bounced Ratio' -
is_mailing_campaign_activatedBooleancompute='_compute_is_mailing_campaign_activated' -
mailing_mail_countIntegercompute='_compute_mailing_mail_count'groups='mass_mailing.group_mass_mailing_user' args: 'Number of Mass Mailing' -
mailing_mail_idsOne2many → mailing.mailingdomain=[('mailing_type', '=', 'mail')]groups='mass_mailing.group_mass_mailing_user'string='Mass Mailings' args: 'mailing.mailing', 'campaign_id' -
opened_ratioFloatcompute='_compute_statistics'string='Opened Ratio' -
received_ratioFloatcompute='_compute_statistics'string='Received Ratio' -
replied_ratioFloatcompute='_compute_statistics'string='Replied Ratio'
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…
Loading…