-
Notifications
You must be signed in to change notification settings - Fork 15
Multi Tenancy Email Routing
Part of the Multi-tenancy section. Planned / in design.
When a multi-tenant install receives an email, it has to decide which company the ticket belongs to. This page explains how β and how it bends to very different ways of working.
Each company registers the email domains it owns β acme.com, and maybe also acme.co.uk. A company can own several domains. Mailboxes do not own domains; companies do.
This is the heart of it β and a perfect example of flexibility living in the entity rather than a global switch. Each mailbox is set up as one of:
- You assign the mailbox to a specific company (and optionally a department).
- The mailbox decides the company. The sender's address is irrelevant β everything arriving here belongs to that company.
- It's also the reply identity: replies to its tickets go back out from this mailbox, so the client sees their own helpdesk end to end.
- Great for: a single company's own helpdesk, or an MSP that dedicates a separate inbox to each client.
- The mailbox is not pinned to a company.
- An arriving email is filed by matching the sender's domain against the companies' registered domains (
someone@acme.comβ Acme). - An unmatched sender drops into the triage queue (below) β never lost.
- Great for: an MSP running a single professional address like
support@themsp.comfor all clients. This is the recommended default for MSPs.
A ticket remembers which mailbox it came in on, and replies always go back out from that same mailbox β the mailbox is the company's email identity, both inbound and outbound.
A company isn't locked into "one mode". Acme might receive most mail via the shared support@themsp.com and have a dedicated helpdesk-acme@themsp.com for VIPs. Both feed Acme. That's exactly why the pinned-vs-shared choice lives on the mailbox, not on the company.
- Is it a reply to an existing ticket? β it joins that ticket and inherits its company. (A thread stays glued to one company even if someone replies from a different address.)
- Did it arrive in a pinned mailbox? β that mailbox's company. Sender ignored.
- It arrived in a shared intake β match the sender's domain to a company. No match β triage.
In a single-company install only step 2 ever fires, which is why none of this is visible until you add a second company.
When a shared-intake email matches no company domain, it lands in a Triage / Unassigned queue rather than vanishing. From there an analyst can, in one click:
- Create a new company from this domain β and the queued email (plus any others from that domain) is filed under it, with all future mail auto-routing from then on.
- Assign it to an existing company β e.g. a client that just started using a new domain.
Addresses like gmail.com or outlook.com also land in triage β but you should never map a free-email domain to a company (two different clients will both have users on Gmail). Those tickets are assigned by hand, one at a time. See Pitfalls.
FreeITSM β an open-source IT Service Management platform Β· github.com/edmozley/freeitsm Β· MIT licence
- Installation
- β° Scheduled tasks (cron jobs)
- Architecture
- AI Providers
- Internationalisation (i18n)
- Timezones & Time Handling
- Theming & Dark Mode
- β¨οΈ Command palette (βK)
- π Searching inside tickets
- π Attached documents
- MobileβFriendly
-
Security
- Layer 1 β which modules you can enter
- β³ π§© Module Access Control
- β³ π οΈ Module Access β Developer Guide
- Layer 2 β what you can administer
- β³ π Roles & Permissions
- β³ π οΈ Roles β Developer Guide
- β³ π€ Why capabilities are constants
- Layer 3 β the System module
- β³ π Admin Access Control
- Hardening
- β³ π Security review response 2026-08
- β³ π‘οΈ Security hardening 2026-08
- β³ π οΈ Security hardening 2026-08 β Developer Guide
- β³ π‘οΈ Round three β plain English
- β³ π οΈ Round three β Developer Guide
- Single Sign-On (SSO)
- ποΈ LDAP & Active Directory
- Browser Extension
- API Reference
-
π REST API β how it works
- β³ π« REST API: Tickets
- β³ π» REST API: Assets
- β³ π΄ REST API: Problems
- β³ π REST API: Changes
- β³ π REST API: Knowledge
- β³ β REST API: Tasks
- β³ ποΈ REST API: CMDB
- β³ π REST API: Contracts
- β³ ποΈ REST API: Calendar
- β³ πΏ REST API: Software
- β³ π¦ REST API: Service Status
- β³ βοΈ REST API: Morning Checks
- β³ π REST API: Forms
- β³ βοΈ REST API: Workflow
- β³ πΊοΈ REST API: Network Mapper
- β³ π§ Using the API docs page
- β³ π OpenAPI specification
- β³ β OpenAPI: kept correct
- β³ π οΈ Maintaining the catalogue
- Watchtower
-
Tickets
- β³ Mailbox Authentication
- β³ π€ Email send log
- β³ Basic IMAP mailboxes
- β³ Email rendering & images
- β³ SLA Management
- β³ WhatsApp channel
- β³ π¬ Web chat channel
- β³ π£ Slack channel
- β³ π Linking tickets
- β³ ποΈ Canned responses
- β³ βοΈ Limiting replies to particular senders
- β³ βοΈ Email signatures
- β³ π The public web address
- β³ π Raising a ticket for someone else
- β³ π Merging tickets
- β³ β Splitting tickets
- β³ β Selecting several tickets
- β³ π οΈ Snoozing tickets β Developer Guide
- β³ π₯ Collision detection
- β³ β±οΈ Time tracking
- Problem Management
- Tasks
- Assets
- Knowledge
- Change Management
- Calendar
- Morning Checks
- Reporting
- Software
- Forms
- Contracts
- Service Status
- π Notifications
- π¨ War Room
- Self-Service Portal
- LMS
- Process Mapper
- CMDB
- Network Mapper
- Workflows
- Issue trackers (Jira, Azure DevOps)
- System
-
Overview
- β³ π Progress tracker
- β³ Concepts & vocabulary
- β³ Email routing & mailboxes
- β³ Settings: global vs per-company
- β³ Users & self-service
- β³ Staff cross-company access
- β³ Worked examples
- β³ Pitfalls & gotchas
- β³ Scope: what it's for
- β³ π οΈ Developer Guide (make a module multi-company)
- β³ ποΈ Case study: CMDB (a linked graph)
- β³ π§ͺ Test harness (prove it's isolated)