Skip to content

v0.7.0 — Outlook search v2 (multi-term, word matching, sender, EntryID) + new outlook get

Choose a tag to compare

@KenM76 KenM76 released this 08 Jun 16:54
· 8 commits to main since this release

Implements FR_outlook_search_v2_multiterm_sender_match_and_get.md in full on both Windows and macOS. All 6 items shipped.

Breaking change in outlook search output: matched, entryid, storeid columns are now always emitted (no longer flag-gated), and defaults changed where the old default was wrong. Wrappers built against v0.6.x output need their column expectations updated.

Why withdraw v0.4.0 behavior

The v0.4.0 search was single-term, substring-only, subject/body-only, since-only, no EntryID. The FR documented a real "cast a wide net" task (a Gasspring.ca US$313.89 order across two mailboxes) where every one of those gaps blocked progress — including pdac matching inside a base64 URL blob to surface a Sudbury meal newsletter as a "hit." Modern marketing mail makes that systematic, not accidental.

Defaults changed (FR § "What I'd ship instead")

Setting Old New Why
--match implicit substring word (ci_phrasematch + LIKE+regex fallback) substring is just wrong for marketing mail
--fields subject,body subject,body,from sender search is what you usually want
EntryID/StoreID flag-gated always emitted connects search → get without a flag

Added — outlook search v2

  • Multi-term --query (repeatable + comma-separated)
  • --fields from (sender display name + SMTP address)
  • --match word|substring (word default uses ci_phrasematch with auto-fallback for non-indexed stores)
  • --until yyyy-MM-dd (closed date window with --since)
  • matched column (per-hit term attribution)
  • entryid + storeid columns (always)

Added — outlook get (new command)

combridge outlook get --id <EntryID> [--store <substr>] [--headers] [--html] <out>
combridge outlook get --subject <substr> [--store <substr>] [--folder <substr>] [--max N] <out>

Headers + [BODY] + optional [HTMLBODY] + attachments list.

Live-verified

The FR's exact Gasspring scenario, against live mailboxes:

combridge outlook search --query "ace control,acecontrols,313.89,gasspring,forklift,spring" \
    --match word --since 2026-02-01 --until 2026-03-31 --snippet  /tmp/gasspring.tsv
  • 14 hits vs the FR's 4,412-hit substring flood (99.7% noise reduction)
  • First hit = Your Gasspring.ca order WS14080CA has been received!, matched=313.89,gasspring,spring
  • outlook get --id <EntryID> --store toprops --headers then returned headers + the MountingDrawing_WS14080CA_8-19-160_8880.pdf attachment + line items + Total: US$313.89

Mac parity

Both OlMacSearchCommand and new OlMacGetCommand ship with the same flag surface and column shape. AppleScript whose is substring-only (no ci_phrasematch), so word-mode always uses the C#-side \bterm\b regex post-filter. EntryID column is the integer AppleScript exposes; StoreID column reuses account name (Mac Outlook has no StoreID concept) — cross-OS schema compatibility preserved. Still classic Outlook for Mac only (not the 2024+ Catalyst "New Outlook").

See CHANGELOG.md v0.7.0 entry for full implementation detail.