Frappe Fab Graph Mail

Frappe app to support mail management via Microsoft Graph API

Install Frappe Fab Graph Mail

bench get-app https://github.com/fabricatorsltd/frappe-fab-graph-mail

Add the Frappe Gems badge to your README

Maintain Frappe Fab Graph Mail? Paste this into your README:

[![Listed on Frappe Gems](https://frappegems.com/api/method/frappe_gems.seo.badge?app=fabricatorsltd%2Ffrappe-fab-graph-mail)](https://frappegems.com/gems/apps/fabricatorsltd/frappe-fab-graph-mail)

About Frappe Fab Graph Mail

Fab Graph Mail

Receive Frappe / Helpdesk email through the Microsoft Graph API using an app-only (client-credentials) identity, instead of IMAP.

Microsoft keeps restricting IMAP/POP and basic auth on Exchange Online. Graph is the supported path for unattended mailbox access. This app fetches the raw message from Graph and feeds it into Frappe's existing inbound pipeline (InboundMail.process()), so threading, deduplication, attachments and target document creation (HD Ticket via append_to) behave exactly as with IMAP. Graph is only the transport.

Requirements

  • An Azure app registration with the Microsoft Graph application permission Mail.ReadWrite, admin consent granted. No redirect URI (client-credentials). No New-ServicePrincipal / mailbox PowerShell needed (that is the IMAP path).
  • A Frappe Connected App holding the app's client_id, client_secret and the tenant token_uri. The Connected App's own scope is irrelevant: the client requests https://graph.microsoft.com/.default explicitly, so one app registration can also serve other integrations.

Configuration

On the target Email Account:

  • Connected App: the Connected App above.
  • Receive via Microsoft Graph: on.
  • Enable Incoming: off, so the core IMAP scheduler ignores the account.
  • Append To: the target doctype (e.g. HD Ticket).
  • Email Address: the mailbox to poll (shared mailboxes work, no licence required).

Graph Delta Link is maintained automatically; clear it to re-sync from scratch.

How it runs

A scheduled job (*/5) polls every Graph-enabled Email Account with a Graph delta query, so only changed messages are fetched. The delta cursor advances only when every message in the batch was ingested; failures are isolated per message and retried next run, and Frappe's Message-ID dedup makes reprocessing safe. Outbound mail is out of scope: send through a normal SMTP account or relay.

Documentation

docs/operator-guide.md -- Azure app, Connected App, Email Account, and why Graph is used instead of IMAP.

Installation

cd $PATH_TO_YOUR_BENCH
bench get-app $URL_OF_THIS_REPO --branch version-16-fab
bench install-app fab_graph_mail

License

agpl-3.0

Related Integrations apps for Frappe & ERPNext

  • Insights — Open Source Business Intelligence Tool
  • Raven — Simple, open source team messaging platform
  • Frappe Whatsapp — WhatsApp cloud integration for frappe
  • Frappe Assistant Core — Infrastructure that connects LLMs to ERPNext. Frappe Assistant Core works with the Model Context Protocol (MCP) to expose ERPNext functionality to any compatible Language Model
  • Biometric Attendance Sync Tool — A simple tool for syncing Biometric Attendance data with your ERPNext server
  • Frappe React Sdk — React hooks for Frappe
  • Frappe Js Sdk — TypeScript/JavaScript library for Frappe REST API
  • Mcp — Frappe MCP allows Frappe apps to function as MCP servers