Outlook Mail
API integration
Ship Email features without building the integration. Full Outlook Mail API access via Proxy, normalized data through Unified APIs, and 30+ MCP-ready tools for AI agents — all extensible to your exact use case.
Talk to usUse Cases
Why integrate with Outlook Mail
Common scenarios for SaaS companies building Outlook Mail integrations for their customers.
Sync email activity into your CRM or revenue platform
SaaS companies building CRM or sales intelligence tools can pull Outlook messages, threads, and metadata into their platform to give reps full visibility into prospect communications — without asking users to BCC or manually log emails.
Automate document ingestion from inbound emails
Expense management, AP automation, and contract lifecycle tools can monitor Outlook folders for incoming attachments like invoices, receipts, or signed documents, then extract and process them automatically using the attachments download endpoint.
Power AI-assisted email drafting and reply workflows
AI productivity and copilot products can read unread messages, generate contextual draft replies via LLMs, and save them directly into the user's Outlook drafts folder — letting the end user review and send with one click.
Convert inbound emails into support tickets or tasks
Helpdesk and project management tools can monitor shared Outlook mail folders, convert new messages into tickets or work items, and send replies back through the user's authenticated Outlook account to maintain thread continuity.
Build folder-based routing and workflow triggers
SaaS platforms can programmatically create custom Outlook folders and child folders, then poll those folders for new messages — enabling end users to trigger workflows simply by moving an email into a designated folder.
What You Can Build
Ship these features with Truto + Outlook Mail
Concrete product features your team can ship faster by leveraging Truto’s Outlook Mail integration instead of building from scratch.
Two-way email sync with thread logging
Mirror Outlook inbox and sent folder activity into your platform and send emails on behalf of the user using their authenticated Outlook account, keeping both systems in sync.
Automated attachment extraction pipeline
List and download attachments from specific messages or folders to feed into OCR, document processing, or file storage workflows without manual user intervention.
Smart draft composer with send-on-review
Create pre-written email drafts in the user's Outlook account using AI or templates, and let the user review and send them natively from Outlook or trigger send via the API.
Custom folder-based inbox routing
Programmatically create mail folders and child folders in a user's Outlook account, then poll those folders for new messages to trigger downstream automations like ticket creation or expense processing.
Org chart and identity resolution from the user directory
Fetch user profiles including job titles, phone numbers, and organizational data via the Unified User Directory API to map corporate identities and permissions inside your SaaS product.
Shared mailbox monitoring for team workflows
List messages across Outlook users and folders to power shared inbox experiences for support, sales, or operations teams — routing emails to the right queue inside your application.
SuperAI
Outlook Mail AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
list_all_outlook_mail_me
Get the profile of the signed-in Outlook user. Returns: id, displayName, userPrincipalName, mail, jobTitle, businessPhones, givenName, surname, mobilePhone, officeLocation, and preferredLanguage. No required parameters.
outlook_list_emails
List Outlook messages for a specific user. Returns: @odata.etag, id, createdDateTime, lastModifiedDateTime, changeKey, categories, receivedDateTime, sentDateTime, hasAttachments, internetMessageId, subject, bodyPreview, importance, parentFolderId, conversationId, isDeliveryReceiptRequested, isReadReceiptRequested, isRead, isDraft, webLink, inferenceClassification, body, sender, from,…
outlook_get_email
Get a single Outlook message by id. Returns: @odata.context, @odata.etag, id, subject, bodyPreview, parentFolderId, body, uniqueBody. Required: user_id, id.
outlook_create_draft
Create a new Outlook message draft for a specific user. Returns the created message including id, subject, body, toRecipients, isDraft, importance, sender, and receivedDateTime. Required: user_id.
outlook_update_email
Update properties of an Outlook message by id. Returns the updated message including id, subject, body, isRead, importance, inferenceClassification, and toRecipients. Required: user_id, id.
outlook_delete_email
Delete an Outlook message by id. Returns an empty 204 response on success. Required: user_id, id.
outlook_send_draft
Send a previously created draft message in Outlook. The sent message is saved in the Sent Items folder. Returns an empty 202 response on success. Required: user_id, message_id.
outlook_send_email
Send a new email message in Outlook via the sendMail action, optionally saving it to Sent Items. The message body can be provided in JSON or MIME format. Returns an empty 202 response on success. Required: user_id, message.
outlook_reply_email
Reply to the sender of an Outlook message, saving the reply in the Sent Items folder. Accepts a comment and optional writable message properties such as toRecipients to add or override recipients. Returns an empty 202 response on success. Required: user_id, message_id.
outlook_reply_all_email
Reply to all recipients of an Outlook message on behalf of a specified user. The original sender and all recipients are included automatically. Returns an empty 202 Accepted response on success. Required: user_id, message_id.
outlook_forward_email
Forward an Outlook message from the connected user mailbox to one or more recipients. Returns an empty 202 Accepted response on success. Required: message_id.
outlook_forward_email_as_user
Forward an Outlook message from a specific user's mailbox to one or more recipients. Returns an empty 202 Accepted response on success. Required: user_id, message_id, toRecipients.
outlook_move_email
Move an Outlook message to a different folder by specifying a destination folder id or well-known folder name. Returns the moved message object including id, subject, receivedDateTime, parentFolderId, body, and toRecipients. Required: user_id, message_id, destinationId.
list_all_outlook_mail_search
Search for content across Outlook entities such as messages and events via the Microsoft Graph search API. Returns: hitId, rank, summary, resource. Required: requests with entityTypes and query. Max 25 results per page.
list_all_outlook_mail_attachments
List attachments for an Outlook message. Returns: @odata.type, id, lastModifiedDateTime, name, contentType, size, isInline, contentId, contentLocation, contentBytes, item.type for each attachment. Required: message_id.
outlook_mail_attachments_download
Download the raw binary contents of a file or item attachment from an Outlook message. Returns the raw binary content stream of the attachment (MIME format for item attachments). Required: message_id, attachment_id. Requesting the $value of a reference attachment returns HTTP 405.
get_single_outlook_mail_attachment_by_id
Get a single attachment from a specific Outlook message, returning its metadata and content. Returns: @odata.context, @odata.type, id, lastModifiedDateTime, name, contentType, size, isInline, contentId, contentLocation, contentBytes, item.context, @odata.type, id, lastModifiedDateTime, name, contentType, size, isInline, contentId, contentLocation, contentBytes, item. Required: message_id, id.
outlook_mail_attachments_download_as_user
Download the raw binary contents of a specific attachment from an Outlook user's message. Returns the raw attachment content as a binary stream — for file attachments the content type matches the original file; for item attachments (contact, event, message) the raw contents are returned in MIME format. Required: user_id, message_id, attachment_id.
outlook_list_mail_folders
List all mail folders in the specified user's Outlook mailbox, including any mail search folders. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, @odata.type, isSupported, filterQuery, includeNestedFolders, sourceFolderIds, sizeInBytes. Required: user_id.
outlook_get_mail_folder
Get a single mail folder in Outlook by id. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, sizeInBytes. Required: user_id, id.
outlook_create_mail_folder
Create a new mail folder in the root folder of the user's Outlook mailbox. Supports regular folders and search folders via @odata.type. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, @odata.type, filterQuery, includeNestedFolders, sourceFolderIds.type, filterQuery, includeNestedFolders, sourceFolderIds. Required: user_id, displayName.
outlook_update_mail_folder
Update the display name of a mail folder or the filter query of a search folder in Outlook. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, @odata.type, filterQuery.type, filterQuery. Required: user_id, id.
outlook_delete_mail_folder
Delete a mail folder in Outlook by id. Returns an empty 204 response on success. Required: user_id, id.
outlook_list_child_folders
List child mail folders under a specified parent folder in Outlook. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, @odata.type, isSupported, includeNestedFolders, sourceFolderIds, filterQuery, sizeInBytes. Required: user_id, mail_folder_id.
outlook_create_child_folder
Create a new child mail folder under the specified parent folder in Outlook. Returns the created folder with id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden. Required: user_id, mail_folder_id, displayName.
outlook_get_child_folder
Get a single child mail folder by id in Outlook. Returns: id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden, @odata.type, isSupported, includeNestedFolders, sourceFolderIds, filterQuery, sizeInBytes. Required: user_id, mail_folder_id, id.
outlook_delete_child_folder
Delete a child mail folder by id in Outlook. Returns an empty 204 response on success. Required: user_id, mail_folder_id, id.
outlook_update_child_folder
Update a child mail folder's properties by id in Outlook. Returns the updated folder with id, displayName, parentFolderId, childFolderCount, unreadItemCount, totalItemCount, isHidden. Required: user_id, mail_folder_id, id.
outlook_list_folder_emails
List messages in a specific Outlook mail folder for a given user, with attachments expanded inline. Returns: @odata.etag, id, createdDateTime, lastModifiedDateTime, changeKey, categories, receivedDateTime, sentDateTime, hasAttachments, internetMessageId, subject, bodyPreview, importance, parentFolderId, conversationId, isDeliveryReceiptRequested, isReadReceiptRequested, isRead, isDraft, webLink,…
list_all_outlook_mail_users
List users in Microsoft Graph. Returns a paged collection of user objects with id, displayName, mail, userPrincipalName, jobTitle, givenName, surname, and other directory profile fields for each user in the tenant. No required parameters.
get_single_outlook_mail_user_by_id
Get a single Outlook (Microsoft Graph) user by id. Returns the user object including id, displayName, givenName, mail, userPrincipalName, and businessPhones. Required: id.
list_all_outlook_mail_subscriptions
List Microsoft Graph webhook subscriptions. Returns: id, resource, applicationId, changeType, clientState, notificationUrl, lifecycleNotificationUrl, expirationDateTime, creatorId, latestSupportedTlsVersion, encryptionCertificate, encryptionCertificateId, includeResourceData, notificationContentType, notificationQueryOptions, notificationUrlAppId. This method does not support OData query…
get_single_outlook_mail_subscription_by_id
Get a single Microsoft Graph webhook subscription by id. Returns: id, resource, applicationId, changeType, clientState, notificationUrl, lifecycleNotificationUrl, expirationDateTime, creatorId, latestSupportedTlsVersion, encryptionCertificate, encryptionCertificateId, includeResourceData, notificationContentType, notificationUrlAppId. Required: id.
create_a_outlook_mail_subscription
Create a Microsoft Graph subscription to receive change notifications when subscribed resources change. Returns the created subscription including id, resource, changeType, notificationUrl, expirationDateTime, applicationId, creatorId, and latestSupportedTlsVersion. Required: changeType, notificationUrl, resource, expirationDateTime.
update_a_outlook_mail_subscription_by_id
Update a Microsoft Graph subscription's expiration time for renewal and/or notification URL for delivery. Returns the updated subscription object including id, resource, changeType, notificationUrl, expirationDateTime, and creatorId. Required: id.
delete_a_outlook_mail_subscription_by_id
Delete a Microsoft Graph subscription by id. Returns an empty 204 response on success. Required: id.
outlook_mail_subscriptions_reauthorize
Reauthorize a Microsoft Graph subscription by triggering a reauthorization validation request to the notification URL. Returns an empty 204 response on success. Required: subscription_id.
Why Truto
Why use Truto’s MCP server for Outlook Mail
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 700+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
Unified APIs
Unified APIs for Outlook Mail
Skip writing code for every integration. Use Truto’s category-specific Unified APIs out of the box or customize the mappings with AI.
Unified Emails API
Attachments
Attachments are the files associated with an email.
Emails
An email is a digital message sent and received electronically over the Internet. It typically contains a subject, sender, recipients, body content, and sometimes attachments.
Folders
The folder is a container used to organize and manage email messages.
Users
Users represent the people using the underlying emails system. They are usually called agents, team members, admins, etc.
Unified Search API
Search
Search endpoint for all the apps.
How It Works
From zero to integrated
Go live with Outlook Mail in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Outlook Mail account
Use Truto’s frontend SDK to connect your customer’s Outlook Mail account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Outlook Mail
Truto’s Proxy API is a 1-to-1 mapping of the Outlook Mail API. You call us, we call Outlook Mail, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Outlook Mail’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Outlook Mail on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
What authentication methods does Truto support for Outlook Mail?
Truto handles OAuth 2.0 authentication with Microsoft, which is the standard auth flow for Outlook Mail via the Microsoft Graph API. Your end users authorize access through a consent screen, and Truto manages token refresh and storage automatically.
Can I send emails from a user's Outlook account, or only read them?
Both. You can send emails directly using the outlook_messages_send_mail endpoint, or create a draft with create_a_outlook_message and then send it with outlook_messages_send_draft. Emails are sent from the authenticated user's actual address.
How does folder-level message polling work?
You can list all mail folders and child folders for a user, then use list_all_outlook_folder_messages to fetch messages from a specific folder. You can also create custom folders and child folders programmatically to set up targeted routing workflows.
Can I download email attachments directly through Truto?
Yes. Use list_all_outlook_attachments to enumerate attachments on a message, then use outlook_attachments_download to retrieve the file content. You can also fetch metadata for a specific attachment using get_single_outlook_attachment_by_id.
What Unified APIs map to Outlook Mail?
Outlook Mail is available through the Unified Emails API (covering Attachments, Emails, Folders, and Users), the Unified User Directory API (covering Me and Users), and the Unified Search API. This means you can swap or add other email providers without changing your integration code.
Does Truto handle pagination and rate limiting for the Microsoft Graph API?
Yes. Truto abstracts away Microsoft Graph API pagination and handles rate limit retries, so you don't need to implement backoff logic or cursor management in your application code.
From the Blog
Outlook Mail integration guides
Deep dives, architecture guides, and practical tutorials for building Outlook Mail integrations.
Outlook Mail
Get Outlook Mail integrated into your app
Our team understands what it takes to make a Outlook Mail integration successful. A short, crisp 30 minute call with folks who understand the problem.