Email channel · piped + grounded

Every email, answered and tracked.

Connect support@, billing@ or an outreach reply inbox and tell each mailbox its job. Support mail becomes a native ticket, CRM replies stay in CRM, automated mail is filtered before it becomes work, and OpsIQ drafts or sends grounded replies on the right thread. Transactional and broadcast email use the same authenticated delivery layer.

Tickets or CRM-onlyAI drafts, you approveA–F domain diagnosticsNo MX change to start
Inbound mail becomes a ticket
AI drafts the reply in your voice
Live support@ → ticket → reply. INBOX · support@ [email protected] Invoice #2291 looks wrong [email protected] Where is my order? [email protected] 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
2mailbox purposes: tickets or CRM-only
📬 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 [email protected] → Billing dept FOLDER · INBOX [email protected] [email protected] [email protected] 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.

Mailbox control plane

Every mailbox knows what work it owns.

Choose support tickets or CRM replies only. Then route the message, notify the people (not the inbound address) and stop newsletters, bounces and automated senders before they pollute the queue.

Email routingExample workspace
Policy live
MAILBOX PURPOSE

Support tickets

Routing enabled
1 · RECEIVECustomer requestIMAP · INBOX · Message-ID kept
2 · ROUTENative ticketBilling department · threaded
3 · NOTIFY3 team membersPrimary admin is the safe fallback

Department address protectedNotifications go to active department members, never back into the polled mailbox.

Loop safe
01

Support becomes accountable work.

Create and thread native tickets, preserve attachments and route by recipient or department policy.

02

Outreach replies stay in CRM.

A dedicated CRM-only mailbox tracks matching replies without creating tickets or sending automatic replies.

03

Direct mailbox threads can still answer.

Mailbox mode can queue, draft or send a grounded reply and stands down after human takeover.

📥 Inbound → native ticket

Every support request becomes a native ticket.

Once a mailbox is set to Support tickets, the ingestor reads an eligible human message, resolves the sender to a contact, opens the ticket and carries attachments inline. Follow-ups thread onto the same ticket. CRM-only and automated mail remain outside the queue by design.

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: [email protected] 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()
Deliverability lab

Grade the domain. Fix the exact record.

Run a read-only DNS diagnosis across SPF, DKIM and DMARC, see whether MX is present, and get copy-ready records for every gap. Beside it, the original designed email stays intact inside a sanitized, script-free sandbox that sizes itself to the message.

Email healthcompany.com
B78 / 100
AUTHENTICATION GRADE

One record from excellent.

Weighted from DMARC, SPF and DKIM, not a decorative score.

SPFPass · 4 of 10 DNS lookups
35 / 35
!
DKIMNo common selector found
12 / 25
DMARCp=quarantine · rua reporting on
40 / 40
i
MX2 receiving hosts found · informational
Present
RECOMMENDED DNS CHANGEDKIM · TXT / CNAME
selector._domainkey.company.com

Publish the exact selector supplied by your sending provider.

INBOUND HTML PREVIEW

Designed email, safely contained.

SanitizedNo scriptsAuto-height
Invoice received · Maria at Acme
ACMEBilling confirmation
PAYMENT RECEIVED

Thanks, Maria.

Your payment for invoice #2291 has been received.

Growth workspace$48.00
Original layout preserved · links open safely
Customer HTML cannot style the OpsIQ interfaceImages and tables remain responsive
🧭 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 serious email channel, not Gmail with labels.

Email Channel owns mailbox purpose, ingestion, replies, rendering and delivery. When a message needs formal case management, it hands the work to OpsIQ Ticket System with the original thread intact.

CapabilityShared inbox / Gmail-as-helpdeskOpsIQ
Mailbox purpose: tickets or CRM-onlyUsually inbox-onlyPer mailbox
Eligible support email → native ticketLabels & threads, not real ticketsBuilt-in
Newsletter / daemon suppressionManual filtersHeader + sender guards
A–F SPF / DKIM / DMARC diagnosisSeparate tool / DIYExact fixes included
Sandboxed designed-email renderingVariesSanitized + auto-height
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.
Per-Mailbox Purpose NEWChoose Support tickets or CRM outreach replies only for every connected mailbox.
CRM-Only Reply Tracking NEWMatching outreach replies stay on the CRM timeline and never create tickets or automatic replies.
Inbound Email → Native Ticket ★Eligible support mail resolves the sender, opens a ticket, adds the body as the first reply and carries attachments inline.
Automated Mail Suppression NEWList-Unsubscribe, List-ID, bulk precedence, campaign headers, no-reply senders and mail daemons are skipped before ticket creation.
Safe Department Notification NEWNew-ticket alerts go to active department members or the primary admin, never back to the department's inbound mailbox.
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.
Sanitized HTML Email Rendering NEWDesigned inbound email renders inside a script-free sandboxed iframe that auto-sizes; its CSS cannot leak into OpsIQ.
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.
Mailbox-Mode Auto Reply NEWDirect mailbox threads can queue, draft or send without opening a ticket; human takeover and per-thread caps still apply.
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.
A–F Domain Authentication Grade NEWRead-only SPF, DKIM and DMARC diagnosis with recursive SPF lookup counting and informational MX detection.
Exact DNS Fix Records NEWCopy-ready SPF, DKIM and DMARC host, type and value recommendations for every detected gap.
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. Set its purpose to Support tickets and eligible customer requests start becoming tickets, with no MX change required.
Yes. Set that mailbox to CRM outreach. Matching replies are recorded on the CRM timeline, while the mailbox never creates support tickets or sends automatic replies. Use this for campaign and sequence reply addresses.
It performs read-only DNS checks for SPF, DKIM and DMARC, counts recursive SPF lookups against the RFC limit, reports MX for receiving context, and calculates a weighted A–F grade. Each gap includes the exact host, record type and copy-ready value needed to fix it.
Yes. Inbound HTML is sanitized and rendered inside a sandboxed iframe with scripts disabled. The frame auto-sizes to its content, images and tables stay responsive, links open separately, and the email's CSS cannot affect the OpsIQ interface.
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.