Outlook to Webhook

Forward every Outlook email to your endpoint as structured JSON — headers, body, and attachments included. No polling, no MIME parsing, no infrastructure to maintain.

Table of Contents
  1. Why Route Outlook Emails to a Webhook?
  2. How to Forward Outlook to JsonHook
  3. Outlook vs Microsoft Graph API
  4. JSON Payload Example
  5. Common Outlook to Webhook Use Cases

Why Route Outlook Emails to a Webhook?

Microsoft Outlook is the email client and service used by hundreds of millions of enterprise and consumer users through Microsoft 365 and Outlook.com. While Outlook is a capable email platform, its native tooling for programmatic automation was not built for developers who need structured, reliable data delivery to backend systems.

The native approach — Microsoft Graph API — introduces significant operational overhead. You need to manage credentials, poll or maintain persistent connections, and write custom parsing logic for every message field you care about. When your team is moving fast, that friction adds up to hours of maintenance per integration.

JsonHook eliminates that overhead by accepting inbound mail on your behalf and immediately firing a structured JSON payload to any HTTPS endpoint you specify. The email is parsed, attachments are base64-encoded, and headers are normalised — so your webhook handler can focus entirely on business logic rather than MIME parsing.

Below are the core benefits of routing your Outlook messages through JsonHook instead of relying on the native alternative:

  • Limitation avoided: The Microsoft Graph API requires registering an Azure AD app, managing OAuth token refresh, and maintaining a change notification subscription — all ongoing operational overhead.
  • Limitation avoided: Microsoft Graph's change notifications deliver only a notification reference, not the full message; a second API call is required to fetch the email body and attachments.
  • Limitation avoided: Graph API subscriptions expire after 4,230 minutes and must be renewed programmatically, creating a maintenance burden.
  • Zero-polling architecture: JsonHook pushes to your endpoint the moment mail arrives — no long-running background jobs needed.
  • Automatic attachment handling: PDFs, images, and other file types are extracted, base64-encoded, and included in the JSON payload with their original MIME type.
  • Retry with exponential back-off: If your endpoint is temporarily unavailable, JsonHook retries automatically — something the Microsoft Graph API does not do natively.
  • Webhook signatures for security: Every delivery includes an HMAC-SHA256 signature header so you can verify the payload originated from JsonHook.

Whether you are building a support-ticket ingestion pipeline, a lead-capture workflow, or an automated document processor, JsonHook gives you a consistent, typed interface to Outlook messages without the fragility of raw SMTP or polling-based API integrations.

How to Forward Outlook to JsonHook

Getting Outlook emails delivered to your webhook takes about five minutes. The process has two parts: creating a JsonHook address via the API, and configuring Outlook to forward a copy of each incoming message to that address.

  1. Log in to Outlook.com or open Outlook within your Microsoft 365 account and go to Settings › View all Outlook settings.
  2. Navigate to Mail › Forwarding and enable Enable forwarding.
  3. Enter your JsonHook inbound address in the forwarding field and optionally check Keep a copy of forwarded messages.
  4. For Microsoft 365 shared mailboxes or Exchange Server environments, an admin can configure mail flow rules in the Exchange Admin Center to forward messages matching specific conditions to your JsonHook address.

Once forwarding is active, every email that arrives in your Outlook inbox (or matches your filter) will be relayed to your JsonHook address, parsed, and delivered to your endpoint as a JSON payload within seconds.

You can create your JsonHook inbound address with a single curl command. Replace YOUR_API_KEY with the key from your dashboard and set webhookUrl to your endpoint:

curl -X POST https://jsonhook.com/api/addresses \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "label": "Outlook inbound",
    "webhookUrl": "https://your-app.example.com/webhooks/email",
    "secret": "a-random-signing-secret"
  }'

The response includes your unique @in.jsonhook.com address. Copy that address and paste it into the forwarding field in your Outlook settings. That is all the infrastructure you need to stand up.

Start Receiving Outlook Webhooks in 5 Minutes

Free tier: 100 emails/month, 1 address. No credit card required.

Get Free API Key

Outlook vs Microsoft Graph API

When developers first explore email-to-webhook automation they typically discover Microsoft Graph API — the official programmatic route provided by Microsoft. The table below shows how it compares to using JsonHook as an intermediary.

Feature Outlook Native (Microsoft Graph API) JsonHook
Structured JSON payload
Attachment parsing
Retry logic
Webhook signatures
Setup time Hours to days Under 5 minutes

The native approach through Microsoft Graph API requires you to set up OAuth credentials or API keys, maintain a long-running listener or polling job, write your own MIME parser, and implement your own retry queue. Any one of those steps can become a reliability bottleneck in production.

JsonHook handles all of that infrastructure on your behalf. You get a single HTTPS webhook call with a predictable JSON schema every time a Outlook email arrives — no polling, no credential rotation, no MIME parsing, and no bespoke retry code to maintain.

JSON Payload Example

When a Outlook email is forwarded to your JsonHook address and delivered to your endpoint, the request body looks like the following. All fields are consistently present; optional fields such as htmlBody and attachments are included when the source message contains them.

{
  "id": "msg_01j8xkr4p2vn3q7w",
  "receivedAt": "2026-03-15T14:32:07.412Z",
  "from": {
    "name": "Alice Smith",
    "address": "[email protected]"
  },
  "to": [
    {
      "name": "",
      "address": "[email protected]"
    }
  ],
  "subject": "Your Outlook message subject here",
  "textBody": "Plain-text content of the email body.",
  "htmlBody": "<div>HTML version of the email body.</div>",
  "headers": {
    "message-id": "<[email protected]>",
    "x-mailer": "Microsoft",
    "mime-version": "1.0"
  },
  "attachments": [
    {
      "filename": "document.pdf",
      "contentType": "application/pdf",
      "size": 84234,
      "content": "JVBERi0xLjQK..."
    }
  ],
  "spf": "pass",
  "dkim": "pass"
}

The id field is a unique, stable identifier you can use for idempotent processing. The spf and dkim fields reflect the authentication results JsonHook observed when receiving the message, which you can use to enforce additional trust policies in your handler.

Attachment content is standard base64. Decode it with a single call in any language — Buffer.from(att.content, 'base64') in Node.js, base64.b64decode(att.content) in Python, and so on.

A Python Flask handler for Outlook emails delivered via JsonHook:

import hmac, hashlib, os, json
from flask import Flask, request, abort

app = Flask(__name__)
SECRET = os.environ['JSONHOOK_SECRET'].encode()

@app.route('/webhooks/email', methods=['POST'])
def handle_email():
    sig = request.headers.get('X-JsonHook-Signature', '')
    body = request.get_data()
    expected = hmac.new(SECRET, body, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(sig, expected):
        abort(401)

    data = request.json
    print(f"Outlook message from {data['from']['address']}: {data['subject']}")
    for att in data.get('attachments', []):
        print(f"  Attachment: {att['filename']} ({att['size']} bytes)")
    return 'ok', 200

Common Outlook to Webhook Use Cases

Outlook and the broader Microsoft 365 ecosystem are the dominant email platform in enterprise environments. Routing Outlook messages through a webhook bridges the gap between legacy email workflows and modern API-driven systems without requiring deep Microsoft Graph API integration.

  • Enterprise ticket routing: Forward customer or internal support emails arriving in a shared Outlook mailbox to a webhook that creates tickets in Jira, Zendesk, or a custom help-desk system — no manual triage needed.
  • Purchase order automation: Finance teams that receive POs via email can forward them to a JsonHook address, triggering an automated intake pipeline that parses line items and updates ERP records.
  • Compliance audit trails: Route emails from regulated distribution lists through a webhook to a logging service that persists every message to an immutable audit store in real time.
  • HR onboarding triggers: When HR systems send onboarding notification emails to an Outlook inbox, intercept them via webhook to automatically provision accounts, send welcome messages, or kick off onboarding workflows.

Frequently Asked Questions

Can I forward Outlook emails to a webhook?
Yes. Outlook supports email forwarding rules that let you relay a copy of any incoming message to an external address. By forwarding to your JsonHook @in.jsonhook.com address, those messages are immediately parsed and delivered as a JSON POST to your webhook endpoint — no polling required.
Does JsonHook parse Outlook attachments?
Yes. Every attachment in a forwarded Outlook message is extracted from the MIME envelope, base64-encoded, and included in the attachments array of the JSON payload. Each entry contains the original filename, MIME content type, file size in bytes, and the base64-encoded content string. You can decode it with a single line in any language.
How fast does Outlook forwarding work?
End-to-end delivery is near real-time. Once Outlook forwards the message to your JsonHook inbound address, JsonHook parses and dispatches the webhook within a few seconds. The main variable is how quickly Outlook itself applies your forwarding rule after a message arrives — this is typically instantaneous for filters and a few seconds for rule-based forwarding.
Does JsonHook work with Microsoft 365 shared mailboxes?
Yes. A Microsoft 365 admin can configure a mail flow rule in the Exchange Admin Center to forward copies of all messages received by a shared mailbox to your JsonHook inbound address. This works for shared mailboxes, distribution groups, and individual accounts alike.