Microsoft Graph and EWS Managed API compatibility

This matrix describes the current package, not every operation Microsoft Graph could support. A report match is a starting point; test your real request options and application before switching.

Verified scenarios reviewed September 30, 2026. Microsoft Graph Outlook support overview ↗

Support policy: We will support every EWS operation that has a production-supported Microsoft Graph equivalent. As each operation is implemented and tested, we will add it to the current coverage matrix. The only external wait is for Microsoft to provide a production-supported Graph API where one does not exist yet.
Verified documented scenario compared with live EWSReview implemented with a known behavior difference or limited validationNot in package Graph may support the operation, but the current package does notGraph gap no supported Microsoft Graph API is available
AreaStatus
Find and read mailVerified scenarios against live EWSSupported since v1.0.0
Send, reply, forward (also meeting responses and forwarded calendar items)Verified scenarios against live EWSSupported since v1.0.0
Attachments on mail, calendar items and tasks, including large uploads (up to 150 MB)Verified scenarios against live EWSSupported since v1.0.0
Update, move, copy, delete (also contacts, tasks and calendar items); foldersVerified scenarios against live EWSSupported since v1.0.0
Extended properties, search filters, sort, pagingVerified scenarios against live EWSSupported since v1.0.0
Grouped FindItem and SeekToCondition pagingVerified scenarios against live EWSSupported since v1.0.0
MarkAllItemsAsReadVerified scenarios against live EWSSupported since v1.0.0
Conversations (FindConversation, GetConversationItems, ApplyConversationAction)Verified scenarios against live EWSSupported since v1.0.0
Sync (SyncFolderItems in mail, calendar, contacts and tasks folders; SyncFolderHierarchy)Verified scenarios against live EWSSupported since v1.0.0
App-only auth with certificate, impersonation, shared mailboxesVerified scenarios against live EWSSupported since v1.0.0
Hybrid: on-premises mailboxes keep using EWSTested with a simulated on-premises serverSupported since v1.0.0
Calendar, meetings and free/busyVerified scenarios against live EWSSupported since v1.0.0
Contacts: find, read, create, update, delete and foldersVerified scenarios against live EWSSupported since v1.0.0
Notes and Journal itemsVerified scenarios against live EWSSupported since v1.0.0
Autodiscover (AutodiscoverUrl, GetUserSettings, GetDomainSettings), answered from Microsoft GraphVerified scenarios against live EWSSupported since v1.0.0
Inbox rules (GetInboxRules, UpdateInboxRules)Verified scenarios against live EWSSupported since v1.0.0
GetPasswordExpirationDate and GetPeopleInsights (same responses as Exchange Online)Verified scenarios against live EWSSupported since v1.0.0
Pull and streaming notifications (mail, calendar, contacts, tasks)Verified with differencesSupported since v1.0.0
Push notificationsTested with a local listenerSupported since v1.0.0
MIME read, create, send and .eml importVerified with documented differencesSupported since v1.0.0
ResolveNames, ConvertId, ExpandDLVerified; ExpandDL partly testedSupported since v1.0.0
Calendar folders: create, rename, share, deleteVerified with documented differencesSupported since v1.0.0
Recurring meeting invitations and occurrencesVerified with documented differencesSupported since v1.0.0
Meeting time suggestions (SuggestionsViewOptions)Verified with documented differencesSupported since v1.0.0
Contact groups: read and ExpandDLVerified with documented differencesSupported since v1.0.0
Posts (PostItem, PostReplyItem)Verified with documented differencesSupported since v1.0.0
Retention tags on items and folders (PolicyTag, ArchiveTag)Verified with documented differencesSupported since v1.0.0
Further properties: IconIndex, VotingInformation, EnhancedLocation, ConferenceType, ChangeHighlights, ConflictingMeetings, AdjacentMeetings, TextBody, MimeContentUTF8Verified with documented differencesSupported since v1.0.0
Out-of-office settingsVerified with documented differencesSupported since v1.0.0
Tasks (through Microsoft To Do)Verified with documented differencesSupported since v1.0.0
People search (FindPeople) in contacts and the directoryVerified with documented differencesSupported since v1.0.0
Search foldersVerified with documented differencesSupported since v1.0.0
User photos (GetUserPhoto, SetUserPhoto)Verified with documented differencesSupported since v1.0.0
Contact pictures (SetContactPicture, GetContactPictureAttachment, RemoveContactPicture, HasPicture)Verified with documented differencesSupported since v1.0.0
Delegates (GetDelegate, AddDelegate, UpdateDelegate, RemoveDelegate): calendar delegationVerified with documented differencesSupported since v1.0.0
User configuration: CategoryList and WorkHoursVerified with documented differencesSupported since v1.0.0
MarkAsJunk (moves the item; sender lists stay unchanged)Verified with documented differencesSupported since v1.0.0
Custom UserConfiguration objects, folder permissions other than calendars, online archive, junk sender lists, writing contact groups, contact file attachments, add-ins, message encryption (OME) settings, the retention tag list, MimeContent of calendar items and contacts, Unified Messaging, eDiscovery, GetUnifiedGroupUnseenCount, SetUnifiedGroupLastVisitedTimeNo Microsoft Graph v1.0 API
GetUserUnifiedGroupsEWS Managed API cannot read the Exchange Online response
Public folders in Exchange OnlineNo Microsoft Graph API

Current package gaps are different from Graph gaps

Contacts, tasks, inbox rules and out-of-office settings are not in the current package. Microsoft Graph already has APIs for contacts ↗, tasks ↗, inbox message rules ↗ and automatic replies ↗. These are implementation and validation gaps in Sunsetless and will be supported after implementation and testing.

MarkAllItemsAsRead is also not in the current package. Graph v1.0 lets an app update a message's isRead value one message at a time ↗; the bulk folder action ↗ is currently beta, which Microsoft says is not supported for production. We will implement the production-supported route and document any behavior difference.

For in-place archive mailboxes, Microsoft's Outlook mail API overview ↗ says those mailboxes are not supported. Microsoft separately documents mailbox import/export APIs for archive data ↗; that is a narrower workflow than general Outlook mail access, so check whether it matches your EWS calls.

Public folders

Microsoft Graph has no API for Exchange Online public folders, so Sunsetless EWS cannot translate these calls today. On-premises public folders can continue to use EWS in a hybrid setup.

Archive mailboxes

The Outlook mail API used for mail and calendar calls does not access in-place archive mailboxes. Microsoft also documents separate Graph import/export APIs for specific archive data workflows; those are not a general EWS replacement.

Streaming notifications

The bridge uses Graph delta polling. Pull and streaming paths are tested, but events reflect net changes between polls.

Search

Microsoft Graph caps $search results for mail messages at 1,000. Check whether your query and paging strategy depend on a larger result set.

Throttling

The package limits concurrent requests per mailbox and respects Graph throttling responses. Confirm limits against your own workload and current Microsoft guidance.

Known differences to test

  • Folder listings and hierarchy sync from the mailbox root show folders of all kinds with the optional MailboxFolder.Read.All permission; without it, mail folders only. Listings under Calendar, Contacts and Tasks always work.
  • Folders created through Sunsetless EWS get the class IPF.Note, like folders Outlook creates. EWS leaves it empty when the application sets none.
  • Opening another mailbox through a FolderId follows the app's Graph permissions, not the impersonated user's delegate rights. One setting makes Sunsetless EWS refuse it the way EWS does.
  • A SyncState saved from real EWS cannot be continued: after the switch, your app runs one full sync.
  • In calendar, contacts and tasks folders, SyncFolderItems keeps a snapshot in the SyncState (about 40 bytes per item) and reads the folder on each call, because Graph v1.0 has no delta for them.
  • Notifications show net changes between polls: an item created and deleted between checks produces no event, and a hard delete arrives as a delete where Exchange reports a move to Recoverable Items. Subscriptions live in your application process: resuming one from a watermark returns ErrorInvalidWatermark, as with an expired EWS subscription, so the app subscribes again and catches up through SyncFolderItems.
  • Some meeting changes cannot honor SendToNone because Graph always notifies attendees; the library returns a clear error.
  • Other people's free/busy comes at FreeBusy level (times, no subjects), like Exchange's default sharing.
  • Out-of-office: AllowExternalOof always reads "All" (an admin setting Graph does not expose), and the reply language is not kept.
  • Inbox rules: conditions and actions Graph lacks (WithinDateRange, FromConnectedAccounts, ItemClasses, MessageClassifications, SendSMSAlertToRecipients, ServerReplyWithMessage) are refused with ErrorInboxRulesValidationError.
  • Moving and copying contacts, tasks and calendar items uses Graph mailbox export and import (optional MailboxItem.ImportExport.All permission); without it, these calls return a clear error. System contact folders such as Recipient Cache are not visible.
  • Tasks run on Microsoft To Do. Size, PercentComplete, work and billing fields are read through the mailbox API (optional MailboxItem.Read.All permission). PercentComplete can be written only as 0 or 100, and Sensitivity, work, billing and extended properties cannot be written: a clear error instead of silent loss.
  • FindPeople: each contact is its own persona (Graph does not show Exchange's persona links), and persona IDs are the library's own stable IDs.
  • Search folders: the change key changes when the criteria change; EWS keeps it.
  • User photos: Graph scales the photo to the requested size; EWS returned the stored size. SetUserPhoto works with ProfilePhoto.ReadWrite.All, although Exchange Online refuses it for app-only access.
  • Delegates: Graph knows only the calendar part of delegation, so delegate permissions to other folders return a clear error.
  • User configuration: only CategoryList and WorkHours; an application's own configuration objects return a clear error.
  • MarkAsJunk moves the item but leaves the blocked and safe senders lists unchanged: Microsoft Graph v1.0 has no API for them. A call that only changes the lists fails with a clear error.
  • Sorting by subject: Graph ignores RE: and FW: prefixes, EWS does not.
  • Contact groups are read-only: creating, changing or deleting one returns a clear error, because Graph cannot delete them.
  • Retention tags: after a change through the library, RetentionDate appears only once Exchange computes it, because Graph does not know tag periods.
  • Enhanced location: attendees get the invitation from the first save, without the location annotation and source, which the library writes in a second save.
  • Properties Exchange Online leaves empty for applications (Mentions, Hashtags, Likers and similar) are empty here too; NormalizedBody returns an error.
  • Task attachments: Microsoft To Do keeps files only, so attaching an item to a task returns a clear error.
  • Posts are created from a message saved through Graph: they are larger, and the folder briefly shows that message too.
  • Series invitations: AppointmentSequenceNumber is one higher, because Graph saves a meeting before sending it.
  • Responses to meetings refer to the invitation in InReplyTo and References, where EWS refers to the calendar item.
  • Meeting time suggestions are rated like Exchange does; equally good slots outside working hours may come in a different order.
  • Operations without a Graph equivalent return the same error code that Exchange Online gives applications, with the reason from the library.

Target platforms and mailboxes

  • .NET Framework 4.8
  • .NET 8, 9 and 10
  • Exchange Online
  • Exchange Server (hybrid)

Only calls for Exchange Online route to Microsoft Graph. On-premises Exchange continues to use EWS. This does not make unsupported EWS operations available in the package.