{"id":24198,"date":"2025-05-08T09:44:22","date_gmt":"2025-05-08T16:44:22","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/?p=24198"},"modified":"2025-05-08T09:44:22","modified_gmt":"2025-05-08T16:44:22","slug":"exchange-web-services-code-analyzer-and-usage-report","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/exchange-web-services-code-analyzer-and-usage-report\/","title":{"rendered":"Exchange Web Services code analyzer and usage report"},"content":{"rendered":"<p>We are now less than 18 months away from the retirement of Exchange Web Services (EWS) in Exchange Online, set for October 1, 2026. Since announcing the deprecation, gaps between EWS and Microsoft Graph have been systematically addressed, and more updates are on their way as part of the Secure Future Initiative (SFI). At Microsoft, we\u2019ve already started removing dependencies on EWS within our own apps\u2014a milestone that will be completed this summer. If you haven\u2019t already, it\u2019s critical to start planning your migration from EWS to Microsoft Graph now. Here\u2019s how you can begin.<\/p>\n<h2>Understanding EWS exposure<\/h2>\n<p>To effectively migrate from EWS, the first step is understanding your app portfolio\u2019s exposure to EWS. Applications using EWS rely on specific permissions, and identifying those apps is essential. Fortunately, we offer tools to help with this:<\/p>\n<ul>\n<li><a href=\"https:\/\/aka.ms\/EwsAdminReports\"><strong>Admin center reports<\/strong><\/a><strong>:<\/strong> These reports reveal which apps use EWS, their EWS operation types, and call volumes. They are available on tenants in the worldwide Microsoft 365 cloud.<\/li>\n<li><a href=\"https:\/\/aka.ms\/ewsToolsBlog\"><strong>App usage reports<\/strong><\/a><strong>:<\/strong> These reports can be configured and run on any Microsoft 365 tenant including those on sovereign clouds. These reports provide similar insights into EWS applications with recent activity.<\/li>\n<\/ul>\n<p>Once you\u2019ve compiled a prioritized list of applications using EWS, you can begin analyzing migration paths for each code base.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/image.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-24208\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/image.png\" alt=\"\" width=\"1704\" height=\"1145\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/image.png 1704w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/image-300x202.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/image-1024x688.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/image-768x516.png 768w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/image-1536x1032.png 1536w\" sizes=\"(max-width: 1704px) 100vw, 1704px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<h2>Understanding your migration path<\/h2>\n<p>Migrating your codebase away from EWS will create a more secure posture for your application portfolio. It can also be an opportunity to address architectural deficiencies in your app portfolio and consolidate components using Exchange Online capabilities.<\/p>\n<p>To support developers in that process we released the <a href=\"https:\/\/aka.ms\/ewsToolsBlog\">EWS code analyzer<\/a> as an open-source sample. You can use it as-is to identify references to EWS or extend it to generate bespoke messages and code actions, here is an example:<\/p>\n<p><img decoding=\"async\" width=\"1563\" height=\"991\" class=\"wp-image-24200\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/ews-code-analyzer-message.png\" alt=\"EWS Code Analyzer message\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/ews-code-analyzer-message.png 1563w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/ews-code-analyzer-message-300x190.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/ews-code-analyzer-message-1024x649.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/ews-code-analyzer-message-768x487.png 768w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/ews-code-analyzer-message-1536x974.png 1536w\" sizes=\"(max-width: 1563px) 100vw, 1563px\" \/><\/p>\n<p>In conjunction with GitHub Copilot the tool can suggest alternative implementations with Graph API.<\/p>\n<p><img decoding=\"async\" width=\"1613\" height=\"1024\" class=\"wp-image-24201\" src=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/github-copilot-generates-equivalent-graph-api-code.png\" alt=\"GitHub Copilot generates equivalent Graph API code\" srcset=\"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/github-copilot-generates-equivalent-graph-api-code.png 1613w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/github-copilot-generates-equivalent-graph-api-code-300x190.png 300w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/github-copilot-generates-equivalent-graph-api-code-1024x650.png 1024w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/github-copilot-generates-equivalent-graph-api-code-768x488.png 768w, https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-content\/uploads\/sites\/73\/2025\/05\/github-copilot-generates-equivalent-graph-api-code-1536x975.png 1536w\" sizes=\"(max-width: 1613px) 100vw, 1613px\" \/><\/p>\n<p>We\u2019d love to hear from you in the comments if you have feedback on the approach or how you extended the tools to adapt to your code base and workflow.<\/p>\n<p>While there are still some known parity gaps in Graph API there are many common scenarios that are fully supported. We are frequently updating the roadmap on the <a href=\"https:\/\/aka.ms\/ews1Page\">EWS Deprecation page<\/a> as new capabilities come online. Even if a feature in your app is blocked by a parity gap, we encourage you to migrate as much as you can to identify any additional issues, we may not be aware of.<\/p>\n<p>Considering your application portfolio holistically can also help you identify opportunities to create shared components that encapsulate EWS use cases. Here are actions to consider for migration:<\/p>\n<ul>\n<li>Consider if the business process still requires Exchange capabilities or if the business need can be met using other technologies, such as Microsoft Teams.<\/li>\n<li>Consider moving the application functionality to Power Platform to reduce the effort required for future updates.<\/li>\n<li>Consider refactoring EWS functionality into shared components to streamline migration across multiple applications.<\/li>\n<li>Explore modern architectural patterns, such as modular monolith or microservices, which can make migration smoother and dependency injection to simplify component swapping and insulating the parts of your applications using EWS.<\/li>\n<\/ul>\n<p>Planning the migration path now ensures your apps are ready well in advance of EWS retirement and with enough time to react to limitations.<\/p>\n<h2>Call to action<\/h2>\n<p>Don\u2019t wait for all known gaps to be addressed before starting your migration. Begin the analysis now, map out your path, and implement as much as possible using the available APIs. While Microsoft Graph continues to evolve and close feature gaps with EWS, some unanticipated issues may arise that require time to resolve. By acting early, you can ensure smooth transitions and unlock the powerful capabilities of Microsoft Graph.<\/p>\n<h2>Conclusion<\/h2>\n<p>The retirement of EWS is an opportunity to improve your tenant\u2019s security posture, to modernize your applications and leverage the enhanced features provided by Microsoft Graph. With tools like the Admin Center Reports, App Usage Reports, and EWS Code Analyzer, you have everything you need to understand your exposure, analyze your migration paths, and make informed decisions. Let\u2019s work together toward a seamless migration.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We are less than 18 months away from the retirement of Exchange Web Services. Start planning your migration from EWS to Microsoft Graph.<\/p>\n","protected":false},"author":186837,"featured_media":24204,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3],"tags":[181,146],"class_list":["post-24198","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-microsoft-graph","tag-exchange-web-services","tag-microsoft-graph-api"],"acf":[],"blog_post_summary":"<p>We are less than 18 months away from the retirement of Exchange Web Services. Start planning your migration from EWS to Microsoft Graph.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/24198","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/users\/186837"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/comments?post=24198"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/posts\/24198\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media\/24204"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/media?parent=24198"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/categories?post=24198"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/microsoft365dev\/wp-json\/wp\/v2\/tags?post=24198"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}