Email-to-Ticket
Ticku turns inbound email into tickets. A customer mails your support address, a ticket appears in the right project, and every reply on that thread lands on the same ticket instead of creating a new one.

The shape of it
An inbox is a mailbox Ticku reads. It belongs to the tenant, not to a project — a single support@ address routinely serves several teams, so the project is a destination rather than an owner.
┌─────────────────┐
support@you.com ───▶ │ Inbox │
│ (tenant-owned) │
└────────┬────────┘
│ routing rules decide where
┌───────────────┼───────────────┐
▼ ▼ ▼
Acme Support Contoso Support Default project
(recipient rule) (domain rule) (no rule matched)
Every inbox has a default project, and it is mandatory. Mail that matches no rule lands there. This is deliberate: an inbox that can silently drop mail is indistinguishable from one that is quietly broken, so there is always somewhere for a message to go.
:::info Support projects only An inbox's default project and every routing-rule destination must be a Support project. Ticku refuses to point email at a Dev, Consulting, or Epic project.
Rows created before this rule keep working and can still be saved as-is, but they cannot be moved to a different non-Support project — and once one lands on a Support project it can't go back. :::
What happens to a message
- Fetched — either pushed to Ticku by Microsoft Graph or pulled by the poller, depending on the inbox's connection mode.
- Filtered — no-reply senders and bounce/delivery reports are dropped.
- Threaded or created — if the message replies to a known thread it becomes a comment on that ticket; otherwise it's a new ticket.
- Routed — new tickets go to the project chosen by the routing rules.
- Enriched — CC'd addresses and
@mentionsin the body become assignees and followers. - Marked — the source message is marked read, moved, deleted, or left alone, per the inbox's after-process action.
Both transports run the same ingestion pipeline. Only fetching and marking differ, so routing, threading, mention parsing, and de-duplication cannot drift between them.
Threading
Ticku stamps its outbound mail with a Message-ID that embeds the ticket id, then reads In-Reply-To and References on the way back in. A reply is matched to its ticket by:
- The ticket id parsed out of one of our own
Message-IDs, or - The referenced ids matched against stored thread roots and previously processed messages — which catches a customer replying to their own earlier email.
Anything that resolves to neither is a genuinely new conversation.
:::note Replies never re-route Routing applies to new tickets only. A reply threads onto its existing ticket and stays in whatever project that ticket already lives in, even if the rules have changed since. :::
De-duplication
The RFC Message-ID is the dedup key. If the same message is fetched twice — two poll cycles overlapping, a webhook redelivery — the second ingestion is recorded as DUPLICATE and does nothing. Messages arriving without a Message-ID cannot be deduped.
Outbound replies
Ticku can reply on the ticket's email thread. Which events send mail is configured per inbox and can be overridden per routing rule:
| Event | Default | Notes |
|---|---|---|
| Acknowledgement on ticket creation | On | The first "we got it" reply |
| Every comment | Off | Off by design — comments have no internal/public flag, so on mails internal discussion to the customer verbatim |
| Status change | On | Covers assignment too, since assigning auto-transitions OPEN → ASSIGNED |
An agent can opt a single comment in regardless of the flag by writing @creator in it.
Where to go next
- Connection Modes — the three ways an inbox authenticates, and which to pick
- Managing Inboxes — creating one, and every setting on it
- Routing Rules — sending one mailbox's traffic to several projects
- Health & Troubleshooting — polling, the circuit breaker, and what to do when mail stops