Inky Field Guide

INKY SMTP Field Guide

INKY SMTP Field Guide

INKY SMTP Field Guide

A running reference built from Peter Baldwin's internal SMTP/email training series. Organized by topic, not by date — each new session's Q&A gets folded into the section it belongs to, so this stays a lookup tool instead of a stack of meeting notes.

4 sessions logged 26 reference topics 3 open items for next time Last updated Sep 17, 2026

Attendees so far: James Doucette, Juan Arrazola, Isaac Smith, Daniel Dominguez, Austin Keeler, Hunter Ricks, Alejandro G. Medina, Nathan McCurley, Katherine Granados — hosted by Peter Baldwin (Lead Eng)

Highlighted content with a NEW badge was added from the Sept 17, 2026 session.

Session log

#DateTopics coveredNotes
1 Aug 20, 2026 Quarantine sources, reading headers, ARC, non-standard recipient systems, Google Workspace quirks, MX Toolbox Recurring session confirmed.
2 Aug 27, 2026 SPF, DKIM, and DMARC deep dive (how they're calculated, not just how they appear in headers), MX Toolbox lookups for SPF/DKIM, dashboard metadata/observations tab Next session: hosted content / anti-spam policies — what they do and why customers shouldn't touch them.
3 Sept 3, 2026 Inbound burst detection / subscription attacks, outbound ATO burst detection, dangerous link detection, AutoTask integration, Kaseya One org IDs Pivoted to INKY platform topics per Daniel's request. Next: ATO risk-level thresholds to be documented; hosted content/anti-spam policy deep dive still pending.
4 Sept 17, 2026 INKY dashboard walkthrough (AI recommendations, Threat Center, Admin Center, markup/sanitization settings), allow-list/block-list hygiene, banner types, user-reporting configuration, an Exclaimer + Microsoft transport-rule mail-flow case study, and quarantine-release behavior Pivoted to dashboard & admin workflows. ATO risk-level thresholds and the hosted-content/anti-spam policy deep dive are still pending.

A row gets added here after each future session, then the details are folded into the topics below.

Reference topics

Part I — Email Authentication & Delivery (SMTP)

General mail-auth mechanics, applicable beyond INKY

The three usual culprits: INKY's own anti-spam scoring, Microsoft quarantining independently, and malicious-link/anti-phish policies (the latter tends to be DMARC-related).

How to tell who quarantined it
  • "Quarantined by transport rule" → This was INKY. One of our delivery rules fired based on our SCL banner result and the customer's delivery settings (a transport rule set the SCL to 8/9/10, which maps to quarantine per the customer's config).
  • "Quarantined by anti-spam policy" → Ambiguous by design. Microsoft always lists the first policy on the tenant's list as "the" cause, regardless of which one actually matched — and INKY's policy is usually listed first. In practice this almost always means Microsoft quarantined it themselves, before the mail ever reached INKY.
    • Anti-spam policies are just a mapping ("if mail scores X, do Y") — a policy could send everything to inbox or everything to quarantine regardless of score, and it would still just show up as "anti-spam policy."

Rule of thumb: transport rule → it's us. Anti-spam policy → assume Microsoft, then verify.

How to verify: check the INKY dashboard's quarantine view — it explicitly shows "quarantined by INKY" vs "quarantined by Microsoft" (before ever reaching INKY), plus release status and sender/recipient filters. It's built from a Microsoft Graph API call, so it's easier to read than Microsoft's own quarantine UI. It's our best-guess analysis — notably more accurate recently, but still technically inferred. When unsure, transport-rule attribution is the reliable signal.

Still know how to walk a customer through Microsoft's own quarantine GUI — some metadata is only visible there, not via Graph API or PowerShell, so INKY's dashboard can't surface it either.
A clean pre-INKY header shows
  • To / From / Subject
  • Original sender DKIM signature (intact)
  • Received headers (server-to-server hop path)
  • Authentication-Results — the first real pass/fail signal: SPF pass + IP, DKIM evaluation, DMARC evaluation plus the customer's configured DMARC action (none, quarantine, or reject), and Comp Auth — Microsoft's own composite determination layered on top of SPF/DKIM/DMARC.

A post-INKY header will typically show SPF/DKIM "fail" — INKY breaks the original DKIM signature by adding a banner — but Comp Auth should still show "pass." Reason code 130 = Microsoft's compound-auth code for "passed via ARC."

Escalation talking point: if someone (including an AI tool) reads a post-INKY header, sees DKIM fail, and concludes "INKY broke my authentication" — check Comp Auth first. Comp Auth = pass with reason 130 means Microsoft is treating the mail as if it passed SPF/DKIM/DMARC. It was not quarantined for an authentication failure.

For the full mechanics of how SPF, DKIM, and DMARC are actually calculated — not just how they show up here — see the next three topics.

What it is: a DNS TXT record at the root of the sending domain, listing the hosts/IPs authorized to send mail as that domain. "As that domain" specifically means the domain in the visible From header — not the envelope-from, which can differ.

Reading a simple record

Example from session: merckconstruction.com

  • v=spf1 at the start marks it as an SPF v1 record.
  • An include: statement means "pull in everything defined in that other record" — each include counts as one DNS lookup, no matter how many IPs it ultimately resolves to.
  • A clean, simple record might be nothing but include:spf.protection.outlook.com — meaning only Microsoft's published ranges are authorized senders for that domain.
  • Ends in either -all (hard fail — unmatched senders are a failure) or ~all (soft fail — unmatched senders are a soft failure, not an outright reject). Most receiving systems mostly ignore this in isolation when a DMARC record is present, since DMARC's policy supersedes it.
The 10-lookup hard limit
  • SPF allows a maximum of 10 DNS lookups — a hard limit, no exceptions. This is the single most common reason a record shows up invalid/red in MX Toolbox.
  • Every include: = 1 lookup, regardless of how many IPs it returns. INKY's own exist: record is the same — 1 lookup no matter how many IPs it contains.
  • Lookups nest: an include can point to a record that itself contains more includes, and all of those count toward the same ceiling. Example from session: inky.com's record has 6 top-level lookups, and one of those (an Amazon-related include) nests a 7th lookup inside it.
  • Diagnostic approach when a record is red for "too many lookups": open the base record in MX Toolbox, count the top-level lookups, then open each include in turn and check whether it nests further. Watch especially for duplicates — two different includes that both resolve to the same nested record. include:salesforce.com is a common offender: it resolves to a record containing nothing but another lookup — pure overhead, no IPs of its own.
INKY's exist: record is for outbound mail only
  • It has no effect on inbound mail — inbound mail never carries the customer's own domain as the authenticated sender, since it's coming from outside their organization.
  • Why add it anyway: it keeps outbound headers clean of any visible SPF/DKIM failure. (1) Internal mail routed back out through INKY doesn't get a fresh Microsoft ARC seal on that hop — without INKY in SPF, a customer opening their own internal mail's headers could see a cosmetic fail that alarms admins even though nothing's wrong. (2) It's belt-and-suspenders against non-standards-based recipient systems (Topic 7) that reject on any "fail" string appearing anywhere in the headers, rather than validating only the most recent hop as the standard requires.

What it is: public-key cryptography (the same mechanism behind SSL/TLS certificates), used to create a checksum of the email so the recipient can confirm it wasn't altered in transit. Where SPF verifies the sending server, DKIM verifies the message content — an anti-man-in-the-middle mechanism.

Why INKY mail always shows a DKIM fail on the original signature: adding a banner changes the message body, so it no longer matches the original checksum. Expected — this is exactly why ARC (Topic 6) exists, to carry the original pass-state forward for Microsoft to trust.

Anatomy of a DKIM-Signature header
  • v= — version
  • a= — algorithm, e.g. rsa-sha256
  • c= — canonicalization type, almost always relaxed (tolerant of minor in-transit header reformatting; strict would break on nearly any hop)
  • d= — the signing domain
  • s= — the selector: the name of the DNS record that holds the public key
  • h= — the headers included in the signature calculation (From, Date, Subject, Message-ID, Content-Type, MIME-Version, etc.)
  • bh= — the body hash, calculated separately
  • b= — the actual signature value, calculated from the listed headers + body hash using the sender's private key

Looking up a DKIM public key in MX Toolbox: run a DKIM lookup formatted as selector:domain (e.g., selector2:bpa.ca) — under the hood this just queries <selector>._domainkey.<domain> as a TXT record. MX Toolbox decodes it and confirms validity.

Why there are usually two selectors (commonly selector1/selector2, though the name is arbitrary): key rotation. Mail goes out signed under one selector while the other selector's DNS record is updated to a new key and given time to propagate; once propagated, signing switches over, freeing the first one to be rotated next. Keys rotate periodically without ever risking a mail going out signed by a key that isn't published yet.

What it's for: SPF and DKIM only report pass/fail — neither tells the recipient what to do about a failure. DMARC is the sender's published instruction set for exactly that, via a p= (policy) tag with three levels:

  • p=none — take no special action on a DMARC failure; deliver as normal. Often used deliberately by senders who know their SPF/DKIM isn't fully locked down yet.
  • p=quarantine — quarantine (don't reject) mail that fails DMARC — leaves room for the sender to vouch for a message and have it released.
  • p=reject — reject/NDR mail that fails DMARC outright.

The alignment requirement — this is where most confusion comes from: a DMARC pass requires SPF or DKIM to align with the domain in the visible From header the end user sees — not the envelope-from, and not just whatever domain SPF/DKIM happen to validate against on their own.

Concrete example of a DMARC fail despite SPF and DKIM both passing: a marketing mail sent via SendGrid, addressed as From: joe@bpa.com. DKIM passes for sendgrid.com. SPF passes for sendgrid.com. DMARC still fails, because neither aligns with the visible From domain, bpa.com. This is exactly the pattern behind an INKY "spoofed internal sender" red banner: the metadata tab shows a DKIM pass / SPF pass for the actual sending service, but a DMARC fail because the customer hasn't aligned that service with their own domain.

  • The fix, when the sending service is legitimate: add the service's sending IPs to the domain's SPF record, and ideally add a CNAME record pointing to the key the service uses to sign DKIM — full alignment, not just an SPF pass riding along.

Reminder for customer conversations: SPF/DKIM/DMARC passing only proves the message came from where it claims to have come from — it makes no guarantee about the legitimacy of the sender or the safety of the content. Increasingly sophisticated phishing uses a properly configured, legitimately registered lookalike domain that passes all three checks cleanly. That's exactly why INKY layers additional checks (like newly-registered-domain detection) on top of authentication instead of relying on it alone.

What it's for: preserving original authentication results when a mail is legitimately modified in transit (e.g., INKY adding a banner) — tells the recipient "trust the original results, not what you'd calculate now."

How it works
  • ARC seal = a 3-part signature, added by each trusted intermediary that handles the mail.
  • Includes INKY's domain (inkyfishfence.com), a selector, a body+header hash, and the preserved authentication results to trust.
  • Public-key cryptography, same model as DKIM — INKY signs with a private key; the recipient validates with our public ARC key in DNS.
  • Each handler adds its own seal (i=1, i=2, i=3…) on the way out — ARC forms a chain and, per spec, cannot be broken and restarted.
  • Recipients validate backward from the highest i to i=1; if the whole chain validates, they trust the final preserved results.
  • INKY is listed as a trusted ARC sealer in customer configs, so Microsoft trusts our seal.
Where chains break — common failure mode
  • Outbound mail through multiple non-ARC-aware systems. Example: O365 → INKY (seal 2) → Microsoft (transport rules, seal 3) → a signature tool like Exclaimer that doesn't sign ARC but does modify the body → back to Microsoft → the next seal (4) fails because the intermediate hop wasn't sealed.
  • Downstream ARC-aware systems (e.g., Zix) will decline to add their own seal once they see a broken chain — they'll still deliver normally, just without re-signing ARC.

Does a broken chain cause delivery problems? In theory, no — ARC is proof-of-custody inside a system, not something the recipient is meant to evaluate directly. In practice, some non-standard recipient systems don't follow spec and may still react to a fail.

Symptom: customer sends fine to most destinations, but one specific partner/domain rejects or bounces.

Spec-compliant behavior: the recipient should walk backward through Received headers from the top until it finds the first aligned DKIM pass, and treat that as sufficient for DMARC — regardless of what appears further down (e.g., an earlier broken signature).

What some home-grown gateways actually do: regex the raw headers for "DKIM fail" anywhere in the mail and reject on that match, even when a later valid signature exists.

The Aug 27 SPF/DKIM/DMARC deep dive confirmed the mechanism from the spec side: the standard says a recipient validating DMARC should start at the top of the headers (the most recent hop) and work backward only until it finds a passing SPF or DKIM result for the sending domain — it isn't supposed to keep auditing every hop behind that. Non-standards-based systems that instead regex-scan the entire header block for "fail" are the ones that break this. See Topic 3's note on adding INKY to the customer's SPF record — the direct mitigation for this exact failure mode on outbound mail.

Diagnostic approach
  • Check the recipient domain's MX record in MX Toolbox. Not Microsoft or Google → likely a private/on-prem server, a common source of non-standard handling.
  • Look up who operates the MX — some are standards-following services (Proofpoint/Mimecast-type), others are ad hoc.
  • Get the customer/partner to send you a test message directly; confirm DKIM/SPF/INKY processing all look correct.
  • If our end checks out but delivery still fails to that one destination, the customer needs to contact that recipient — usually (a) they need an allowlist/config change, or (b) the sender has actually been flagged as spam there (more common than expected — be ready for a tough MSP conversation).
INKY-side mitigation (rolled out in the last ~6 months): for outbound mail, INKY now removes the original Microsoft-added DKIM signature before handing mail back, instead of leaving a broken one. Headers now show DKIM: none instead of DKIM: fail — so naive header-regex systems no longer false-positive on INKY-processed outbound mail.

Yahoo and other providers (rolled out roughly 2024) require both SPF and DKIM to pass and be aligned — not just DMARC-via-SPF-alone. Even if SPF passes and DMARC technically passes on that basis, a broken/misaligned DKIM can still get the mail rejected by Yahoo/AOL/Hotmail-style providers.

If a customer reports mail failing specifically to personal Yahoo/AOL addresses (not domains they control), get a test message sent the same failing way and check whether DKIM is passing — that's usually the thread to pull.

Double-disclaimer / broken DKIM
  • Symptom: mail passes SPF (so DMARC technically passes) but fails DKIM — and strict destinations like Yahoo/Gmail reject it because they want both aligned, not just one.
  • Root cause: the customer has a Google-side disclaimer/footer rule in addition to INKY's signature service (or mail routes through Google Groups). Google signs DKIM, mail goes out, comes back through INKY, returns to Google — and Google re-adds its disclaimer a second time, after DKIM was already signed, breaking DKIM.
  • Diagnostic tell: open the actual mail body (not just headers) and look for two identical disclaimers stacked — the signature of this failure mode.
  • Fix: turn off the Google-side disclaimer entirely, use INKY's disclaimer field instead, and retest.
Third-party email clients with Google Workspace
  • When a user sends via a third-party client (Outlook, Thunderbird — not Gmail web/app) over authenticated IMAP/SMTP, Google Workspace does not treat the app/server IP as the sending IP. It stamps the user's personal client IP as the SPF-relevant sender, even though they authenticated normally.
  • This almost always fails SPF, and can lead Google to skip signing DKIM entirely for that message, since the IP isn't in the trusted gateway range.
  • There's an existing INKY KB article (Google section) on this — fix is generally identifying the client's IP (ideally static) and adding it to the customer's inbound gateway allowlist, same as INKY's own sending IPs.
  • Isolation test: ask the customer to resend the same test via Gmail's web client. Different behavior confirms the third-party-client theory.
Google Workspace tends to behave in ways that feel intentionally unfriendly to third-party mail handling — INKY included. Expect this category of issue to recur.

If a customer reports display/formatting issues (broken images, weird layout) specifically in Outlook, ask:

  • What Outlook version — especially old vs. "new Outlook"? Microsoft changed the rendering engine, so behavior can differ purely by client version, unrelated to INKY.
  • Does it render correctly in OWA (web access)? If yes, the issue is isolated to the desktop client's rendering engine.

Legitimate mail shouldn't rely solely on Outlook's proprietary conditional formatting — if a message renders poorly in INKY's quarantine preview (standard HTML rendering) because it used only Outlook-specific formatting, that's a poorly-formed message, not an INKY rendering bug.

Coming down the header block after a mail passes through INKY and O365, in order:

  • Message-ID — one of the most valuable fields for troubleshooting/lookup.
  • Group membership flags (e.g., whether the recipient is in a group that could trigger a banner).
  • X-Microsoft-Antispam (Untrusted) — Microsoft's original analysis from before the mail reached INKY, preserved and marked "untrusted" (not necessarily bad — just "this was the earlier pass").
  • INKY's own SCL score and disposition (e.g., SCL 10 → quarantine).
  • Microsoft's Forefront Antispam Report headers — connecting IP, calculated SCL, category code (e.g., "H" = high confidence spam), directionality, and various undocumented internal codes.
    • Microsoft doesn't publish what most of these codes mean. Some are reverse-engineered by the community — no official list exists. Category and SCL are the most reliably useful fields.

SCL → Microsoft delivery mapping: INKY's O365 transport rules (the first four "delivery rules") read our X-INKY-SCL header and set Microsoft's own SCL accordingly, walking through tiers roughly: quarantine → high-confidence phish → high-confidence spam → spam → inbox. That SCL then combines with the tenant's anti-spam policy to determine final placement.

  • MX Toolbox — roughly 3/4 of Peter's troubleshooting starts here. Use it to check the recipient/sender domain's MX record (Microsoft, Google, or private?), SPF record validity, and DMARC record/policy.
    • A large share of "why is mail being rejected" cases trace back to the other party having a broken or missing SPF/DKIM/DMARC setup — not an INKY issue. Real example: a partner domain ("Brandle Construction") had no SPF record, broken/unsigned DKIM, but did have a DMARC record — that combination alone explained a customer's quarantine complaints. Sender-side problem, not INKY's.
  • Google search for MX ownership — identify who operates a given mail server hostname and whether it's a standards-compliant provider.
  • Get a live test sample — when troubleshooting stalls, ask the customer or failing partner to send a test message directly to you, so you're reading real headers instead of secondhand NDR text.
  • Counting SPF lookups: open the domain's base SPF record, count top-level include: statements, then open each one and check whether it nests further lookups — all nested lookups count toward the same 10-lookup ceiling. Watch for duplicate nested records (two different includes resolving to the same underlying lookup) as the usual culprit when a record is unexpectedly over the limit.
  • DKIM lookups: query a DKIM public key directly with selector:domain (e.g., selector2:bpa.ca) to pull and validate the DNS TXT record — useful when a customer disputes whether their DKIM is actually configured correctly.

The INKY dashboard's Metadata / Observations tab shows what INKY calculated when it first received the mail from Microsoft/Google — origin (external vs. internal), and SPF/DKIM/DMARC pass/fail against the visible From domain. Usually the fastest first stop for a customer complaint:

  • If SPF/DKIM/DMARC all show pass but the mail still got a red banner or looked suspicious, remember authentication only proves sender identity, not legitimacy — see Topic 5's phishing note.
  • If SPF shows none, that's the cue to go check the sending domain's SPF record directly — commonly it's either missing entirely or invalid because it exceeds the 10-lookup limit (see the SPF counting technique above).

Part II — INKY Platform Features

INKY-specific product functionality

What it's for: catching "subscription bomb" / subscription attacks — where an attacker signs a target up for a flood of newsletters and confirmation emails (semi-legitimate sources, real unsubscribe links, so it doesn't look like classic spam). Two motives seen in practice: pure annoyance, or — more insidious — burying a phishing message in the flood so a fatigued user stops scrutinizing incoming mail closely.

Core settings (Analysis tab → burst detection)
  • Burst interval — the sliding time window considered for a burst. Default 300 seconds (5 minutes).
  • Message threshold — how many messages within that window trigger burst mode. This is the setting to tune carefully: too low and normal traffic trips it; too high and it won't catch a real attack.
  • Burst cache duration — how long burst mode stays active after triggering, before reverting to normal. Default 300 seconds (5 minutes).

Recommendation: don't enable this in a customer's first couple of weeks unless there's already a good understanding of their normal mail volume — a large customer with an unfamiliar traffic pattern is the main risk case for false positives. Small teams/MSPs with few users are generally safe to enable early, and can often run tighter thresholds.

Ignore lists (underused but valuable)
  • Sender ignore list — exclude specific senders from burst counting entirely (e.g., a monitoring tool like Datadog that can legitimately fire a burst of alert emails during an incident). Messages from an ignored sender are delivered normally during a burst and don't count toward the threshold calculation at all.
  • Recipient ignore list — the reverse: exclude a specific mailbox that naturally receives high volume (e.g., a shared support/ticketing inbox) from burst detection, so you don't have to raise the threshold for the whole organization just to accommodate one high-traffic mailbox.

What happens during a burst: messages get marked according to the configured action — default is spam (routed to junk), but can instead be set to caution non-spam (yellow "suspicious burst detected" banner) or high confidence spam. Delivery then follows the normal routing rules for whatever classification was chosen, unless overridden to force a specific location (e.g., force junk folder regardless of classification, so the user can go check it once things calm down).

Defaults worth knowing: burst detection ignores internal senders, trusted third-party senders, and known-external senders by default (recommended to leave this on) — mail from anyone already vetted in the dashboard keeps flowing normally even during an active burst.

Real example from session: an MSP complained a customer's mailbox "got flooded" — 2,000 messages arrived in ~25 minutes. Their threshold was 100 messages/5 minutes. What actually happened: the first 100 messages delivered normally, then burst mode kicked in and the remaining ~1,900 went to junk for the ~25–30 minute burst window — the user never saw the flood in their inbox. The Observations tab in the dashboard was how this was confirmed.

Pairs with Gray Mail protection: in that same example, gray mail detection was on (default: caution non-spam), but the customer hadn't set up the actual gray mail rules (create a gray mail folder + auto-move matching messages) — so of the first 100 delivered messages, 90 were tagged gray mail but still landed in the inbox since nothing moved them out. Had the move-rule been configured, the user would only have seen about 10 extra messages total instead of 100. Recommended combo when troubleshooting a subscription-attack complaint: check burst detection settings first, then check whether gray mail detection and the folder-move rule are both actually configured — used together they nearly eliminate the visible impact of a subscription attack.

What it's for: detecting a compromised account by watching for abnormal outbound sending bursts — newer than inbound burst detection, still being actively refined by the product team.

Two modes (plus a combined option)
  • Threshold — works exactly like inbound burst detection: a fixed interval (default 300s, though the session's example used 360s) plus a fixed recipient-count threshold (session example: 10 recipients within the interval) plus a cooldown period.
  • Adaptive — builds a per-sender baseline of normal recipient-sending behavior over a sliding window, and triggers when a specific user significantly exceeds their own normal pattern. Includes a configurable minimum message-count floor (session example: 20 messages/5 minutes) so low-volume users aren't hyper-sensitively flagged the moment they send anything unusual.
  • Threshold + Adaptive (recommended default) — additive: whichever condition trips first fires the burst. Tuning tip: keep the threshold relatively high in this combined mode, so it doesn't clash with legitimate high-volume senders (e.g., a sales team's Salesforce-to-O365 integration that legitimately blasts 100 recipients at a scheduled time) — let adaptive mode do the fine-grained per-user work instead.

Exceptions (in progress): rule-based exclusions are being refined — e.g., "don't count bursts from payroll@example.com" for a sender that legitimately blasts the whole company biweekly and would otherwise trip adaptive mode every pay cycle. Planned future refinement: using INKY's API access to identify a customer's actual mailing lists and automatically exclude mail sent to those lists from burst counting.

Risk levels and resulting action
  • Low risk — admins get notified only; mail delivery is unaffected.
  • Medium risk — the account's mail is quarantined.
  • High risk — the account's mail is discarded outright.
Open question (unresolved as of this session): the exact thresholds/criteria that separate low vs. medium vs. high risk are not currently known or documented on our side — Peter didn't have a confident answer and needs to check with the product team. This is a recurring customer question ("why was this flagged as X and not Y") that support currently can't answer precisely — flagged as something to get documented.

Notifications: who gets notified is defined by the customer's Outbound Protection rules, specifically the ATO enforcement group (falls back to the tenant's default admin/approval group if no dedicated ATO enforcement group is configured). Notified approvers can approve, reject, or release the affected user directly from the notification email — they do not need to be an INKY admin to do this.

Threat Center: shows the full event log for Outbound Protection triggers (ATO bursts, dangerous links, etc.) — subject, recipient, risk level, and the resulting status (e.g., "delivered because approved"). Viewing and acting in the Threat Center itself (beyond just the notification email) requires Policy Admin or higher — an Analyst-level user can see it but can't take action.

Outbound Protection also scans for dangerous links and spam/phishing indicators in outbound mail, independent of burst detection. Both support the same ignore-list pattern as burst detection (specific senders/addresses that should be excluded from that particular scan) — configured per-scanner in the Outbound Protection settings.

Symptom: partners get a "could not be configured" error, or a user-account error, when trying to set up the AutoTask integration.

Root cause (the overwhelming majority of cases): the AutoTask integration must be configured at the root organization level, by a user who is an admin at the root level — not at the "dash customer" (individual customer) level, and not by a user with only an Analyst role. Most failures trace back to someone attempting setup from the wrong org level or without sufficient permissions there.

The diagnostic trap: the org-selector UI can look identical between the root organization and a dash-customer organization when the organization name is long — it gets visually truncated, so a partner's screenshot claiming "I'm at the root, see?" often is not actually showing the root org. Don't trust screenshots at face value — independently verify in the dashboard who is actually listed as an admin at the root organization level before troubleshooting further.

Status: the product team is aware this is confusing and is working on UI improvements — e.g., redirecting users away from the integration screen when they're in a dash-customer org, with clearer messaging that it must be done at the root level.

  • The organization ID is unique, auto-provisioned (pulled directly from Kaseya/Salesforce during account creation), and permanently fixed once set — it cannot be changed, even if the team/license is deleted and recreated from scratch. Once an ID string (e.g., "customer1") has been used, it's retired for good — a recreated license would need a different ID.
  • The organization label (display name), by contrast, can be changed anytime — e.g., after a customer rename or merger — with no restriction.
  • You can search the org selector by either label or ID; searching by ID is more reliable since it's guaranteed unique (labels can be ambiguous or visually truncated — see Topic 16's diagnostic trap).
  • If a Kaseya One org ID was provisioned incorrectly, it can be manually overridden/corrected in the dashboard — that's a distinct action from the permanent-uniqueness rule above (correcting a wrong ID is fine; reusing a retired ID is not possible).
  • Mental model Peter used: think of the ID like a serial number or GUID — a fixed internal identity, not a friendly editable label.

Part III — Dashboard, Admin Workflows & Support Playbook

INKY dashboard walkthrough, configuration deep dives, and a mail-flow troubleshooting case study

New AI Recommendations panel (Overview screen, feature-flagged — internal team has it now, general customer rollout expected the following week): analyzes a tenant's inbound mail and surfaces suggestions in categories like known external senders and allow-list candidates. Gives a confidence level, an impact estimate, and the specific action it's proposing (e.g., "139 messages got marked caution by this filter — apply this exception and they wouldn't be"). Built from aggregate patterns across INKY's whole customer base (what's commonly allowed/blocked, common spoofed-internal-sender tools, etc.), not just this one tenant's history. A consolidated version of the same recommendations also appears under Admin Center once rolled out.

The Overview screen's traffic totals (mail volume graphic, last-10-days total) are the fastest way to check whether a team has any live traffic at all — the first thing to check before deciding whether a team can be cleared out as defunct versus needing a single domain carefully removed from it (the latter takes several more steps).

The Home screen is a newer feature — a setup/tuning checklist (impersonation protection, VIP list, VIP protection, internal name protection, spear-phishing protection, banner/logo setup, etc.) with items crossed off as a tenant completes them. Useful both for self-service admins and as a fast first diagnostic when a customer's real problem is under-configuration rather than a bug — if nothing on this screen is checked off, that's the place to start a tuning conversation.

Threat Center (also on the Overview/dashboard side): shows reported mail (with the reported category, e.g. gray mail vs. spam), message deletions, burst management (which users are in an active burst, and anyone blocked from entering burst by an admin), and Outbound Protection enforcement events (ATO bursts, outbound scanning — see Topic 14).

Summary screen: billable mailbox count, messages processed, platform (O365/Google), team label (editable via the pencil icon), and a "quick status" check. The quick-status spinner is a live check — it queries license/redemption status, API access, domain routing, and installed/verified/protected state in real time, which is why it can take a moment.

Markup settings (banner / sanitization / link-rewrite configuration)
  • Sanitization exceptions and link-rewrite exceptions are separate settings that usually need to be paired. If a sanitization exception is added for a sender whose mail also contains links, a link-rewrite exception must be added too — otherwise rewriting the link requires sanitizing the mail, which overrides (and effectively breaks) the sanitization exception. A pure system-notification sender with no links only needs the sanitization exception; anything with links needs both.
  • "Do not modify message bodies in any other way" option: when checked, and the banner-suppression conditions below it are met, INKY makes zero modifications to that message — no banner, no link rewriting, nothing. Because the body is untouched, the message still passes DKIM (INKY historically used this for Gmail customers in particular). This is the mechanism behind an increasingly common false alarm: some third-party tools (including AI tools) see the absence of any header note and conclude "no modification means it wasn't processed" — when actually it means processing correctly determined no banner was warranted.

Some upstream gateways/SEGs break DKIM in ways that leave no visible fingerprint (no banner, no external tag, no rewritten links) — which can look like it must be INKY's fault when INKY is actually further downstream or not involved yet.

Root cause: a DKIM signature is calculated over a specific, declared set of headers (h= in the signature — typically body, subject, to, from, date, etc.). Some gateways reformat those headers on every message that passes through, independent of any visible content change. Example confirmed in session: Cisco IronPort reformats every To/From header into its own preferred style (adding angle brackets and quotes around the address) regardless of the message's original format — which breaks DKIM if that wasn't already the signing format, with zero other visible trace of modification.

Why the "upstream provider" setting under Routing matters: INKY maintains a per-provider "cheat sheet" of exactly what known upstream systems (IronPort, Proofpoint, Mimecast, etc.) do to headers, so when that provider is declared, INKY can unwind the known transformation and validate against the original pre-transformation state. Some providers (Proofpoint, Mimecast) also add their own headers stating their original SPF/DKIM findings, which INKY can read directly; IronPort does not add such headers, so INKY has to rely purely on the known-transformation cheat sheet to reconstruct the original result. Declaring the correct upstream provider is what makes that reconstruction possible — leaving it unset means INKY can't unwind the transformation and the DKIM evaluation may look broken when the original mail actually validated fine.

  • Link-rewrite bypass/exceptions only affect future mail. Once a link has already been rewritten and delivered, that specific link keeps pointing to INKY's redirect/warning page permanently — adding an exception afterward does not retroactively un-rewrite links already sitting in a mailbox.
  • If a recipient needs access to a link that's already been rewritten and is being blocked, the correct fix is not a rewrite exception — it's to have the message reported as safe. Once any specific email is reported safe and that report is confirmed by an INKY admin or customer admin, the links in that message are reactivated.
  • End-user allow-listing is deliberately narrow. Personal/individual allow-listing (created by an end user via the reporting flow, no admin approval needed) only exists for three categories: gray mail, reported spam, and spam content. Reporting something in any other category (e.g., sensitive content) as "safe" is purely for tracking purposes in the observation portal — it does not change how that category is handled going forward. This is a common source of partner confusion: they mark something safe repeatedly and it keeps recurring, because that category was never one an end user can self-allow-list.
    • Sensitive content specifically is not a "safe/not safe" bucket at all — it falls under caution, non-spam: a warning flag (e.g., the message discusses a password or something financial), not an accusation that the mail is bad. An end user marking it safe has no effect on future scoring.
    • The right fix for sensitive-content fatigue: for a broad, blanket "we get too much of this" complaint, an admin can disable the sensitive-content categories entirely under Customization — but that's a blunt instrument that turns it off tenant-wide. Better approach for a narrow case (e.g., a finance team getting flagged constantly by 10–15 regular vendors): use Analysis → Observations, filter by threat category = sensitive content and by the affected users, identify the small set of recurring senders/domains, and allow-list sensitive content specifically for those senders — leaves the tenant-wide protection intact.
  • First-time-sender allow-listing is not offered as an option, and for good reason: once a sender has sent one message, they're no longer a "first-time sender" for that recipient — so an allow-list entry for that category would never have anything left to match.
    • CC/BCC nuance: if a message is sent to multiple recipients in a single, non-bifurcated SMTP envelope (one message, multiple To/CC), the first-time-sender determination is made once for that delivery. If the message is bifurcated (split into separate individual copies, e.g. via a distribution group), each copy is evaluated independently — first-time-sender applies only to the recipients who have genuinely never received mail from that sender before, not to all of them uniformly.

Reviewing a tenant's allow-list and block-list entries is a good habit whenever "why wasn't this caught" tickets come in — misconfigured entries are a frequent root cause.

  • Wildcard/star allow-list entries are a red flag. An entry like *@domain.com (or similar all-encompassing pattern) means "don't mark this mail with any result category at all" — including malware attachments and dangerous links. Generally discouraged; a scoped allow-list (e.g., "never mark as spam" specifically, rather than blanket) is much safer, even for a trusted partner domain.
  • INKY also flags allow-list entries that don't have DMARC authentication selected — an entry that doesn't require DMARC to pass is inherently easier to spoof against.
  • Common misuse pattern seen in session: using an allow-list entry to patch around a VIP-spoofing false positive, instead of correcting the VIP list itself. Example: a "Spoof VIP" false-positive on a user who legitimately sends from a personal Gmail address in addition to their work address — the correct fix is adding that Gmail address as another entry on that person's VIP list, not creating a separate allow-list workaround. One exception seen as reasonable: excluding a system "no-reply" address (e.g., a Teams-notification sender) from spoof-VIP detection, since capturing every automated system address on the VIP list itself isn't practical.
  • Org-level allow/block list views only show tenant-wide entries by default — toggle to user-specific entries to see what individual end users have personally allow-listed or blocked (commonly gray mail and reported-spam categories, per Topic 21's three-category rule).
  • Block-sender behavior: when an end user or admin blocks a specific sender, that generates a yellow banner with the category "block sender," and the message is routed to Admin Quarantine — deliberately kept as far from the recipient as possible. This shows up explicitly in Observations as a distinct result type, which is a fast way to confirm a ticket is actually about a personal block-list entry rather than a scoring issue.
  • Minimal banners give a short, named category label (e.g., "Danger," "Caution") with no further detail in the banner itself.
  • Micro banners are even sparser — essentially just "Danger" or "Caution" with no category name or explanation at all. Generally the least useful banner type; a common source of support tickets is a partner who can't understand a scoring decision simply because their tenant is on micro banners and never sees INKY's stated reasoning in the first place.
  • Regardless of banner type, clicking "more" → "details" on any banner takes the user to an INKY-generated page that renders the full verbose banner (same content as a "verbose" banner setting) — showing every category and description INKY actually found (e.g., "potential phish," "suspicious URL"), even for a customer using micro banners. The information is always available; it just requires the extra click for non-verbose tenants.
  • When a partner asks "why was this scored this way" without a working link, the fastest path is walking them to the message in Observations directly, rather than trying to reason from a banner category alone — especially important for customers running micro banners, since there's often nothing else for the partner to go on without that lookup.
  • Retention window: default (and recommended) is 3 days — set deliberately so a message that lands Friday afternoon can still be reported the following Monday. Configurable, including down to disabling retention entirely for tenants that don't want any mail retained by INKY, but 3 days is the standard recommendation and shouldn't generally be changed.
  • "Require authentication to report" forces the reporting end user to log in before submitting a report through the submit-reports page — recommended, since it also blocks automated link-scanning tools that click banner links from being able to submit spurious reports.
  • Custom email reporting: lets a tenant specify destination addresses (separately configurable for safe / spam / phish reports) that receive a copy of any reported message — with the original attached when available, or a synthetic text reconstruction (headers, hello string, SPF/DKIM/DMARC results, message ID, etc.) when the original isn't retained. This is the recommended replacement for manual "forward the .eml to our ticketing inbox" workflows — pointing this setting at a ticketing-system address automates what many customers are still doing by hand.
  • "Set the notification email's From header to match the reporting user's address" — spoofs the reported user in the notification mail sent to whatever address is configured above. Exists only because some legacy automated ticketing integrations couldn't be reconfigured to read the reporting user from inside the message body instead of the From header. Strongly discouraged outside that narrow case: it will frequently get blocked by the receiving system's own DMARC alignment checks (unless that mailbox is specifically configured to accept anything, e.g. as a Microsoft "SOC mailbox" with Defender disabled), and even with warnings shown in the UI, admins often don't realize they're enabling sender spoofing when they check this box.

A recurring, generalizable troubleshooting pattern for any customer stacking a signature/disclaimer tool (e.g., Exclaimer) with INKY inside Microsoft Exchange transport rules.

The core mechanic to understand
  • Microsoft evaluates transport rules top-down, and normally evaluates every rule in the stack for a message — a rule doesn't stop evaluation of the rest just because it matched, unless that rule has "stop processing more rules" explicitly set.
  • Header add/remove actions take effect instantly the moment a matching rule is evaluated, regardless of stop-processing.
  • Routing-over-a-connector actions do not take effect immediately — they're more like "the current intent," and a message can only ultimately route over one connector. If a later rule in the stack also matches and sets a different routing connector, the last one that matched wins, overriding any earlier routing intent — unless an earlier rule had "stop processing more rules," in which case nothing after it is ever evaluated.

The failure mode diagnosed in session: an Exclaimer rule sat at priority 0 (top of the stack) without "stop processing more rules." Because of that, every message matched it (tentatively routing to Exclaimer), then continued evaluating every subsequent rule anyway — annotation resets, header changes — until it reached the INKY outbound routing rule much further down the stack, which did have stop-processing set. That INKY rule's routing decision overrode the earlier Exclaimer routing intent, so the message actually went to INKY first. It then came back from INKY and matched the Exclaimer rule again on this second pass — this time nothing later overrode it, so it actually went out to Exclaimer. It came back from Exclaimer a third time, but because it was now arriving from Exclaimer's IPs (not INKY's or the tenant's own), it no longer matched the "deliver to inbox" rules that were supposed to catch it, so it fell through to an ATP scan and landed in the junk folder — with no clear scoring explanation anywhere in the message trace.

The fix: leave the Exclaimer rule at priority 0, but add "stop processing more rules" to it. That way a message hits Exclaimer first (as intended), gets its signature added, comes back into the tenant, and then starts fresh down the rest of the stack — matching the INKY outbound rule cleanly, going out to INKY once, coming back once, and matching the normal inbox-delivery rules without any redundant extra pass through Exclaimer's IPs.

General diagnostic tell: in a Microsoft message trace, when the final entry shows delivery to the junk folder with no explanation at all (no SCL note, no "Defender flagged X," nothing) — that's a strong signal the mail looped through a routing conflict like the one above, rather than a genuine spam/phishing determination. Rule of thumb for any customer combining INKY with another mail-flow tool via connector-based routing: every rule in the stack that routes over a connector should have "stop processing more rules" set, so the routing intent at each hop is unambiguous and traceable directly from the transport-rule stack.
  • "This email was released from quarantine" banner is specific to INKY's own auto-release — added only when INKY itself saw the message sitting in quarantine and issued the release. It is not a general indicator of any release action (e.g., an admin manually releasing from the Microsoft quarantine GUI won't necessarily be visible to INKY, since that's not always reflected clearly through headers).
  • Once Microsoft releases a message from quarantine, Microsoft generally will not accept it back into quarantine on its own — the message gets what's effectively a permanent SCL -1 marking from Microsoft's side after release, and only Microsoft can undo that. INKY can still analyze a released message and add a red banner recommending quarantine, but Microsoft's routing decision from the release generally overrides it. This is expected, deliberate behavior on Microsoft's part — not a gap in INKY's own re-scoring — and prevents an infinite quarantine/release loop.
  • There are three specific exceptions where Microsoft will re-quarantine on its own after a release, regardless of what any earlier release action said: (1) a URL in the message has been separately flagged by Microsoft as phishing, (2) an attachment has been separately flagged by Microsoft as malicious, or (3) the sender is on the tenant's own block-sender list. If any of these three conditions is true, Microsoft re-checks them as the very last step before delivery every time, and an admin clicking "release" repeatedly will just watch the message cycle straight back to quarantine each time.
    • The fix in that situation is not to keep releasing — it's to clear the specific flagged condition: for a flagged link or attachment, use Microsoft's own quarantine GUI to explicitly mark that specific link/attachment safe (which adds it to the tenant allow list), or remove the sender from the tenant block-sender list.
    • This information (which specific link Microsoft flagged, or which attachment) is currently only visible in Microsoft's own quarantine GUI — there is no Graph API or PowerShell equivalent today, so INKY's dashboard cannot surface it either. Microsoft has hinted at a future "threat API" that may expose this, but no committed timeline exists.

Deep dive on hosted content policies and anti-spam policies — what they actually do, and specifically why customers should not modify them once INKY is installed. Quick answer given after session 2: INKY's delivery rules and the installed anti-spam policy are designed to work together — the anti-spam policy defines the scoring buckets, and the customer's delivery-location choices in the INKY dashboard assume that mapping is intact. Modify the anti-spam policy and the two no longer line up. Full breakdown still pending — session 3 pivoted to INKY platform topics per Daniel's request, so this is carried forward again. (Raised by Hunter — he gets frequent customer pushback wanting to know exactly "what will break" if they touch it.)

Related sub-question answered in brief back in session 2: if a customer turns off INKY's delivery rules entirely, mail still gets scored by INKY's anti-spam policy, but without the delivery-rule headers Microsoft doesn't route it to INKY's chosen locations — it falls back to wherever Microsoft's own routing decides.

Still open — Sept 3, 2026. The exact risk-level thresholds (low/medium/high) used by ATO / outbound burst detection (Topic 14) are undocumented on our side — Peter didn't have a confident answer and needs to check with the product team. This is a recurring customer question ("why was this flagged as X and not Y") that support currently can't answer precisely.
  • Still open: SPF flattening services specifically — covered how to count and diagnose over-the-limit SPF lookups (Topics 3 and 12), but not flattening services themselves as a fix. Carried forward from Austin's original ask.
  • Next session: likely more dashboard/admin-workflow topics, or circling back to general SMTP/email-authentication topics, per Peter.
Internal reference — INKY SMTP training series. Built from session recordings; update after each session rather than starting a new document.

Have more questions?

Contact us

Was this article helpful?
0 out of 0 found this helpful

Provide feedback for the Documentation team!

Browse this section