Skip to main content
iVentureTeam

Odoo 20 Email Marketing Release Notes

All 14 Email Marketing changes from the official Odoo 20 release notes, explained in plain words with a screenshot from a live Odoo 20 database, plus where to find each one and what it means for your upgrade.

Planning the move? See our Odoo upgrade services, the Odoo 20 upgrade guide or get a number from the migration cost calculator.

New feature 5Enhancement 8Refactoring 1In Community 14
Type

Change 1 of 14

Click tracking

EnhancementCommunity

See which recipients clicked on which links in a mailing.

Official Odoo 20 release note

In plain words

The Clicked statistic of a sent mailing now opens the list of link clicks grouped by recipient email. Unfold a recipient to see each link they clicked and when. A pie graph view is also available.

Email Marketing > Mailings > Thanks for joining us! > ClickedLink clicks grouped by recipient email (Clicked By). The first recipient is unfolded and shows each link clicked with its time.

Where to find it

  1. Email Marketing > Mailings, open a sent mailing.
  2. Click the Clicked statistic button.
  3. Unfold a recipient group.

For users

From a sent mailing, click the Clicked statistic to see who clicked which link, instead of only the list of recipients who clicked.

For developers

mailing.mailing.action_view_clicked now calls link.tracker.click._action_view_mailing_statistics (new view link_tracker_click_view_list_simplified, filter groupby_email). link.tracker.click gets related fields email and url.

Upgrading from Odoo 19

Custom code that overrode action_view_clicked or _action_view_documents_filtered('clicked') should be checked.

Change 2 of 14

Conditional content

New featureCommunity

Blocks in a mailing can be shown based on conditions for individual recipients.

Official Odoo 20 release note

In plain words

Every block of a mailing has a Visibility option in the editor. Set it to Conditionally and add conditions on the recipient (for example Country code = BE): the block is only included for recipients who match. The block shows a crossed-eye icon while editing.

Email Marketing > Mailings > CB demo conditional block > Edit Design > StyleThe Visibility option set to Conditionally, with the condition Country code = BE for the selected Text block.

Where to find it

  1. Open a mailing whose recipients are Contacts and click Edit Design.
  2. Click a block, then in Style set Visibility to Conditionally.
  3. Click Edit Conditions and define the rule.

For users

One mailing can carry content for several audiences: blocks that do not match a recipient are left out of that recipient's email.

For developers

The option stores a JSON domain in data-filter-domain on the block. When the body is converted to email HTML, preprocessFilterDomains turns it into t-if="object.filtered_domain(domain)", evaluated by QWeb for each recipient at send time. Changing the recipient model clears the conditions.

Upgrading from Odoo 19

No migration. Custom body post-processing should keep the generated t-if attributes.

  • The current Odoo 19 branch source also contains this option (the commit landed in November 2025), so it may already be present in recent Odoo 19 updates.

Change 3 of 14

Contact management

EnhancementCommunity

Add contacts to marketing mailing lists more easily, and allow them to manage their own subscriptions.

Official Odoo 20 release note

In plain words

Contacts can now be added to one or several mailing lists straight from the Contacts app with Actions > Add to Mailing List; existing mailing contacts are reused instead of duplicated. Recipients also get a "Subscribed Newsletters" card in their portal to manage their subscriptions.

Contacts > select contacts > Actions > Add to Mailing ListThe new Add to Mailing List dialog opened from three selected contacts. Several lists can be picked at once.

Where to find it

  1. Contacts, list view: select some contacts.
  2. Actions > Add to Mailing List.
  3. Choose the lists and click Add to Lists.

For users

Select contacts, then Actions > Add to Mailing List and pick one or more lists. A partner form shows a Mailing Contacts smart button. Portal users find a Subscribed Newsletters card that opens /mailing/my.

For developers

The mailing.contact.to.list wizard now has partner_ids and a many2many mailing_list_ids (was a single list); res.partner gets mailing_contact_ids and action_open_mailing_contacts. New action mass_mailing.res_partner_to_list_action bound to res.partner.

Upgrading from Odoo 19

Code calling the wizard with the old single mailing_list_id field must be adapted to mailing_list_ids.

  • The portal "Subscribed Newsletters" card is a configuration card (portal.entry with is_config_card); the screenshot shows the contact side of the change.

Change 4 of 14

Dynamic mailing lists

EnhancementCommunity

Create dynamic mailing lists whose recipients are calculated when the mailing is processed.

Official Odoo 20 release note

In plain words

The old single "favorite filter" became Dynamic Lists: saved filters on any recipient model (Recipients > Dynamic Lists). A mailing can use several of them; their conditions are combined and the matching recipients are only computed when the mailing is sent.

Email Marketing > Mailings > CB demo dynamic listThe Dynamic Lists field on a mailing to Contacts, using a demo list of Belgian contacts.

Where to find it

  1. Email Marketing > Mailings > New.
  2. Recipients: choose Contact.
  3. In Dynamic Lists, select one or more saved lists.

For users

Pick a recipient model such as Contact, then choose one or more Dynamic Lists next to it. The recipient count follows the lists. They are managed under Recipients > Dynamic Lists.

For developers

mailing.mailing.mailing_filter_id (many2one) is replaced by mailing_filter_ids (many2many, table mail_mass_mailing_filter_rel). mailing_domain is computed as the OR of the selected filters' domains. mailing.filter is described as 'Mailing Dynamic List'.

Upgrading from Odoo 19

Custom code or views using mailing_filter_id must switch to mailing_filter_ids.

Change 5 of 14

Employee/supplier mailings

EnhancementCommunity

Send mailings to employees and suppliers.

Official Odoo 20 release note

In plain words

Employees and purchase orders are now mailing-enabled models, so Employee and Purchase Order appear as recipient types in a mailing. This lets you mail your staff or your suppliers (through their purchase orders).

Email Marketing > Mailings > New > RecipientsThe Recipients dropdown now includes Employee and Purchase Order.

Where to find it

  1. Email Marketing > Mailings > New.
  2. Open the Recipients dropdown.

For users

In a mailing, the Recipients dropdown now lists Employee and Purchase Order next to Contact, Lead and the others.

For developers

hr.employee and purchase.order now set _mailing_enabled = True, which makes them selectable in mailing_model_id (domain is_mailing_enabled).

Upgrading from Odoo 19

No data migration. Custom models can opt in the same way with _mailing_enabled = True.

Change 6 of 14

Favorite blocks

New featureCommunity

Save mailing blocks to reuse them later.

Official Odoo 20 release note

In plain words

In the mailing editor, a selected block now has a save button (Save this block to use it elsewhere). The saved copy appears in a new Custom category at the top of the Blocks tab and can be dropped into any other mailing, where it can also be renamed or deleted.

Email Marketing > Mailings > (editor) BlocksThe Custom category appears in the Blocks tab once a block has been saved (here a saved Text block).

Where to find it

  1. Open a mailing and click Edit Design.
  2. Click a block and use the save icon in its options header.
  3. Blocks tab: the new Custom category holds the saved block.

For users

Reuse a signature, a promo banner or a footer in every mailing without rebuilding it.

For developers

Odoo 19 removed SaveSnippetPlugin from the mailing builder; Odoo 20 keeps it and adds mass_mailing.SaveSnippetPlugin (custom notification). Saved blocks are ir.ui.view records created by ir.ui.view.save_snippet under the mass_mailing.email_designer_snippets template (snippet_custom group).

Upgrading from Odoo 19

No migration. Saved blocks are shared views, so they are visible to all mailing users.

Change 7 of 14

Full-screen editing

EnhancementCommunity

Editing mailing designs is now always done in full screen.

Official Odoo 20 release note

In plain words

The mail body in the mailing form is now a read-only preview. Hovering it shows an Edit Design button (Start Designing for an empty mailing); clicking opens the design editor in full screen, with the blocks and options panel on the right. Save or Discard returns to the form.

Email Marketing > Mailings > CB demo explore > Mail BodyHovering the mail body shows the Edit Design button, which opens the editor in full screen.

Where to find it

  1. Email Marketing > Mailings, open a mailing that already has a design.
  2. Hover the mail body and click Edit Design.

For users

No more editing inside the small form area: every design change happens in the full screen editor.

For developers

MassMailingIframe renders an o_mass_mailing_can_edit_overlay (label fullscreenButtonLabel) that calls toggleFullScreen(true); the builder is only shown in full screen. Tours that edited the body inline must click the overlay first.

Upgrading from Odoo 19

Custom tours or tests of the mailing editor need the extra click to enter full screen.

Change 9 of 14

Mailing template library

New featureCommunity

Save mailings as templates and access them via a dedicated menu.

Official Odoo 20 release note

In plain words

Any mailing can be saved as a reusable template from its gear menu (Save as Template). Saved templates are listed in the new Templates menu (Template Library) and also appear in the template picker of new mailings, next to the standard designs.

Email Marketing > TemplatesThe Template Library opened from the new Templates menu, with a mailing saved as template.

Where to find it

  1. Open a mailing with a design.
  2. Gear (three dots) menu > Save as Template.
  3. Email Marketing > Templates.

For users

Build a design once, save it, and start later mailings from it. Templates have their own kanban (Templates menu) with a My Templates filter.

For developers

mailing.mailing gets is_template (replacing the Odoo 19 favorite flag and action_set_favorite), action_save_as_template, action_fetch_templates and action_new_mailing_from_template. New action mailing_mailing_action_templates and menu mass_mailing_template_menu. A cog menu item is registered in the cogMenu registry.

Upgrading from Odoo 19

The Odoo 19 favorite field and action_set_favorite no longer exist on mailing.mailing; custom code using them must switch to is_template. Not verified from the supplied source code how favorites are converted during upgrade.

Change 10 of 14

New fonts

EnhancementCommunity

New fonts have been added, with a fallback system for cases where the selected font is not supported by a mail client or browser.

Official Odoo 20 release note

In plain words

The font picker of the mailing editor is split in two groups. Email-safe fonts (Arial, Georgia, Verdana and others) work in most email clients. The new Limited-support fonts (web fonts such as Aleo, Lato, Montserrat, Open Sans, Poppins) each come with a fallback font that is used when a mail client or browser cannot show them.

Email Marketing > Mailings > (editor) Design > Paragraph > fontThe font list with the Email-safe fonts group and the new Limited-support fonts group, whose fonts use a fallback font in some email clients.

Where to find it

  1. Open a mailing and click Edit Design.
  2. Design tab, open a Font Family dropdown (for example under Paragraph).

For users

More design freedom, with a clear hint of which fonts are safe for email.

For developers

FONT_FAMILIES is now grouped (mail and google). GOOGLE_FONTS in mass_mailing_iframe_utils.js maps each web font to a CSS stack ending with a safe font (for example "Lato,Arial,sans-serif"), and the fonts are loaded in the editor iframe.

Upgrading from Odoo 19

Code importing FONT_FAMILIES as a flat name to stack map must be adapted to the grouped structure.

Change 11 of 14

New templates and blocks

EnhancementCommunity

New templates and blocks have been added.

Official Odoo 20 release note

In plain words

The template picker of a new mailing offers new designs such as Catalog, Terms Update and Event Updates, and the editor has new blocks (for example Bento blocks, Image Grid, Products Grid, Schedule Table and new header and footer layouts).

Email Marketing > Mailings > New > Mail BodyThe new Catalog template in the template picker. Terms Update is also new and visible on the next row.

Where to find it

  1. Email Marketing > Mailings > New.
  2. Look at the template picker in the Mail Body tab.

For users

More ready-made starting points and blocks for common emails (catalog, policy update, event news).

For developers

New theme entries catalog, terms_update and event_updates in mass_mailing_themes; new snippet templates in mass_mailing views. Snippet views were also turned into templates (commit aff69b309930).

Upgrading from Odoo 19

Custom themes or snippets that xpath into the standard snippet views should be checked, as the snippet files were reorganised.

Change 12 of 14

Product and event snippets

New featureCommunity

Drag and drop product and event snippets and select the relevant records to automatically fill them.

Official Odoo 20 release note

In plain words

The Website category of the mailing blocks has new product and event blocks marked "Auto-filled from Product/Event". Drop one, click it and pick a record in the side panel: name, description, price or date and image are filled in automatically.

Email Marketing > Mailings > (editor) Blocks > Website > Product AsideA Product Aside block after choosing Large Desk in the Product field: name, description, price and picture are filled in.

Where to find it

  1. Open a mailing and click its body to edit it.
  2. Blocks > Website, pick a block marked Auto-filled from Product.
  3. Click the block and choose a product in the Product field of the side panel.

For users

Promote a product or an event without copying its details by hand: drop the block, choose the record, and the block is rebuilt with its data.

For developers

Blocks with class s_record_snapshot and data-model/data-fragment-key get the record_snapshot_option. Each model registers its fields and fragments in the registry category mass_mailing.record-snapshot-snippet-info. New module website_mass_mailing_event provides the event blocks.

Upgrading from Odoo 19

Nothing to migrate. Other models can register their own snapshot info to get autofill blocks.

Change 13 of 14

Social media accounts

EnhancementCommunity

Connect your social media accounts and customize their appearance in mailings.

Official Odoo 20 release note

In plain words

The Social Media block of a mailing reads the social links saved on the company. Its options list each account with a switch to show or hide it, let you add custom links, reorder them and pick the company, and a Configure Company button edits the accounts. Layout (square, circle, disk), size, colors and title position change how the icons look.

Email Marketing > Mailings > (editor) Social Media block > StyleThe company social accounts listed in the Social Media block options, with switches, Add Custom Link and Configure Company.

Where to find it

  1. Open a mailing and click Edit Design.
  2. Click the social icons block (for example in the footer), clicking beside the icons to select the whole block.
  3. Use the Company, link switches, Add Custom Link or Configure Company options.

For users

Set the company's social accounts once and every mailing footer shows the right icons and links, styled to match the design.

For developers

New builder options SocialMediaLinks and SocialMediaOption on .s_social_media; links come from the res.company social fields through _get_social_media_links and are saved with update_social_links (mass_mailing/models/res_company.py) from the CompanyUpdateDialog.

Upgrading from Odoo 19

Mailings built in Odoo 19 keep their static icons; the new options apply to the Social Media block.

Change 14 of 14

UTM reference

RefactoringCommunity

UTM handling now aligns with industry standards. Instead of creating new sources on the fly, details are mapped via a new "Reference" field.

Official Odoo 20 release note

In plain words

Mailings no longer create a new UTM source named after each mailing. Links and documents keep a standard source (like Mass Mailing) and point to the exact mailing, social post or other record through a new Reference field, shown in the UTM section of link trackers, leads and sales orders.

Email Marketing > Configuration > Link Tracker > link of 'Thanks for joining us!'The new Reference field points to the mailing, while Source stays the generic Mass Mailing source.

Where to find it

  1. Email Marketing > Configuration > Link Tracker (or Clicks on a sent mailing).
  2. Open a link created by a mailing and look at the UTM section.

For users

Reports by source stay clean (one Mass Mailing source); to know which mailing produced a click, lead or order, look at the Reference field.

For developers

utm.mixin gets utm_reference, a Reference field (selection _selection_target_model, tracked with url parameter and cookie odoo_utm_reference). utm.source.mixin is removed; mailing.mailing no longer inherits it and fills utm_reference = 'mailing.mailing,ID' on links.

Upgrading from Odoo 19

Custom modules inheriting utm.source.mixin or relying on one source per mailing must be adapted; reports grouped by source now need utm_reference to split by mailing.

See all 585 Odoo 20 changes across 52 apps

Odoo 20 Email Marketing: common questions

What is new in Odoo 20 Email Marketing?

The official Odoo 20 release notes list 14 Email Marketing changes (5 new features, 8 enhancements, 1 refactoring). They include Click tracking, Conditional content, Contact management, Dynamic mailing lists and more.

Are the Odoo 20 Email Marketing changes available in Community edition?

Yes. All 14 Email Marketing changes are in Odoo 20 Community, so they are in Enterprise too.

Do Odoo 20 Email Marketing changes affect my customizations when upgrading from Odoo 19?

11 of the 14 changes have something to check when upgrading from Odoo 19, for example Click tracking, Conditional content, Contact management. Each change on this page has an "Upgrading from Odoo 19" note. Test custom modules on a copy of your database before moving production.

How do I upgrade Email Marketing to Odoo 20?

Restore a copy of your database, run the Odoo 20 upgrade on the copy, fix any custom modules that extend Email Marketing, then test your main Email Marketing flows with real users before switching production. iVentureTeam runs Odoo upgrades end to end, including custom module migration and user testing.

Odoo services for this

More Odoo 20 release notes

Planning your Odoo 20 move

Want these Email Marketing changes in your database?

We upgrade Odoo databases with their customizations and data intact, and test every custom module against the new version before go-live.