html_composer_message
The rich text area of Odoo's full email composer is its own field widget. html_composer_message tunes the HTML editor for writing messages: mentions, collapsed quotes, batch-only placeholders, and attachment syncing.
| Technical name | html_composer_message |
|---|---|
| Field types | html |
| Views | form (composer and scheduled message dialogs) |
| Module | mail, shipped with every Odoo database |
| Used in core | 3 occurrences in the mail module: the full composer and scheduled message dialogs |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0 |
| No-code setup | Not applicable: it targets the composer models, not user forms |
| Alternatives | html_mail, html, text |
What the composer body widget does
What this means for your team
Working examples
The composer bus: attachments, discards and signatures
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. Same registration; mention plugin replaced and placeholder sets reorganized on the development branch. See below. |
| Odoo 19.0 | Verified | Verified against the shipped source: video plugin removed, banner commands disabled, HTML-based save, reply_all quote collapsing. |
| Odoo 18.0 | Verified | First release, on the new html_editor stack. Saves discarded content as flattened plain text and requires the composer bus context. |
| Odoo 17.0 | Not available | Does not exist; the composer used the previous editor stack. |
| Odoo 16.0 | Not available | Does not exist. |
Upgrade note for 18 to 19. XML needs no changes, but two behaviors flip: saved-back content is HTML instead of regex-flattened text, and the widget no longer assumes the composer bus exists, so it can render outside the full composer dialog without crashing. Custom code patching the 18 class should be retested against the plugin-based 19 editor.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| No dynamic placeholder command in the composer | The composer is in single-message mode; placeholder plugins are stripped when composition_batch is false. Compose from a list selection of multiple records, or use an email template instead. |
| The quoted previous messages seem to have disappeared in a reply | With reply_all active, the quoted thread is collapsed by the content-expandable plugin. Click the expander toggle in the body; the content is still there. |
| Pasted image does not appear as an attachment on a scheduled message | The auto-link hook only runs for mail.compose.message records. Attach the file through the paperclip instead of pasting when scheduling. |
| Mentions suggest nobody | The thread cannot be resolved because model or res_ids is missing on the record. Ensure both fields are set, which core composer flows do automatically. |
| No video command in the powerbox | The widget removes the video plugin deliberately; embedded video does not belong in email. This is designed behavior, not a regression. |
| Signature edits do not persist into the saved body | Signature blocks are stripped on SAVE_CONTENT; the signature is re-applied at send time from user settings. Change the signature under user preferences instead of in the composer. |
Composer body widget vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
html_composer_message | The body of emails being composed or scheduled | Thread-aware mentions, batch-gated placeholders, attachment and signature plumbing |
| html_mail | Email-styled HTML stored on records, such as template bodies | CSS inlining for email clients, no composer bus or mention plugin |
| html | General rich text on business documents | Full editor with video and banners, no email constraints |
| text | Plain multi-line notes | No formatting at all, and therefore nothing to sanitize |
Frequently asked questions
Where is html_composer_message actually used?+
Why do dynamic placeholders only appear sometimes?+
Does it support the same options as the html widget?+
Can I type @ to mention colleagues in the full composer?+
What happens to attachments I paste into the body?+
Is html_composer_message changing in Odoo 20?+
Composer not behaving the way your sales team expects?
We customize Odoo's mailing pipeline end to end: composer wizards with your own fields, dynamic placeholder strategies for batch sends, and editor plugins that survive version upgrades. If your team lives in the full composer all day, small fixes here pay back daily.
Ask us about composer customization