Skip to main content

How to Configure Microsoft Graph API for Email in Dynamics 365 Finance & Operations


Meta Description: Learn how to replace SMTP with Microsoft Graph API in D365FO. A step-by-step guide to Azure App Registration, API permissions (Mail.Send), and Email Parameter setup.


Introduction

With Microsoft moving towards modern authentication, the traditional SMTP setup in Dynamics 365 Finance & Operations is being phased out. Using Microsoft Graph API is now the standard for sending secure, reliable emails.

In this post, I will walk you through the technical configuration required to bridge Azure Active Directory (Entra ID) and D365FO.

Phase 1: Azure Portal Configuration

The first step is creating a secure entry point in the Azure Portal. (You must have admin rights on Azure Portal)

  1. App Registration: Create a new registration named DemoMails. (Write your own name)



  2. Credentials: Note down the Application (Client) ID


  3. API Permissions: This is the most crucial part. You must add Application Permissions for Mail.Send under Microsoft Graph.

    • Crucial Step: Don't forget to click "Grant Admin Consent". Without this, your D365FO environment will return a Not Authorized error.





4. Client Secret: Generate a new secret and copy the Value immediately.

Phase 2: D365FO System Administration

Now, we link the Azure App to your Dynamics environment.

  1. Navigate to Parameters: Go to System administration > Setup > Email > Email parameters


  2. Enable Provider: Move Graph to the 'Enabled' interactive providers list.


  3. Authentication Settings: In the Microsoft Graph settings tab, input your Application ID and Client Secret.


Phase 3: Testing & Validation

Use the Test email tab to verify the connection. Select the 'Graph' provider and send a test mail to your inbox.


Summary & Full Discussion

Transitioning to Microsoft Graph API not only improves security but also eliminates the common "Basic Auth" issues found in SMTP.

Original Article Link: https://www.linkedin.com/pulse/integrating-microsoft-graph-d365fo-seamless-email-faizan-arshad-ozgpf

Popular posts from this blog

Consuming an External REST API in Dynamics 365 Finance & Operations (X++) and Saving Data into a Custom Table

  Introduction In this blog, I will explain how I consumed an online REST API in Microsoft Dynamics 365 Finance & Operations (D365 FO) using X++ and CLR Interop , deserialized the JSON response using Data Contract classes , and finally stored the data in a custom table . This is a common real-world integration scenario where external systems expose data via REST APIs and D365 FO needs to consume and persist that data. For this demo, I used the following public REST API : API URL: https://api.restful-api.dev/objects Solution Overview The solution consists of four X++ classes : MZNFRConsumeRestAPI – Main logic class (API call, deserialization, DB insert) MZNFRConsumeRestAPIParentContract – Parent contract (wraps JSON list) MZNFRConsumeRestAPIHeaderContract – Header contract (id, name) MZNFRConsumeRestAPILinesContract – Child contract (nested data node) 📌 Class Structure Diagram API Response Structure The API returns a JSON array like this: [ { ...

How to Create a Custom Data Entity in Dynamics 365 Finance and Operations

  Creating a Data Entity in Dynamics 365 Finance and Operations (D365FO) is essential for enabling data import/export, integrations, and public APIs. In this blog, we’ll walk through both the basic shortcut method and the advanced method for creating a custom Data Entity, using a table named MZNFRCustomTable as our example. 🧩 Step 1: Create a Custom Table Start by creating a new table in your project. Go to Solution Explorer → Right-click your project → Add New Item Select Table under FinanceOperations > Data Model Name it MZNFRCustomTable 🧱 Step 2: Add Fields to Your Table Define the fields you need in your table. For example: CustomerAccount CustomerName Currency PaymentNote Balance  Step 3: Shortcut Method – Create Data Entity via Addins Right-click on your table → Addins → Create Data Entity This method is quick but limited in customization. ❗ Common Error If you haven’t created an index, you’ll get this error: "The natural key for the table MZNFRCusto...

Modified Field Method in X++

  In Dynamics 365 Finance and Operations, user experience is everything. If a user enters an ItemId , they shouldn't have to manually type the ItemName . We can automate this using the modifiedField override on the table level. The ModifiedField  method is a kernel method that triggers after a field's value has been changed. It's the perfect place to put logic for fetching related data or resetting dependent fields. The Implementation On your custom table MNZFRSalesLine , you will override the  ModifiedField  method. We use a switch  statement on the _fieldId parameter to ensure our code only runs when the ItemId is the field being touched. public void modifiedField(FieldId _fieldId) { super(_fieldId); switch (_fieldId) { case fieldNum(MNZFRSalesLine, ItemId): if (this.ItemId) { // Fetch the Item Name using the InventTable find method // inventTable.itemName() is a common helper method ...