Skip to content
ABRQ DATADocs Abrq DIP · latest
Product page Request a trial
On this page

Email ingestion (inboxes and feeds)

What email ingestion does#

Some data arrives as an attachment on a recurring email — a daily CSV from a supplier, a weekly export from a partner system. Abrq DIP turns that into a managed pipeline with two resources:

  • Inboxes — the IMAP mailboxes Abrq DIP polls. One inbox can serve many feeds.
  • Email feeds — a per-sender agreement: messages from this sender, with this subject, carrying a file in this format, land in this table, and are expected on this cadence. If a feed goes quiet past its grace period, Abrq DIP raises an overdue reminder.

The split matters: credentials and polling live on the inbox; matching, mapping, destination, and the delivery SLA live on the feed.

Before you begin#

  • Licensed feature: email. Without the entitlement the nav item is hidden. See Entitlements.
  • Role. A viewer can read inboxes, feeds, runs, and logs. An editor is required to create, edit, test, or delete either resource.
  • A mailbox. Host, port, username, and password for an IMAP account. Only the imap protocol is supported — POP3 and Exchange Web Services are not.
  • A destination connectorPostgres or MySQL. See Data connectors.
  • A sample file matching what the sender actually attaches. You upload it during the wizard to infer columns; it is parsed in memory and never stored.

Step 1 — Add an inbox#

Field Notes
Name Identifies the inbox in feed pickers and logs.
IMAP host For example imap.example.com.
Port Default 993 (implicit TLS).
Username Usually the full email address.
Password Write-only. On edit the field shows "Leave blank to keep existing" — an empty value keeps the stored password.
Mailbox folder Default INBOX. Sub-folders are supported, for example INBOX/Suppliers.
Use SSL On by default. Leave it on.
Active When on, the inbox is polled every minute.

Passwords are encrypted at rest — see Secrets and encryption.

Tip. If your mail provider requires an app-specific password or OAuth-only access for regular sign-in, generate an app password for this inbox rather than reusing a human's credentials.

Test the connection#

Test poll runs one synchronous poll and reports counts:

Counter Meaning
seen Messages the poll looked at.
processed Messages matched to a feed and ingested.
skipped Already-processed messages, dropped by the dedupe check.
unmatched Messages no feed's sender/subject filters matched.
errors Messages that failed while being processed.

Use it to verify two different things: that the credentials work at all (seen is greater than zero), and that routing works (processed grows rather than unmatched).

Deleting an inbox#

An inbox with feeds attached cannot be deleted. You will see:

inbox has N active feed(s); deactivate them or repoint them before deleting

Deactivate the feeds, or point them at another inbox, and retry.

Step 2 — Create an email feed#

The feed wizard has two steps.

Step 1 — Identify and map#

Field Notes
Inbox The mailbox this feed watches.
Sender pattern + match Match on Exact email (data@example.com) or Domain match (example.com, any sender at that domain).
Subject pattern + match Exact match, Starts with, or Contains.
File format CSV, TSV, or Delimited text (.txt). A .txt file requires an explicit delimiter.
Header row Whether the first row holds column names.
Bad-data policy Skip and count rejected rows, or fail the run.
Schema-drift policy Rescue, Evolve, or Reject — see Schema drift policies.

Then upload a sample file. Abrq DIP parses it in memory to infer the column names and types, shows them for review, and discards the file — sample files are never stored.

Metadata columns

You can add columns that are not in the file at all. Each one is stamped on every row of every delivery:

Metadata column Value
File name The attachment's filename.
Sender email The address the message came from.
Subject The message subject line.
Captured (received) date When the message was received.
Inserted date When the row was written to the destination.
Message ID The RFC 5322 message identifier — useful for tracing a row back to one email.
Static value A constant you type, for example a source-system label.

Step 2 — Destination and schedule#

Field Notes
Destination connector Postgres or MySQL only.
Destination FQN Schema-qualified, for example raw.supplier_daily. Created on first delivery.
Expected cadence 6h, 12h, daily, semi-weekly, weekly, or bi-weekly.
Grace period 30 minutes to 3 days. Wizard default: 8 hours.
Reminder channel (optional) Webhook, Slack, Discord, MS Teams, or Email.
Reminder target The URL or address for the chosen channel.

Note. The connector error text mentions other engines, but the effective gate is postgres or mysql. Any other source engine will be rejected on save regardless of what the message lists.

How the overdue SLA works#

The cadence and grace period define a delivery contract, and the reminder is what tells you it was broken.

  • A reminder fires once last_received_at + expected_interval + grace has passed. If nothing has ever arrived, the feed's creation time stands in for last_received_at, so a feed that never receives a first file still alerts.
  • One reminder per breach. The feed does not re-notify every poll.
  • The breach is cleared on the next successful delivery, which re-arms the reminder for the following cycle.
  • last_received_at is stamped only if the delivery succeeded. A file that arrived but failed to load does not reset the clock — a broken feed keeps reminding you instead of going quiet.

Reminder settings are all-or-nothing:

reminder_kind and reminder_target must be set together (or both omitted to disable reminders)

Editing a feed#

Columns can be de-selected, but never added, after the feed exists:

cannot add new columns to an existing email feed (destination table is already created)… Delete and recreate the feed to change the schema.

The destination table is created from the feed's column list, so widening it means a new table. Plan the column set — including metadata columns — before you save.

Sender and subject patterns, policies, cadence, grace, and reminder settings can all be changed in place.

Logs and testing#

The Logs dialog shows per-delivery detail and carries Test feed now, which polls the feed's parent inbox immediately rather than waiting for the next minute-tick. Because it polls the whole inbox, other feeds on the same inbox may pick up messages during the same test.

When patterns are wrong, the dialog says so directly:

Messages were seen but none matched any feed's filters

That message means the connection is fine and the routing is not. Compare the real sender address and subject line against your patterns — a Contains subject match and a Domain match sender are the usual fix for senders whose subject lines carry a changing date.

Field reference#

Field Resource Values / default
IMAP host / Port Inbox Port default 993.
Username / Password Inbox Password is write-only; blank keeps existing.
Mailbox folder Inbox Default INBOX; sub-folders supported.
Use SSL Inbox Default on.
Active Inbox Polled every minute when on.
Protocol Inbox imap only.
Sender match Feed Exact email, Domain match.
Subject match Feed Exact match, Starts with, Contains.
File format Feed CSV, TSV, Delimited text (.txt + explicit delimiter).
Header row Feed Toggle.
Bad-data policy Feed Skip and count, or fail the run.
Schema-drift policy Feed Rescue, Evolve, Reject.
Metadata columns Feed File name, Sender email, Subject, Captured date, Inserted date, Message ID, Static value.
Destination connector / FQN Feed Postgres or MySQL; schema-qualified.
Expected cadence Feed 6h, 12h, daily, semi-weekly, weekly, bi-weekly.
Grace period Feed 30 min – 3 days; wizard default 8 hours.
Reminder kind / target Feed Webhook, Slack, Discord, MS Teams, Email — both or neither.

Failure modes#

What you see Cause Fix
inbox has N active feed(s); deactivate them or repoint them before deleting The inbox still has feeds. Deactivate or repoint them first.
reminder_kind and reminder_target must be set together (or both omitted to disable reminders) One half of the reminder pair is filled in. Fill both, or clear both.
cannot add new columns to an existing email feed (destination table is already created)… Delete and recreate the feed to change the schema. You tried to widen a live feed's schema. Delete and recreate the feed with the full column set.
Messages were seen but none matched any feed's filters Sender/subject patterns do not match reality. Loosen to Domain match / Contains, then tighten.
Test poll reports seen: 0 Wrong folder, or the mailbox is genuinely empty. Check the Mailbox folder value, including sub-folder spelling.
Test poll reports only skipped The messages were already processed — dedupe is working. Send a fresh test message.
Feed reminder never fires No reminder channel is configured, or the feed is inactive. Set both reminder fields and confirm the inbox is Active.
Feed reminder fires repeatedly Deliveries are failing, so last_received_at is never stamped. Check the run errors — the file is arriving but not loading.