Skip to main content
iVentureTeam

many2many_tags_email

The email tags field is the recipient picker behind Odoo's share and invite dialogs: partner pills that show emails, accept Name <email> input, and can fix a bad address inline.

Siddharth JambukiyaSiddharth JambukiyaOdoo Techno-Functional Consultant
August 16, 2026Updated August 16, 20265 min read
Technical namemany2many_tags_email
Field typesmany2many, one2many
Viewsform
Modulemail
Used in core9 occurrences across 6 modules, including mail, portal, survey, website_slides, account, calendar
VersionsOdoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0
No-code setupNo. The widget appears where core places it; adding it elsewhere is XML work.
Alternativesmany2many_tags, many2many_tags_avatar, email, many2many_checkboxes

What the email tags field does

Wherever Odoo asks "who should receive this", the recipient field needs more than names. The many2many_tags_email widget extends the Tags field for partner relations in mailing contexts: portal share dialogs, survey invitations, event reminders, follower additions. Each pill shows the partner with their email, the tooltip carries the address, and the autocomplete searches partners as usual.

Its defining trick is input parsing. Paste Jane Doe <jane@example.com>, the format every mail client exports, and the quick-create path splits it: name to the partner's name, address to its email field. A colleague pasting a CC line from Outlook creates correct partners without opening a single form.

What this means for your team

Recipient UX is where external communication quality is decided. If inviting a new contact to a survey takes a detour through the Contacts app, users stop inviting new contacts, or worse, they create partners named jane@example.com with an empty email field, and the next mailing silently skips them. This widget's parsing exists precisely to keep partner data clean at the moment of entry.

Two behaviors have compliance-flavored consequences worth knowing. Quick-created recipients are real partner records the moment they are created, even if the user then cancels the wizard: the partner stays. And inline email edits through edit_tags save to the partner immediately, changing that partner's address everywhere it is used, not just for this message. Both are the right behavior for a shared address book, and both should be in your user training.

Supported options in Odoo 19

Verified against many2many_tags_email.js in the Odoo 19.0 mail module. The widget inherits the Tags option set and adds one option of its own, with an attribute-based permission gate no documentation mentions.

OptionTypeWhat it does
edit_tagsbooleanAdds an inline edit affordance on each pill for correcting the recipient's email. Gated per record by the can_write attribute; the fix saves to the partner immediately. New in 19, removed again on the development branch.(since Odoo 19.0)
no_createbooleanInherited from Tags. Blocks both quick creation and the create dialog, limiting picks to existing partners.
no_quick_createbooleanInherited from Tags. Disables inline creation, including the Name <email> parsing path; the create dialog remains.
no_create_editbooleanInherited from Tags. Removes the Create and Edit dialog entry; inline quick create remains.
createdomainInherited from Tags. Domain evaluated against the current record enabling creation conditionally.
search_thresholdnumberInherited from Tags. Minimum typed characters before the partner search fires.
placeholder_fieldfield nameInherited from Tags. Char field on the current record supplying a dynamic placeholder.
create_name_fieldfield nameInherited from Tags and undocumented. Which partner field receives the typed text on creation; the email parsing overrides this flow for address-shaped input.(default: name)
color_fieldfield nameInherited from Tags. Works in 19, but the development branch filters it out of this widget's options, so do not build on colored recipient pills.

edit_tags is a pair, not a single switch. The option turns the feature on, and the can_write attribute, a Python expression evaluated per record, decides whether the current user actually gets the edit control. Without can_write, permission defaults to yes whenever the option is set.

Working examples

Recipients on a share wizard, as portal ships it

<field name="partner_ids"
       widget="many2many_tags_email"
       placeholder="Add contacts to share the document..."/>

Recipients whose emails can be fixed inline

<field name="recipient_ids"
       widget="many2many_tags_email"
       options="{'edit_tags': True}"
       can_write="is_editable"/>

The pencil affordance appears only when the record's is_editable evaluates truthy. Corrections write straight to the partner.

Locked recipient list, no new partners

<field name="partner_ids"
       widget="many2many_tags_email"
       options="{'no_create': True}"
       domain="[('email', '!=', False)]"/>

Inherited Tags behavior: only existing partners that actually have an email address can be picked, which is the sane configuration for anything that will really send mail.

What makes it more than tags with an icon

Three source-level details separate this widget from a themed Tags field.

Creation bypasses the pending-record machinery. The overridden quick create calls orm.create("res.partner", [{name, email}]) and then links the new id into the relation. The partner therefore exists server side instantly, unlike standard tags quick-create which can ride along with the parent record's save. The same parsing feeds the Create-and-Edit dialog through a creation context that pre-fills default_email.

The widget declares its data needs. It extends relatedFields with email (marked writable, which is what makes inline fixes possible) and name. That is why every pill can show and edit addresses without the view listing subfields.

Display has a fallback chain. Pill text resolves name, then email, then display name, then a translated "Unnamed". If your recipient pills read as bare addresses, the partners have no names, and that is a data-quality signal, not a widget bug.

Version compatibility

VersionStatusNotes
Odoo 20.0In developmentNot released. edit_tags is removed and a live email validity checker appears on the development branch; details below.
Odoo 19.0VerifiedVerified against the shipped source, including edit_tags and the Name <email> parsing.
Odoo 18.0Partial / changedEmail pills only: no input parsing, no popover, no edit_tags.
Odoo 17.0Partial / changedSame basic email-pill rendering as 18.
Odoo 16.0Partial / changedAvailable in its basic form under the mail module.

Upgrade note for 18 to 19. Odoo 18's version renders email pills but has none of the interactive layer: no Name <email> parsing on quick create, no recipient popover, no edit_tags option, no can_write gate. All of that is 19-new, so backporting a 19 view to 18 silently drops those behaviors.

What is changing in Odoo 20

Odoo 20 is expected at Odoo Experience in Brussels, 24 to 26 September 2026. These observations come from the public development branch, which can change until feature freeze, and this page will be re-verified against the release.

The interesting move is that edit_tags disappears again after one release: the development branch deletes the option, the can_write gate and the custom extractProps entirely. Recipient interaction moves into a new RecipientTag component with a live validity checker bus, so invalid addresses are flagged on the pill itself rather than through an edit dialog.

Also visible: color_field is explicitly filtered out of the supported options, so recipient pills stop pretending they can be colored, and the click-popover code is replaced by the new tag component. If you built anything on 19's edit_tags, plan for its removal.

Common problems and fixes

SymptomCause and fix
Typed Name <email> but the partner was created with everything in the nameThe parsing runs in the quick-create path, which no_quick_create disables, or the database is Odoo 18. Allow quick create on 19, or create via the dialog where default_email is pre-filled.
A recipient created in the wizard exists even though I cancelledQuick creation writes res.partner directly, independent of the wizard's lifecycle. Expected. Remove the partner from Contacts if it was a mistake.
No pencil to edit a recipient's emailedit_tags is not set, or the can_write expression evaluates false for this record or user. Set options="{'edit_tags': True}" and check the can_write attribute's expression.
Fixing one recipient's email changed it on old documents tooThe inline edit saves to the partner record, which every document references. Expected for a shared address book. Create a separate partner if the person genuinely has two addresses.
Pills show raw email addresses instead of namesThe display chain fell through to email because the partners have no name. Fill in partner names; the widget is exposing a data-quality gap.
Some picked partners never receive the mailingPartners without an email are selectable unless the view restricts them. Add domain="[('email','!=',False)]" to the field.

Email tags field vs the alternatives

WidgetBest forKey difference
many2many_tags_emailRecipient pickers on share, invite and notification flowsEmail-aware pills with address parsing and inline correction
many2many_tagsPartner relations with no sending contextNo email fetch, no parsing, colors work normally
many2many_tags_avatarInternal people-picking where faces beat addressesShows avatars instead of emails, no partner-creation parsing
emailA single stored email address on the record itselfChar-field widget, one address, mailto link
many2many_checkboxesShort fixed recipient sets picked by tickingNo search, no creation, no email display

Use this widget only when the pills will actually receive mail. For plain partner relations without a sending context, standard tags avoid the email fetch, and for single recipients a many2one with the partner autocomplete is lighter.

Frequently asked questions

What is the many2many_tags_email widget used for?+
It is the mail module's recipient picker: a Tags field for partner relations that shows each partner's email on the pill, parses Name <email> input when creating new partners, and powers dialogs like portal sharing, survey invitations and calendar guest lists.
How does creating a recipient from typed text work?+
The quick-create path parses the input with the mail address parser: Jane <jane@x.com> becomes a res.partner with name Jane and email jane@x.com, created immediately by direct RPC. Plain text without an address shape just becomes the name.
Can users edit a recipient's email address inline?+
On Odoo 19, yes: set options="{'edit_tags': True}", optionally gated per record with the can_write attribute. The correction saves to the partner record immediately. Note the development branch removes this option for Odoo 20 in favor of a live validity indicator.
Why does the widget only appear on form views?+
Core registers a single variant and uses it in wizard and form contexts where recipients are picked. In lists and kanban, partner relations render through the standard tags widgets.
Does many2many_tags_email validate addresses?+
In 19 it parses and displays addresses but does not flag invalid ones on the pill. The development branch adds exactly that: a recipient checker that marks pills whose partner has a broken or missing email, expected with Odoo 20 in September 2026 and re-verified here after release.

Outbound email from Odoo not landing?

Recipient pickers are the visible end; deliverability, partner data quality and template plumbing decide whether mail arrives. We audit and fix Odoo email end to end, from SPF and bounce handling to the wizards your team touches daily.

Fix your Odoo email flow

How this page was produced

This page was verified by reading many2many_tags_email.js on the Odoo 19.0 branch, diffing against 18.0 (which lacks the interactive layer) and the development branch (which removes edit_tags and adds the recipient checker), and tracing the quick-create path to its direct res.partner RPC. The fallback chain and relatedFields come straight from the component. Spotted a discrepancy? Tell us.