Mailflow — a complete email client, right inside Odoo.
Connect Gmail, Outlook or any IMAP/SMTP mailbox and read, send, organise, collaborate on and automate your email — without ever leaving Odoo. A real inbox with two-way sync, shared team inboxes and threaded conversations.
No third-party gateway or relay — Odoo connects directly to your mail provider over IMAP/SMTP. Your mail never passes through us.
A rebuilt synchronisation engine
Version 3.0 focuses on synchronisation accuracy, delivery latency, mobile use and shared-mailbox workflows.
|
Two-way synchronisation
Messages read, moved, deleted or flagged in Gmail, Outlook or any other client are reflected in Odoo, and changes made in Odoo are applied to the server. Local actions take precedence until they are confirmed. |
Real-time delivery
IMAP IDLE maintains a live connection to the mail server, and an open dashboard checks independently. New mail appears within seconds rather than on the next scheduled fetch. |
Reliability and recovery
Messages that cannot be retrieved are recorded, retried and reported rather than skipped. A failed synchronisation is reported as a failure. Interrupted imports resume from where they stopped. |
Mobile interface
Long-press multi-select, bottom-sheet actions, in-place attachment preview, and a reply view sized for small screens. |
|
Pre-send checks
Warns before sending when the message refers to an attachment that is not present, when a reply reaches more recipients than the message it answers, or when Reply All would disclose BCC recipients. |
Deferral options
Reply Later, Set Aside and Bubble Up are tracked separately, so outstanding replies stay distinct from messages kept for reference. Bubble Up returns a conversation at a chosen time. |
Template variables
Canned responses support variables. A template containing an unfilled value prompts for it when inserted, so placeholder text is not sent to the customer. |
Mailbox monitoring
Reports mailboxes that have stopped receiving mail and scheduled actions that have been disabled, and requires confirmation before a mailbox is deleted, listing the records affected. |
Also in 3.0: resolution time in analytics, individual on/off switches for each AI action, and five add-on modules included in this package at no additional cost.
Stop bouncing between your inbox and Odoo.
|
Webmail in another tab
|
With this module
|
|
∞
Mailboxes & users
|
2-way
IMAP sync
|
9
Themes (incl. Gmail & Outlook)
|
10+
Odoo apps linked
|
0
External services
|
See it in action
Every screen below is the real module — no mock-ups.
Every mailbox on one screen, at the density you actually want
Sender, subject and preview on a single line — roughly three times as many messages per screen as a stacked list, and it never jumps when you tick a checkbox. Coloured tags, Open / Pending / Closed badges, assignee avatars, a live sync indicator and a 1–40 of 84 pager so older mail is always one click away.
THREADED CONVERSATIONS
The whole exchange, stacked the way you expectSent and received mail collapse into one conversation with the newest open and the rest one line each. Duplicates are removed on the way in, so a message that carries three labels is still one message. |
REPLY IN THREAD
Reply without leaving the conversationReply, Reply-All and Forward dock under the thread with recipients, subject and quote prefilled — and the Send button is scrolled into view for you, whatever the window height. |
A REAL COMPOSER
Write, attach, sign and scheduleAttachments, links, emoji, inline photos, signatures, saved snippets, Send Later and auto-saved drafts. Drag it, resize it, pop it out full-size — and send from any alias on the mailbox. |
COLLABORATE PRIVATELY
Discuss with your team, right beside the emailInternal notes the customer never sees, with @mentions that notify. The panel floats over the mail instead of pushing it down, so you can read the message and the discussion together. |
RIGHT-CLICK ANYTHING
Ten verbs on the right mouse buttonReply, forward, mark read, star, snooze, mute, archive and delete without opening the message — plus “find everything from this sender” and “with this subject”, which write the search for you. |
FIND IT AGAIN
Gmail-style operators, or a form if you preferType from:acme has:attachment -is:read, or fill in the panel. Save any query as a smart folder and share it with the team. |
Catch up on a long thread in one card
One summary card, then the message. Suggested replies wait at the foot of the conversation, next to Reply and Forward — where you choose how to answer after reading, not before. Every AI control is hidden until you connect a key, and the module never ships one.
MEASURE YOUR TEAM
Volume, response time & SLA at a glanceIncoming versus outgoing volume, median first-response time, open backlog, load per agent, status mix and SLA outcomes over 7 / 30 / 90 days. |
AUTOMATION STUDIO
Visual drag-and-drop flows for your mailWire trigger → condition → action to route mail into CRM, Sales, Helpdesk, Project and more — auto-reply, assign, tag, move, set status, post to a channel, call a webhook or wait. |
OUTLOOK THEME
Or make it feel like OutlookThe same inbox, one setting apart: Fluent-style blue accent, squared corners, a blue bar on unread rows and a roomier three-line density. |
MAKE IT YOURS
Themes, colours, wallpaper & densityNine prebuilt themes, a custom accent or multi-colour gradient, a background tint, solid colour or wallpaper, plus text size, bold text and three densities — all from Settings, and all dark-mode aware. |
Suspicious mail is defused before you read it
Tracking pixels and remote content are stripped, scripts removed and look-alike senders flagged — with a one-click Trust Sender when you know better. Nothing is fetched from a third party to render your mail.
One module, the whole workflow
|
📥
Unified inbox & two-way syncRead, star, move, archive, spam and delete — every change pushed back to the IMAP server. Search, filter chips, tags and bulk actions. |
💬
Threaded conversationsThe whole conversation stacks in the reading pane, latest expanded. Reply docks inline — no popup, no context switch. |
👥
Team inboxesShare sales@ or support@ with users or groups; assign messages; everyone sends as the mailbox. |
|
🔒
Safe Mode & privacySuspicious HTML sanitised on ingest with a trust-sender allow-list. Block Tracking URLs strips pixels & beacons. |
📅
Calendar & scheduling.ics invite cards → Accept / Maybe / Decline into a calendar event. Snooze, send-later and remind-if-no-reply follow-ups. |
⚡
Automation StudioDrag-and-drop trigger → condition → action flows with a run log and a template gallery. |
|
✉
Rich composer & recipient autocompleteOdoo’s full rich-text editor with To/Cc/Bcc autocomplete against your contacts (or free-typed, validated addresses) as avatar chips, drag-and-drop attachments up to 25 MB, and a floating or docked composer that pops out to a full-size window without losing your draft. |
📋
Canned responses, signatures & draftsReusable snippets and email templates for the replies you send again and again, per-account signatures added automatically, and save-as-draft so nothing in progress is ever lost. |
👤
Sender avatarsEvery message and recipient shows a face: a matched Odoo contact’s photo, or a deterministic colored-initials circle for unknown senders — so the same sender is always the same color. |
|
📁
Nested foldersYour IMAP folders render as a real tree, subfolders indented under their parents exactly as they appear in Gmail or Outlook, with a graceful fallback for orphaned subfolders. |
🖨
Print conversation to PDFOne click renders the whole thread — every message’s sender, recipients, date and body — into a clean, print-optimized layout and opens your browser’s print / Save-as-PDF dialog. Email HTML is rendered inert for safety. |
🌐
Multi-language core UIThe core interface ships localized in German, Spanish, French, Dutch and Portuguese, with the source template included so you can translate the rest. |
|
🏷
Send-as aliasesGive one mailbox several identities — sales@, billing@, a personal address — each with its own display name and signature, and pick the sender from the composer. A reply defaults to the address the mail was sent to. |
🗑
Deletions sync both waysMail you delete from your phone disappears here too, instead of lingering for ever. A folder is never wiped on a failed fetch — a message is only removed once the server has actually confirmed it is gone. |
📊
A database that stays in shapeChoose how much history to keep per mailbox, cap a sync run so a first import cannot run away, and let the operation queue prune itself. Attachment caching is opt-in, per direction. |
Built for support teams, not just individuals
Everything a shared support@ or sales@ mailbox needs to run as a team — private notes, live presence, a shared status workflow, response targets and a manager dashboard.
|
📝
Private team notes with @mentionsDiscuss a customer email privately, right beside the thread. Notes are internal only — never emailed to the customer and never written back to IMAP. Tag a teammate who shares the mailbox from the Notify: chip bar and they get a live in-app notification pointing straight to the conversation. |
👀
Live presence & collision detectionSee “Jane is viewing” or “Sam is replying…” the moment a teammate opens the same email, refreshed on a live heartbeat. This advisory collision detection warns two agents before they answer — so a customer never gets two replies to the same message. |
|
🔄
Open / Pending / Closed statusEvery conversation carries a shared status. Sending a reply moves it to Pending; a new inbound reply automatically re-opens it to Open. Colored status pills show in the list and reading pane, with one-click status filters. |
⏱
SLA targets & breach alertsManagers set first-response and resolution targets per mailbox, with a warning threshold. Agents get an SLA badge and a live countdown (‘2h left’ / ‘overdue 15m’); on breach the team is alerted (deadlines are checked every few minutes) and the conversation can auto-assign to an escalation user. |
📊
Team & inbox analyticsA manager dashboard aggregates incoming vs outgoing volume, median first-response time, open backlog, per-agent load, status mix and SLA outcomes across a 7 / 30 / 90-day window — your team’s speed and workload at a glance. |
SLA policies and the analytics dashboard are manager-only; notes and presence are visible only to teammates who share the mailbox.
The customer’s whole history, beside their email
Open an email from a known contact and a 360° sidebar surfaces their related Odoo records — grouped by app, with per-group counts and clickable rows that jump straight to the record. Matching spans the contact’s whole company family (parent company + child contacts), and it only ever shows records the reading user is allowed to see.
📈 CRM opportunities |
🧾 Sales orders |
🧾 Invoices & bills |
🎟 Helpdesk tickets |
✅ Project tasks |
🛒 Purchase orders |
Appears only for senders matched to an existing contact, and only for the apps you actually have installed — nothing to configure. Reply with full context, every time.
An agent that answers email on its own
Not a drafting tool that waits for someone to press a button. When mail arrives the agent works out who sent it, checks what that person is allowed to see, answers inside those limits, and remembers the exchange. Off by default, enabled one mailbox at a time.
|
IT ANSWERS AS THE SENDER, NOT AS AN ADMIN
The hard part of answering mail automatically is not writing the reply. It is knowing what the person asking is entitled to know. The agent matches the sender to a contact or a user, then runs every lookup as that person - never with elevated rights. A customer asking after their order gets their order and cannot reach anybody else's. An address matching nobody is answered from public information only. That is enforced by Odoo's own access rules rather than by asking a model to behave. |
IT PROPOSES CHANGES, IT DOES NOT MAKE THEM
Where a reply implies doing something - logging a request, updating a record - the agent puts the change forward for a person to approve. Approved changes then run under the matched user's own access, not the agent's. So the worst case of a misread email is a proposal somebody declines, rather than a record quietly altered by a machine. |
|
Draft, or send
Start with Draft for review: the agent writes, a person reads it and presses Send. Auto-send is a separate decision, taken later, once you have watched how it answers. |
It remembers
Per-sender memory, so a follow-up two weeks later does not start from nothing and the customer is not asked the same question twice. |
Personas and triggers
Set the tone and the remit it answers within, and the conditions under which it answers at all - so it handles order status and leaves anything else to a person. |
It cannot run away
Loop, bulk and no-reply protection stop it answering another machine or a mailing list, and a full audit log records every decision it took and why. |
What it needs. A language model, supplied by the separate AI Connector (Multi-Provider) app on the Odoo Apps store. You bring your own provider key and pay that provider directly for what you use; no key is stored by Mailflow. If you would rather call your own endpoint or a model you host yourself, every provider call in the agent goes through a single accessor, so redirecting it is a contained change rather than a rewrite.
Four more add-on modules, included
These four modules are supplied inside this download, alongside the AI Agent above, at no additional cost, as a zip file each, next to the Mailflow module itself. Extract the ones you want into the same addons directory, update the apps list, and install them like any other module; the included setup guide has the exact steps.
They are separate modules rather than part of Mailflow itself so that a mailbox with a single owner is not obliged to carry helpdesk features, a cloud subscription or an Enterprise dependency it will never use. Leave any of them uninstalled and Mailflow is unaffected.
Shared-mailbox features for teams. Assignment, SLA policies, status, internal notes, presence and analytics remain part of the core module and continue to work without this add-on.
|
Identifies messages that misrepresent their sender or contents, while suppressing warnings for correspondents already known to the business. Requires no additional Python packages.
|
||||||||||||||||||||||||||
Allows the mail provider to notify Odoo when mail arrives, removing the wait for the next scheduled fetch. Disabled by default.
|
Files email attachments into Odoo Documents directly from the mailbox, with an optional default folder per mailbox.
|
AI that does the busywork
Mailflow works fully without AI. When you want it, connect the separate AI Connector module and your own provider account — then AI reads, drafts and triages for you. Every feature below is opt-in, per company.
|
🪄
Draft & rewrite in the composerDraft a full email from a one-line prompt, or rewrite your draft in one click — improve, shorten, more formal, friendlier, or fix grammar. Returns ready-to-use HTML in the original language. |
💡
Suggested repliesGet up to three short, distinct reply drafts tailored to the conversation. Click one and the reply composer opens pre-filled — signature and quoted original included — ready to edit and send. |
🧵
Summarize a long threadOne click condenses the whole conversation into a few sentences of context plus bulleted key facts, decisions and action items — catch up in seconds instead of scrolling. |
|
🏷
Auto-triage incoming mailWith enrichment on, each new email is tagged in the background with a one-line summary, category (sales / support / billing / other), sentiment and priority — surfaced as a priority badge in the list and an AI insight strip in the reading pane. Perfect for helpdesk triage. |
🔀
AI intent routing in flowsAn Automation Studio node classifies each email as sales, support, billing or other and routes the flow down the matching branch — with a safe fallback to ‘other’ whenever AI is unavailable. |
🧲
Email → filled CRM lead or ticketWhen a flow creates a record, AI reads the email and fills curated fields — name, company, email, phone, job title, city and more — so the new lead, ticket or contact is genuinely usable, not a bare stub. |
Bring-your-own-key by design. All AI runs through the separate AI Connector (Multi-Provider) module — the mail client never stores an API key. Choose your provider and model per company (OpenAI, Anthropic, xAI and more), cap spend with per-user rate limits, and pay your provider directly per request. Without the connector installed the entire AI UI stays hidden and Mailflow works exactly as before. AI Assist and Auto-enrich incoming mail are separate toggles, both off by default, and Automation Studio flows are built by managers / administrators.
Fast by design
Triage feels instant and forgiving — fly through your inbox from the keyboard, take back a send, and undo any action with a single click.
|
⌨
Keyboard shortcuts + Ctrl-KA full single-key layer (j/k to move, o open, c compose, r reply, e archive, / search, ? for the cheat-sheet) plus Compose, Go to mailboxes, Focus search and Shortcuts wired into Odoo’s Ctrl-K command palette. Typing in a field never triggers a shortcut. |
↩
Undo SendCaught a typo the instant you hit send? Outgoing mail is held for a short, configurable grace window with a sticky ‘Message sent — Undo’ toast. Click Undo and it comes back as an editable draft; do nothing and it goes out. |
⏰
Send Later, Snooze & remindersSchedule an email for the right moment (in 1 hour, tomorrow 8 AM, Monday, or a custom time), snooze incoming mail until later, and set ‘remind me if no reply’ follow-ups that nudge you only if the thread stayed silent. |
|
🔍
Gmail-style operator searchSearch the way you already do: from: to: subject: before: after:, plus has:attachment and is:unread / starred — with quoted phrases and live, debounced results. |
📌
Saved searches / smart foldersTurn any filter — ‘unassigned support’, ‘starred from Acme’ — into a named, pinned smart folder in the sidebar. Keep it private or share it with the whole team; one click re-applies the saved search and its filters. |
🔔
Desktop alerts & unread badgeOnce you allow browser notifications, native desktop alerts fire on new mail while the tab is in the background, and the browser tab title keeps a live ‘(3) Mailflow’ unread count — so you know the moment mail lands, even from another tab. |
|
🖱
Row quick actionsHover any message to archive, delete, toggle read / unread or snooze it — without opening it first. Every action removes the row instantly and refreshes folder counts on the spot. |
📂
Drag messages onto foldersFile email the natural way: drag a single row or a whole ticked selection onto any sidebar folder. The drop target highlights on hover and the move runs instantly, with an Undo toast. |
↺
Instant, undoable triageArchive, delete, spam, move and snooze remove rows immediately — zero flicker — then run server-side with a one-click Undo that restores them to the source folder. If a call fails, the list reconciles itself back to the truth. |
|
🔇
Mute a noisy conversationSome threads you need to keep, not read. Mute one and every future reply skips the Inbox and the unread badge while staying searchable and filed — and a reply inherits the mute rather than re-opening the thread behind your back. |
✉
One-click unsubscribeNewsletters that carry a standard List-Unsubscribe header (RFC 2369 / 8058) get an Unsubscribe button in the reading pane. Requests only ever go to public https endpoints — never to an internal address, and never following a redirect. |
⇄
A pager that reaches the bottom‘1–40 of 12,334’ with prev / next and a jump back to newest, right in the list header. Mail from years ago is a few clicks away instead of hundreds of presses on a Load-more button at the foot of the list. |
Route mail into the apps you already use
📈 CRM Leads |
🧾 Sales Orders |
🛒 Purchase / RFQ |
🧾 Vendor Bills |
🎟 Helpdesk |
✅ Project Tasks |
💼 Recruitment |
🧾 Expenses |
💬 Discuss |
👥 Contacts |
📅 Calendar |
➕ Any mail.thread |
Replies thread straight back onto the record — and the generic "Create record" node targets any Odoo model that accepts email.
GDPR-ready by design
Your mail never leaves your control. Odoo connects directly to your provider — there is no third-party relay, gateway or SaaS in the middle that could see, store or process your messages.
|
🏢
Data stays in your DBMessages, attachments and contacts live in your own Odoo database — on your server or hosting of choice. Nothing is sent to us. |
🔐
Per-mailbox access controlShare a mailbox with named users or groups only. Odoo record rules enforce who can read, send and act on each account. |
🔒
Safe Mode & no trackingIncoming HTML is sanitised, and Block Tracking URLs strips pixels and beacons so senders can't silently profile your team. |
🗑
Right to erasureA contact's mail is standard Odoo data — delete it with the usual record deletion to honour erasure requests. |
Optional AI Assist is bring-your-own-key and off by default — enable it only if you want it, using your own AI provider account.
Works with Gmail, Outlook & any IMAP mailbox
Gmail / Outlook OAuth2 reuses Odoo's built-in integrations, or use a standard IMAP/SMTP app password. No third-party service in the middle — Odoo connects straight to your mailbox. Community & Enterprise, Odoo 19.
|
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Calendar (calendar)
• Contacts (contacts) • Discuss (mail) |
| Lines of code | 19236 |
| Technical Name |
unified_mail_client |
| License | OPL-1 |
| Website | https://github.com/roshank8s/ |
Odoo Proprietary License v1.0 This software and associated files (the "Software") may only be used (executed, modified, executed after modifications) if you have purchased a valid license from the authors, typically via Odoo Apps, or if you have received a written agreement from the authors of the Software (see the COPYRIGHT file). You may develop Odoo modules that use the Software as a library (typically by depending on it, importing it and using its resources), but without copying any source code or material from the Software. You may distribute those modules under the license of your choice, provided that this license is compatible with the terms of the Odoo Proprietary License (For example: LGPL, MIT, or proprietary licenses similar to this one). It is forbidden to publish, distribute, sublicense, or sell copies of the Software or modified copies of the Software. The above copyright notice and this permission notice must be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Please log in to comment on this module
Excellent feature set. Responsive customer support. This is the email addon Odoo should already have. But since it doesn't, just purchase Mailflow... you can thank me later!
Excellent feature set. Responsive customer support. This is the email addon Odoo should already have. But since it doesn't, just purchase Mailflow. You can thank me later...
Complete feature set. Excellent customer support. This should be in Odoo by default.
Mailflow adds the much-needed ability to manage your email from within Odoo.
I'll never understand why this isn't built in to Odoo by default—I can manage my business entirely from within Odoo except for all the email I get? If you happen to use Gmail or Outlook, the Odoo mail connectors can help a little... but for everyone else, along comes Mailflow to the rescue. And it adds so much more, even if you do use Gmail or Outlook, you should give Mailflow a try.
And on top of it all, the customer support is top-notch. The developer responds quickly, and is always willing to listen to feature requests and bug reports. Give Mailflow a try today, I promise you won't be disappointed!