Email channel · piped + grounded

Every email, answered and tracked.

Pipe support@ straight into OpsIQ: each inbound email becomes a native ticket, the AI drafts or sends a grounded reply by email, and your team picks up only what needs a human, all on one threaded timeline. Transactional and broadcast email ride the same authenticated relay, so SPF, DKIM and DMARC pass and your mail lands in the inbox, not spam.

Email → native ticketAI drafts, you approveDKIM signed per messageNo MX change to start
Inbound mail becomes a ticket
AI drafts the reply in your voice
Live support@ → ticket → reply. INBOX · support@ maria@acme.com Invoice #2291 looks wrong tom@globex.com Where is my order? lee@initech.com Reset my password POLLED · cron 3 new · IMAP DKIM · SPF · DMARC ok live · last poll 11:42 → ticket TICKET #4821 · OPEN Invoice #2291 looks wrong Requester: Maria · Acme Co · resolved billing receipt.pdf AI DRAFT · composing re: Invoice #2291 Hi Maria, You were billed twice on #2291. I've refunded the duplicate $48.00. grounded · brand voice Send
A real email help desk

One inbox, one timeline.

1inbox → one threaded timeline
DKIMsigned on every message
AIdrafts replies in your voice
0tickets lost or duplicated
📬 Connect your mailbox

Point support@ at OpsIQ in minutes.

Add an IMAP mailbox (Gmail, Outlook or cPanel), give it a friendly name, route it to a department, and test the connection with a real login before you save. Or set a forwarding rule from support@ to your OpsIQ pipe address. A cron job polls every few minutes; no MX change required to get started, and you can run sales@, billing@ and support@ side by side, each routed.

IMAP mailboxConnected
imap.gmail.com PORT 993 · SSL Support Inbox support@company.com → Billing dept FOLDER · INBOX maria@acme.com tom@globex.com lee@initech.com Polling enabled · every 3 min TEST CONNECTION Connected 312 messages in folder real IMAP login · before save POLL NOW 3 new messages pulled into tickets POLLING Last polled 11:42 · cron
Routes by recipientsupport@ · sales@ · billing@
01

Add the mailbox

Friendly name and email, host / port / security, the folder to watch and the department it feeds, then hit Test for a real IMAP login before saving.

02

Choose the way in

IMAP credentials to fetch on a schedule, or a forwarding rule from support@ to your pipe address. Either way, no MX change to start, and many mailboxes run side by side.

03

OpsIQ polls & routes

A cron job checks every enabled box on each tick, or Poll now on demand. Every message from a box lands on the right queue.

📥 Inbound → native ticket

Every email becomes a native ticket.

The ingestor reads the message, resolves the sender to a contact (or creates one), opens a ticket with the subject as title and the body as the first reply, and ingests attachments inline. Follow-ups thread onto the same ticket. No duplicates, no lost context.

Thread matching & attachments

Replies land on the right ticket.

Message-ID, In-Reply-To and References headers (plus the requester) are matched so a customer's reply appends to the original ticket. Attachments (receipts, screenshots, PDFs) are decoded from multipart MIME and stored on the timeline.

  • Sender resolved. Matched to an existing contact or created automatically.
  • Header threading. In-Reply-To / References append instead of duplicating.
  • Attachments ingested. Files travel into the ticket, not a separate inbox.
  • Routing & SLA. Rules auto-assign and the first-response clock starts at once.
Live INBOUND · support@ From: maria@acme.com Invoice #2291 looks wrong Charged twice — receipt attached. receipt.pdf · 84 KB email → ticket TICKET #4821 · OPEN Invoice #2291 looks wrong Requester: Maria · Acme Co · resolved to contact billing receipt.pdf SLA started FOLLOW-UP REPLY "Any update?" — same thread In-Reply-To matched ✓
🧵 Message-ID minting & idempotency

One message, one ticket, guaranteed.

Every outbound message gets a minted, persisted Message-ID. When a reply returns, OpsIQ matches In-Reply-To and References against that ID, so the follow-up appends to the original ticket instead of opening a duplicate. An atomic Message-ID claim makes ingestion idempotent, even if the poll runs twice.

  • Message-ID minted & persisted. Stored, then matched on reply.
  • In-Reply-To / References headers preserved both directions.
  • Atomic idempotency claim. A double poll never double-ingests.
  • Requester fallback. Matched to the contact when headers are stripped.
Live OUTBOUND re: Invoice #2291 Message-ID: <a91f@opsiqai> INBOUND REPLY re: Invoice #2291 In-Reply-To: <a91f@opsiqai> header match ✓ same thread TICKET #4821 · 2 messages ↳ reply appended — no new ticket In-Reply-To matched Duplicate poll · same Message-ID idempotency claim → rejected, not re-ingested
AI email replies · grounded

Grounded answers, in your voice.

The same brain that runs your chat widget reads the email, answers from your knowledge base and the customer's account, and either drafts a reply for an agent to approve in the Email Drafts queue or sends it automatically, your choice, per workspace. Each inbound message lands with a grounded draft attached: tweak it inline, hit Regenerate for a fresh take, or approve to send. RFC-3834 suppression skips auto-responders, bounces and no-reply senders, and a 3-per-hour per-sender cap stops reply loops dead.

Grounded in account + KB. Answers from real data, refuses to invent facts.
Edit · regenerate · approve. Nothing reaches the customer until you choose to; auto-send is opt-in per workspace.
Suppression & rate limit. RFC-3834 never auto-replies to daemons; a per-sender cap kills loops.
Approvethen send, your call
OpsIQ Writingalso drafts broadcasts
INBOUND AI DRAFT · PENDING AGENT SENT maria@acme AI draft grounded · pending review Edit inline ↻ Regenerate Approve & send DKIM ✓ SUPPRESSION & RATE LIMIT mailer-daemon Auto-Submitted: auto-replied Precedence: bulk RFC 3834 no auto-reply Suppressed loop prevented
Groundedaccount + KB, never invents
Approve-firstor auto-send, per workspace
Loop-safeRFC-3834 + 3/hour cap
✅ Deliverability

Signed, aligned, and in the inbox.

Outbound email leaves through one transport you control: pin a Mailgun / SendGrid / Postmark / Resend / Amazon SES connector, or configure SMTP as the fallback. Every message is DKIM-signed and SPF/DMARC-aligned for your domain, so mailbox providers trust it. A 24-hour delivery panel shows sent, failed and a breakdown by transport, with a warning if OpsIQ is still falling back to PHP mail().

Pinned connector: Mailgun, SendGrid, Postmark, Resend, Amazon SES.
SMTP fallback over STARTTLS / SSL, used if the connector send fails.
24h delivery stats: sent, failed and a by-transport breakdown.
Send a test email to verify the transport end to end before going live.
Live OpsIQ relay signs & aligns relay.opsiqai.com SPF pass · aligned DKIM signed per message DMARC policy pass Inbox not spam DELIVERY HEALTH · 24H 1,284sent 6bounced 1complaint postmarktransport ⚠ warns the instant it falls back to PHP mail()
🧭 Outbound router

One send path, every fallback covered.

Every outbound message (agent reply, AI auto-reply, transactional, broadcast) enters a single router. It tries your pinned connector first, then any other configured connector, then SMTP, and only falls through to PHP mail() as a last resort, warning you the moment it does. One deterministic path for CRM email, campaigns, proactive rules and ticket replies.

TransportPinned
Outbound reply / relay Router picks transport Pinned connector Postmark · preferred Other connectors Mailgun · SendGrid · SES SMTP fallback STARTTLS / SSL PHP mail() · last resort ⚠ fallback warning fires Delivered via pinned connector transport=postmark · 0 fallbacks
Last resortPHP mail() · warned
01

Pinned first

Pin one connector as the preferred outbound default so every send is predictable: agent replies, AI auto-replies, transactional and broadcasts alike.

02

Cascade on failure

If that send fails, the router cascades to your remaining connectors, then SMTP, so a single provider outage never silences your support inbox.

03

Warn on fallback

Only if nothing else is set does it fall through to PHP mail(), and a warning fires the instant it does, because most hosts throttle it.

📨 Beyond support replies

From a single receipt to a whole audience.

Templates & merge tokens Branded HTML with merge tokens like recipient name and a unique link: personalised, on-brand, consistent across every system email.
Per-domain From identity Set the From email and name per workspace or department; connectors override with their own configured identity, DKIM signed for your domain.
Delivery & broadcast logs A 24-hour panel breaks down sent, failed and by-transport; broadcasts keep a full audited history of who sent what.
Bounce & complaint handling Hard bounces raise an email.bounced activity and are auto-skipped in outreach; complaints surface so your sender reputation stays clean.
Polling performance budgeting A wall-clock budget plus per-mailbox caps so a slow AI draft on one busy inbox can never stall the whole sync.
IMAP timeout hardening Connect, read and command timeouts bounded to 8–12s; a dead mail host costs ~20s at most, never an unbounded stall.
SSL certificate validation Certificates validated by default; self-signed certs are a fine-grained, per-mailbox opt-in for the rare internal host.
Header injection defence CRLF and NUL sequences are stripped from every header value before send, blocking SMTP header and recipient injection.
Webhook authenticity Inbound provider webhooks verified by HMAC-SHA256 or Basic Auth, with a 5-minute timestamp window and an unguessable per-connector path.
⚖️ How it compares

A real help desk, not Gmail with labels.

A fair look at where the OpsIQ email channel sits next to the usual shared-inbox tools.

CapabilityShared inbox / Gmail-as-helpdeskOpsIQ
Email → native ticketLabels & threads, not real ticketsBuilt-in
AI drafts grounded in your KB + accountNone / paid add-onCore, included
Approve-then-send draft queueManual / partialEdit · regenerate · send
Unified with chat + tickets + CRMInbox onlyOne workspace
Header thread matching (no dupes)Threads, not ticketsMessage-ID + idempotency
DKIM / SPF / DMARC handled for youDIY DNS / partialRelay + connectors
Transactional + broadcast on same relayDIY / limitedOne signed relay
Bounce & complaint trackingManualTracked + auto-skip
Bring your own provider (SES / Postmark…)n/a / limitedConnector or SMTP
Pricing modelPer-seat / per-mailboxFlat plan
Full feature list

Everything in Email Channel.

Every capability, grouped. ★ marks a stand-out.

FeatureWhat it does
Inbound
IMAP Mailbox Connect ★Gmail, Outlook or cPanel; test the connection live before saving, cron polls every 3 minutes.
Inbound Email → Native Ticket ★Sender resolved, subject becomes the title, body the first reply, attachments inline: one message, one ticket, one timeline.
Sendmail Pipe ReceiverAlias-pipe raw email straight into tickets via your MTA, no MX change required.
Header-Based Thread Matching ★Message-ID, In-Reply-To and References matched so replies thread instead of duplicating.
Inbound Idempotency NEWAtomic Message-ID claim means a double poll never double-ingests the same email.
Attachment IngestionDecoded, stored and displayed inline from multipart MIME; files travel into the ticket.
Department Routing by Recipientsupport@, billing@ and sales@ routed by the To / Cc / Delivered-To headers into the right queue.
Multiple Mailbox SupportMultiple parallel mailboxes (plan-capped: 10 on Growth, up to unlimited on Enterprise): support@, sales@, billing@ side by side, each routed.
Polling Performance Budgeting NEWWall-clock budget plus per-mailbox caps so AI drafts never stall the poll.
IMAP Timeout Hardening NEW8–12s bounded timeouts; a dead host costs ~20s at most, never an unbounded stall.
SSL Certificate Validation Toggle NEWValidated by default; self-signed certs are a per-mailbox opt-in. Secure by default.
AI & replies
AI-Drafted Email Replies ★Grounded in the account and your knowledge base, written in your voice, mode set per workspace.
Email Drafts Queue ★A review page where every pending reply waits: approve-then-send.
Draft Regeneration NEWRe-run the AI with the same context for a fresh take, without losing the thread.
Draft Editing NEWInline tweaks before send: quick edits, no separate composer.
Auto-Reply Mode Control ★Auto-send, draft-first or hands-off, chosen per workspace.
Auto-Reply Suppression (RFC 3834) ★Skips mailers, bounces, no-reply senders and lists; never auto-reply to a daemon.
Per-Sender Auto-Reply Rate Limit NEW3-per-hour cap per sender stops reply loops from broken filters.
Outbound & deliverability
Outbound Email Router ★One send path: pinned connector → other connectors → SMTP → mail() last resort.
Email Connector: MailgunInbound webhook plus the Messages API for outbound relay.
Email Connector: SendGridInbound Parse plus outbound over Basic Auth.
SMTP FallbackSTARTTLS or SSL used automatically when a connector send fails.
Test Email Send NEWFire a live test through the chosen transport to confirm delivery end to end.
DKIM Signing ★Per-message DKIM plus a unique Message-ID so providers trust your mail.
SPF & DMARC Alignment ★Relay and connector domains aligned so authentication passes.
Per-Domain From IdentityGlobal or per-department From identity; connectors can override.
Reply-To Preservation ★In-Reply-To and References preserved so replies land on the same ticket.
Message-ID Minting & Persistence NEWMinted, stored and matched against inbound replies.
Department Signatures NEWPer-department signatures appended to outbound mail automatically.
Header Injection Defence ★ NEWCRLF and NUL stripped from header values to block SMTP header injection.
Multipart MIME NEWtext/html plus attachments: text clients see text, HTML clients see styled.
Attachment Support NEWAttach up to 15 files at 15MB each on outbound replies.
Analytics & logs
24-Hour Delivery Stats NEWSent and failed, broken down by transport, on a live 24-hour dashboard.
Email Audit Log ★ NEWEvery email logged with direction, status, transport and thread, fully auditable.
Transactional & broadcast
Broadcast Email to AgentsSend to all or selected agents; every run is logged.
OpsIQ Writing for Broadcasts NEWCompose broadcasts with the AI Assist writer.
Broadcast History & Audit NEWFull history: who sent what, scope and sent / failed counts.
Transactional EmailResets, 2FA codes, receipts, CSAT and ticket updates over the signed relay.
Compliance & suppression
Email Consent Tracking ★unknown / granted / revoked states block mail to anyone opted out.
Unsubscribe HandlingThe unsubscribe link revokes consent and logs the activity automatically.
Bounce Detection ActivityHard bounces raise an email.bounced activity so you stop sending to bad addresses.
Bounce Impact on Outreach NEWBounced contacts are auto-skipped in sequences and outreach.
Integration, config & security
Email Connector Context Provider NEWMailbox, draft, stats and domain config surfaced to the AI.
Pinned Connector Selection NEWPin one connector as the preferred outbound default.
Mail Fallback Warning NEWWarns the instant OpsIQ has to fall back to PHP mail().
Webhook Signature Verification ★HMAC-SHA256 or Basic Auth blocks forged inbound email.
Webhook Timestamp Validation NEWA 5-minute window blocks replay attacks.
Unique Webhook Paths per Connector NEWUnguessable per-connector paths prevent enumeration.
Allowed Self-Signed Certs (Per-Mailbox) NEWFine-grained opt-in for self-signed certs; secure by default.
FAQ

Questions about the email channel.

Two ways: set a forwarding rule from support@ to your OpsIQ pipe address, or give OpsIQ IMAP credentials to fetch new mail on a schedule. Either way, inbound mail starts becoming tickets immediately, with no MX change required to get started.
Your choice, per workspace. You can have the AI auto-send grounded replies for confident answers, draft replies for an agent to approve in the Email Drafts queue, or stay silent and only suggest. Anything it isn't confident about is handed to a human with full context.
The relay DKIM-signs every outbound message and aligns SPF and DMARC for your sending domain. You add a couple of DNS records once; after that, mailbox providers authenticate your mail and it reaches the inbox. Bounces and complaints are tracked to protect your sender reputation.
No. OpsIQ matches Message-ID, In-Reply-To and References headers (and the requester) so a customer's reply appends to the original ticket. An atomic Message-ID claim makes ingestion idempotent, so even a double poll never double-ingests. New subjects from the same person open a new ticket only when they're genuinely a new request.
Your choice. Pin a Mailgun, SendGrid, Postmark, Resend or Amazon SES connector as the preferred transport, or configure SMTP directly. If a connector send fails, OpsIQ cascades to your other connectors then SMTP, and only falls through to PHP mail() if neither is set, which the Email Settings screen warns you about, because most hosts cap it.
Yes. Add multiple IMAP mailboxes (your plan sets how many: 10 on Growth, up to unlimited on Enterprise): support@, sales@, billing@, each with its own host, folder and the department it routes to. The cron poller checks every enabled box on each tick, and you can also "Poll now" or "Test" a mailbox on demand.
The same authenticated relay carries transactional mail (password resets, 2FA codes, ticket updates, CSAT surveys and invoice receipts) plus broadcasts to your agents or segmented audiences. Each broadcast is logged with its subject, scope and sent / failed counts, and audience sends honour consent and unsubscribe.
Yes. The poller works to a wall-clock budget with per-mailbox caps so a slow inbox never stalls the sync, IMAP timeouts are bounded to 8–12s, header values are stripped of CRLF and NUL to block injection, and inbound provider webhooks are verified by HMAC-SHA256 or Basic Auth with a 5-minute timestamp window and unguessable per-connector paths.