Your sales team just dropped a 270-email thread into 'Projects/2024/Q3' — all tagged 'Urgent', all missing attachments from three weeks ago. You need to pull sender names, dates, and attachment counts into Excel *today*. You open Outlook, right-click the folder, and stare at the ribbon. Nothing says 'API'. You Google 'does outlook have an api'. You get 12 blog posts promising 'easy integration' — none tell you which method actually works for your desktop Outlook 2019 install.
The Short Version
Method
Works in Desktop Outlook?
Works in New Outlook (Win)?
Needs Admin Rights?
Realistic Use Case
Microsoft Graph API
No — only via web tokens
Yes (with Azure app)
Yes — tenant admin needed
Syncing 'Clients/Acme Corp' emails to Power BI
Outlook COM Add-in (VBA/C#)
Yes — Outlook 2016/2019/365 classic only
No — blocked in new Outlook
No — user-level install
Auto-tagging emails in 'Archive/2023' on send
MAPI via Redemption or OutlookSpy
Yes — even offline PSTs
No — requires legacy MAPI stack
Yes — local admin for DLL registration
Extracting BCC recipients from 'Projects/2024/Q3' sent items
Outlook Web App + DevTools
N/A — browser only
Yes — same as OWA
No — but violates ToS
Quick scrape of subject lines from 'Clients/Acme Corp'
Method 1: Microsoft Graph API
This is the official, supported API — but it’s not *Outlook’s* API. It’s Microsoft 365’s API that happens to include mail endpoints. You don’t call it from Outlook.exe. You call it from Python, PowerShell, or a web app using OAuth2 tokens.
Go to Azure Portal > App Registrations > New Registration. Name it 'Q3-Email-Reporter'. Under API Permissions, add Mail.Read for your own mailbox or Mail.Read.Shared if you need access to shared folders like 'Clients/Acme Corp'.
The catch? Graph doesn’t see local PST files. It only sees what’s synced to Exchange Online. If your 'Archive/2023' folder lives in a 12 GB PST on drive D:\, Graph returns zero results.
Also: Graph won’t let you read BCC fields. Not even with Mail.ReadBasic. That field is intentionally redacted — a security design choice most devs miss until their report fails.
Use this when your data lives in Exchange Online and you’re building something external: a dashboard, a Slack bot, or a scheduled PowerShell script. Don’t use it if you’re trying to automate inside Outlook itself.
Method 2: Outlook COM Add-in (VBA or C#)
This is the old-school way — and the only way to run code *inside* classic Outlook. Open Outlook 365 or 2019. Press Alt+F11. In the VBA editor, paste this:
Sub ListSubjectLines()
Dim olFolder As Outlook.Folder
Set olFolder = Session.GetDefaultFolder(olFolderInbox).Folders("Projects/2024/Q3")
Dim olItem As Object
For Each olItem In olFolder.Items
Debug.Print olItem.Subject & " | " & olItem.ReceivedTime
Next olItem
End Sub
Run it with F5. You’ll see output in the Immediate Window.
This works in Outlook 2016, 2019, and classic Outlook 365 — but *not* in the new Outlook for Windows (the one launched from the Start menu as 'Outlook'). Microsoft killed COM support there. No warning. No migration path. Just silence.
You’ll find File > Options > Add-Ins > COM Add-ins > Go… — but that dialog does nothing in new Outlook. It’s still there, but inert.
A counterintuitive tip: VBA macros run faster on cached Exchange mode than online mode. Why? Because cached mode loads message headers locally. Try it on 'Clients/Acme Corp' — you’ll get 200 subjects in under 3 seconds. Online mode? 12 seconds.
Limitation: VBA can’t write to protected folders like 'Archive/2023' unless you’ve explicitly granted permission via File > Options > Trust Center > Trust Center Settings > Macro Settings > Enable all macros — which you shouldn’t do. Ever.
Method 3: MAPI via Redemption or OutlookSpy
This is the nuclear option — and the only way to read raw MAPI properties Outlook hides. Want the actual BCC list? The IP address of the sending server? The PR_SENDER_EMAIL_ADDRESS_EX property? This is how.
Download Redemption (redemption.codeplex.com — yes, still hosted on CodePlex). Install the .dll. Then in VBA:
Dim safeItem As Object
Set safeItem = CreateObject("Redemption.RDOMail")
safeItem.Import Outlook.Application.ActiveInspector.CurrentItem.PropertyAccessor.GetProperty(
"http://schemas.microsoft.com/mapi/proptag/0x0E04001F")
Debug.Print safeItem.Bcc
It works on PSTs, OSTs, and Exchange mailboxes — even offline. And it bypasses Outlook’s security prompts. But: you must register the DLL with regsvr32 redemption.dll — and that needs local admin rights. Your IT department will say no.
OutlookSpy (outlookspy.com) is free and shows the same data in a UI. Open it, click 'IMAPISession', then 'GetMessage'. Scroll to 'PR_BCC_EMAIL_ADDRESSES'. There it is — no coding required.
New Outlook blocks both tools. They crash on launch. Classic Outlook? Works fine.
Which Should You Choose?
Your Situation
Pick This
Why
Next Step
You use new Outlook for Windows and need live email data in Excel
Graph API
COM is dead here. Graph is your only supported path.
Register app in Azure, get token, use Invoke-RestMethod in PowerShell
You run Outlook 2019, need to auto-flag emails in 'Projects/2024/Q3'
COM Add-in (VBA)
Fast, local, no Azure setup, runs on send/receive
Paste macro into Alt+F11, assign to Ctrl+Shift+Q
You have a PST with 'Archive/2023', need BCCs or hidden headers
Redemption + VBA
Graph and COM ignore these fields. MAPI doesn’t.
Download Redemption, run regsvr32 as admin, test on one message first
You’re on Mac Outlook or Outlook for iOS
Graph API only
No COM, no MAPI, no VBA — Graph is universal
Use Graph Explorer (developer.microsoft.com/en-us/graph/graph-explorer) to test queries first
You just want to export subject/date from 'Clients/Acme Corp' once
Outlook Web App + Copy/Paste
Skip APIs entirely. Sort by Date, select all, Ctrl+C, paste into Excel.
Use Ctrl+A, Ctrl+C, then in Excel: Alt+H+V+T (Paste Text)
Emily Watson
Emily is an expert in workplace culture and team dynamics. Her articles help professionals navigate interpersonal challenges and build better coworker relationships.