Reference
Source code
<?xml version="1.0" encoding="utf-8"?>
<ApiConfig Name="Outlook Mail (Office 365)"
Desc="Read and write Microsoft Outlook Mail (Office 365) data effortlessly. Send, manage, and sync messages, attachments, and folders — almost no coding required."
Slug="outlook-mail-connector"
Id="8b5786b9-5dee-4420-8b12-8a7058d63148"
Logo="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAJYAAACWCAYAAAA8AXHiAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFyWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4gPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNy4yLWMwMDAgNzkuMWI2NWE3OSwgMjAyMi8wNi8xMy0xNzo0NjoxNCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RFdnQ9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZUV2ZW50IyIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIiB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIzLjUgKFdpbmRvd3MpIiB4bXA6Q3JlYXRlRGF0ZT0iMjAyMy0wMy0xM1QxMTowNjoyNS0wNDowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMy0wMy0xM1QxMTowNjoyNS0wNDowMCIgeG1wOk1vZGlmeURhdGU9IjIwMjMtMDMtMTNUMTE6MDY6MjUtMDQ6MDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6Zjk5ODFmN2YtZGEzZS0xOTQ2LWFlNGQtZmEyNTgyODE2Yjk5IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6OTZlOTE5OTctMjlkMS02ZjQxLWFjNDAt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"
Version="5"
EngineVersion="11">
<VersionHistory>
<Change Ver="5" Date="2025-12-12" Type="Fix">Fixed an issue with download_message_attachments EndPoint where saving multiple email attachments could generate duplicate or malformed file names when `contentId` was missing.</Change>
<Change Ver="4" Date="2025-09-05" Type="New">Added new endpoints get_groups and get_group to read Group data (For exising users update your app scopes in Azure Portal, configure additional scope on connection UI, re-generate token)</Change>
<Change Ver="4" Date="2025-09-05" Type="Fix">Clicking on MailFolderId parameter may throw error 400 bad request (due to /users/users twice in the URL)</Change>
<Change Ver="4" Date="2025-09-05" Type="New">Added a new endpoint download_message to download Message as *.eml file (RFC 822 / MIME) by Message Id, User Id and Mailbox Folder Id.</Change>
<Change Ver="4" Date="2025-09-05" Type="New">Added a new endpoint get_message_binary to read Message as *.eml file (RFC 822 / MIME) by Message Id, User Id and Mailbox Folder Id.</Change>
<Change Ver="4" Date="2025-09-05" Type="New">Added a new endpoint download_messages_by_search to download Messages as *.eml file (RFC 822 / MIME) by User / Folder / Search conditions.</Change>
<Change Ver="4" Date="2025-09-05" Type="New">Added a new endpoint get_messages_by_search_binary to read Messages as *.eml file (RFC 822 / MIME) by User / Folder / Search conditions.</Change>
<Change Ver="4" Date="2025-09-05" Type="New">Added a new endpoint delete_messages_by_search to delete multiple messages (bulk operation) by User / Folder / Search conditions.</Change>
<Change Ver="4" Date="2025-09-05" Type="New">Added a new endpoint delete_message to delete message by Message Id.</Change>
<Change Ver="4" Date="2025-09-05" Type="Fix">Changed UniqueBodyContent datatype to DT_NTEXT.</Change>
<Change Ver="3" Date="2024-12-20" Type="New">Added "UserId" parameter to "User Credentials" and "Application Credentials" authentications.</Change>
<Change Ver="3" Date="2024-12-20" Type="Fix">Updated the default value for parameter "Scope" to "https://graph.microsoft.com/.default" in Application Credentials authentication.</Change>
<Change Ver="3" Date="2024-12-20" Type="Fix">Made "ReturnUrl" parameter required and set it to "https://zappysys.com/oauth" by default in User Credentials authentication.</Change>
<Change Ver="3" Date="2024-12-20" Type="Modified">Updated help links, auth descriptions, and auth instructions with images.</Change>
<Change Ver="2" Date="2024-06-24" Type="New">Lookup operation might fail if you query Users or other Objects by ID becuase its passing general OData options in URL (e.g. $top)</Change>
<Change Ver="2" Date="2024-06-24" Type="New">New endpoint download_message_attachments to get multiple attachments by search condition</Change>
<Change Ver="2" Date="2024-06-24" Type="New">Allow to get messages from a specific folder for get_messages and get_my_messages endpoints</Change>
<Change Ver="2" Date="2024-06-24" Type="Fix">Updated datatypes for some endpoint columns (previously they were all string types)</Change>
<Change Ver="1" Date="2023-03-28" Type="New">Initial version</Change>
</VersionHistory>
<ServiceUrls>
<ServiceUrl Name="Microsoft Graph API v1.0" Url="https://graph.microsoft.com/v1.0" />
</ServiceUrls>
<Auths>
<Auth Type="OAuth" Name="UserCreds" Label="User Credentials"
Desc="Use delegated access (User Credentials) whenever you want to let a signed-in user work with their own resources or resources they can access.
Whether it's an admin setting up policies for their entire organization or a user deleting an email in their inbox,
all scenarios involving user actions should use delegated access."
HelpLink="https://learn.microsoft.com/en-us/entra/identity-platform/delegated-access-primer"
ConnStr="Provider=Custom;OAuthVersion=OAuth2;GrantType=Default;Scope=[$Scope$];ScopeSeparator={space};"
TestEndPoint="get_my_info">
<Params>
<Param Name="AuthUrl"
Label="Authorization URL"
Required="True"
Options="For Single-Tenant Use=https://login.microsoftonline.com/{ENTER-TENANT-ID-HERE}/oauth2/v2.0/authorize;For Multi-Tenant Use=https://login.microsoftonline.com/common/oauth2/v2.0/authorize" />
<Param Name="TokenUrl" Label="Token URL"
Required="True"
Options="For Single-Tenant Use=https://login.microsoftonline.com/{ENTER-TENANT-ID-HERE}/oauth2/v2.0/token;For Multi-Tenant Use=https://login.microsoftonline.com/common/oauth2/v2.0/token"
HelpLink="https://docs.microsoft.com/en-us/graph/auth-register-app-v2"/>
<Param Name="ClientId" Label="Client ID" Required="True" HelpLink="https://docs.microsoft.com/en-us/graph/auth-register-app-v2" />
<Param Name="ClientSecret" Label="Client Secret" Secret="True"/>
<Param Name="RefreshTokenFilePath" Label="Refresh Token File Path" Hidden="True" Desc="If you cant fit long refresh token in ConnectionString from your program then use this. Supply three properties in json format (i.e. save this in file { "access_token": "YOUR_ACCESS_TOKEN", "refresh_token": "YOUR_REFRESH_TOKEN", "expires_in": 3600 } )"/>
<Param Name="Scope"
Required="True"
Options="offline_access;email;Mail.Read;Mail.Read.Shared;Mail.ReadBasic;Mail.ReadBasic.Shared;openid;profile;User.Read;User.ReadBasic.All;Group.Read.All;Mail.ReadWrite;Mail.ReadWrite.Shared;Mail.Send;Mail.Send.Shared"
MultiSelectSeparator=" "
MultiSelect="True"
Value="offline_access~email~Mail.Read~Mail.Read.Shared~Mail.ReadBasic~Mail.ReadBasic.Shared~openid~profile~User.Read~User.ReadBasic.All~Group.Read.All~Mail.ReadWrite~Mail.ReadWrite.Shared~Mail.Send~Mail.Send.Shared~"
Desc="Permissions you want to use."
Example="offline_access~email~Mail.Read~Mail.Read.Shared~Mail.ReadBasic~Mail.ReadBasic.Shared~openid~profile~User.Read~User.ReadBasic.All~Group.Read.All~Mail.ReadWrite~Mail.ReadWrite.Shared~Mail.Send~Mail.Send.Shared~"
HelpLink="https://learn.microsoft.com/en-us/graph/permissions-reference"/>
<Param Name="ReturnUrl" Required="True" Label="Return URL" Value="https://zappysys.com/oauth" Options="https://zappysys.com/oauth" />
<Param Name="ExtraAttributesForAuthRequest"
Label="Login Prompt Option"
Options="None=;Force login prompt=prompt=login;Force permission select=prompt=consent;"
Desc="Choose this if you want to force login prompt or permission prompt."
HelpLink="https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-auth-code-flow"/>
<Param Name="UserId"
Template="UserIdParam"
Label="Default User Id (Select after clicking **Generate Token**)"
Value="me"
OptionsExtra="My user=me"
Required="False"/>
<!--below not exposed as root level property in HTTP Connection so use as placeholder-->
<Param Name="RetryMode" Value="RetryWhenStatusCodeMatch" Options="None;RetryAny;RetryWhenStatusCodeMatch;" Hidden="True" />
<Param Name="RetryStatusCodeList" Value="429|503" Hidden="True" />
<Param Name="RetryCountMax" Value="5" Hidden="True" />
<Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />
</Params>
<Notes>
<![CDATA[<p>Follow these simple steps below to create Microsoft Entra ID application with delegated access:<p/>
<div class="alert alert-warning">
<strong>WARNING</strong>:
If you are planning to automate processes, we recommend that you use a <em>Application Credentials</em> authentication method.
In case, you still need to use <em>User Credentials</em>, then make sure you use a system/generic account (e.g. <code>automation@my-company.com</code>).
When you use a personal account which is tied to a specific employee profile and that employee leaves the company,
the token may become invalid and any automated processes using that token will start to fail.
</div>
<ol>
<li>
Navigate to the <a target="_blank" href="https://portal.azure.com/#home">Azure Portal</a> and log in using your credentials.
</li>
<li>
Access <a target="_blank" href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview">Microsoft Entra ID</a>.
</li>
<li>
Register a new application by going to
<a target="_blank" href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps">App registrations</a>
and clicking on <strong>New registration</strong> button:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/start-new-app-registration-in-microsoft-entra-id.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Start new app registration in Microsoft Entra ID"
title="Starting new app registration in Microsoft Entra ID"
width="1000"
height="490" />
<div class="alert alert-info">
<strong>INFO:</strong>
Find more information on how to register an application in <a target="_blank" href="https://docs.microsoft.com/en-us/graph/auth-register-app-v2">Graph API reference</a>.
</div>
</li>
<li>
When configuration window opens, configure these fields:
<ul>
<li>
<strong>Supported account type</strong>
<ul>
<li>Use <code>Accounts in this organizational directory only</code>, if you need access to data in your organization only.</li>
</ul>
</li>
</li>
<li>
<strong>Redirect URI</strong>:
<ul>
<li>Set the type to <code>Public client/native (mobile & desktop)</code>.</li>
<li>Use <code>https://zappysys.com/oauth</code> as the URL.</li>
</ul>
</li>
</ul>
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/register-app-in-microsoft-entra-id.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Register app in Microsoft Entra ID"
title="Registering app in Microsoft Entra ID"
width="1000"
height="840" />
</li>
<li>
After registering the app, copy the <strong>Application (client) ID</strong> for later:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/copy-client-id-of-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Copy client ID of Microsoft Entra ID app"
title="Copying client ID of Microsoft Entra ID app"
width="1000"
height="560" />
</li>
<li>
Then copy <strong>OAuth authorization endpoint (v2)</strong> & <strong>OAuth token endpoint (v2) URLs</strong> to use later in the configuration:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/copy-auth-and-token-urls-in-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Copy Auth and Token URLs in Microsoft Entra ID app"
title="Copying Auth and Token URLs in Microsoft Entra ID app"
width="1000"
height="560" />
</li>
<li>
Now go to SSIS package or ODBC data source and use the copied values in <strong>User Credentials</strong> authentication configuration:
<ul>
<li>In the <strong>Authorization URL</strong> field paste the <strong>OAuth authorization endpoint (v2) URL</strong> value you copied in the previous step.</li>
<li>In the <strong>Token URL</strong> field paste the <strong>OAuth token endpoint (v2) URL</strong> value you copied in the previous step.</li>
<li>In the <strong>Client ID</strong> field paste the <strong>Application (client) ID</strong> value you copied in the previous step.</li>
<li>
In the <strong>Scope</strong> field use the default value or select individual scopes, e.g.:
<ul>
<li>
<code>email</code>
</li>
<li>
<code>offline_access</code>
</li>
<li>
<code>openid</code>
</li>
<li>
<code>profile</code>
</li>
<li>
<code>Mail.Read</code>
</li>
<li>
<code>Mail.Read.Shared</code>
</li>
<li>
<code>Mail.ReadBasic</code>
</li>
<li>
<code>Mail.ReadBasic.Shared</code>
</li>
<li>
<code>Mail.ReadWrite</code>
</li>
<li>
<code>Mail.ReadWrite.Shared</code>
</li>
<li>
<code>Mail.Send</code>
</li>
<li>
<code>Mail.Send.Shared</code>
</li>
<li>
<code>User.Read</code>
</li>
<li>
<code>User.ReadBasic.All</code>
</li>
<li>
<code>Group.Read.All</code>
</li>
</ul>
</li>
</ul>
</li>
<li>
Press <strong>Generate Token</strong> button to generate Access and Refresh Tokens.
</li>
<li>
<em>Optional step</em>. Choose <strong>Default User Id</strong> from the drop down menu (if someone shared a mailbox with you).
</li>
<li>
Click <strong>Test Connection</strong> to confirm the connection is working.
</li>
<li>
Done! Now you are ready to use the API Connector!
</li>
</ol>
]]>
</Notes>
</Auth>
<Auth Type="OAuth" Name="AppCreds" Label="Application Credentials"
Desc="Application-only access is broader and more powerful than delegated access (User Credentials), so you should only use app-only access where needed.
Use it when: 1. The application needs to run in an automated way, without user input
(for example, a daily script that checks emails from certain contacts and sends automated responses).
2. The application needs to access resources belonging to multiple different users
(for example, a backup or data loss prevention app might need to retrieve messages from many different chat channels, each with different participants).
3. You find yourself tempted to store credentials locally and allow the app to sign in 'as' the user or admin."
HelpLink="https://learn.microsoft.com/en-us/entra/identity-platform/app-only-access-primer"
ConnStr="Provider=Custom;OAuthVersion=OAuth2;ScopeSeparator={space};GrantType=ClientCredentials;Scope=[$Scope$];ScopeSeparator={space};"
TestEndPoint="get_my_info">
<Params>
<Param Name="TokenUrl" Label="Token URL" Required="True" Options="For Single Tenant=https://login.microsoftonline.com/{ENTER-TENANT-ID-HERE}/oauth2/v2.0/token;For Multi Tenant=https://login.microsoftonline.com/common/oauth2/v2.0/token" />
<Param Name="ClientId" Label="Client ID" Required="True" />
<Param Name="ClientSecret" Label="Client Secret" Secret="True" Required="True"/>
<Param Name="Scope"
Required="True"
Options="https://graph.microsoft.com/.default"
MultiSelectSeparator=" "
MultiSelect="True"
Value="https://graph.microsoft.com/.default"
Desc="Permissions you want to use."
HelpLink="https://learn.microsoft.com/en-us/graph/permissions-reference" />
<Param Name="UserId" Template="UserIdParam"
Label="Default User Id" />
<!--below not exposed as root level property in HTTP Connection so use as placeholder-->
<Param Name="RetryMode" Value="RetryWhenStatusCodeMatch" Options="None;RetryAny;RetryWhenStatusCodeMatch;" Hidden="True" />
<Param Name="RetryStatusCodeList" Value="429|503" Hidden="True" />
<Param Name="RetryCountMax" Value="5" Hidden="True" />
<Param Name="RetryMultiplyWaitTime" Value="True" Hidden="True" />
</Params>
<Notes>
<![CDATA[
<p>
Follow these simple steps below to create Microsoft Entra ID application with application access permissions.
<p/>
<ol>
<li>
Navigate to the <a href="https://portal.azure.com/#home" target="_blank">Azure Portal</a> and log in using your credentials.
</li>
<li>
Access <a target="_blank" href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/Overview">Microsoft Entra ID</a>.
</li>
<li>
Register a new application by going to
<a target="_blank" href="https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps">App registrations</a>
and clicking on <strong>New registration</strong> button:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/start-new-app-registration-in-microsoft-entra-id.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Start new app registration in Microsoft Entra ID"
title="Starting new app registration in Microsoft Entra ID"
width="1000"
height="490" />
<div class="alert alert-info">
<strong>INFO:</strong>
Find more information on how to register an application in <a target="_blank" href="https://docs.microsoft.com/en-us/graph/auth-register-app-v2">Graph API reference</a>.
</div>
</li>
<li>
When configuration window opens, configure these fields:
<ul>
<li>
<strong>Supported account type</strong>
<ul>
<li>e.g. select <code>Accounts in this organizational directory only</code> if you need access to data in your organization only.</li>
</ul>
</li>
</li>
<li>
<strong>Redirect URI</strong>:
<ul>
<li>Set the type to <code>Public client/native (mobile & desktop)</code>.</li>
<li>Leave the URL field empty.</li>
</ul>
</li>
</ul>
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/register-app-in-microsoft-entra-id.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Register app in Microsoft Entra ID"
title="Registering app in Microsoft Entra ID"
width="1000"
height="840" />
</li>
<li>
After registering the app, copy the <strong>Application (client) ID</strong> for later:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/copy-client-id-of-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Copy client ID of Microsoft Entra ID app"
title="Copying client ID of Microsoft Entra ID app"
width="1000"
height="560" />
</li>
<li>
Then copy <strong>OAuth authorization endpoint (v2)</strong> & <strong>OAuth token endpoint (v2) URLs</strong>:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/copy-auth-and-token-urls-in-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Copy Auth and Token URLs in Microsoft Entra ID app"
title="Copying Auth and Token URLs in Microsoft Entra ID app"
width="1000"
height="560" />
</li>
<li>
Continue and create <strong>Client secret</strong>:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/app-credentials/add-client-secret-for-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Add Client secret for Microsoft Entra ID app"
title="Adding Client secret for Microsoft Entra ID app"
width="1000"
height="560" />
</li>
<li>
Then copy the <strong>Client secret</strong> for later steps:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/app-credentials/copy-client-secret-of-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Copy Client secret"
title="Copy Client secret"
width="1000"
height="560" />
</li>
<li>
Continue by adding permissions for the app by going to the <strong>API permissions</strong> section, and clicking on <strong>Add a permission</strong>:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/start-adding-permissions-to-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Start adding permissions to Microsoft Entra ID app"
title="Starting adding permissions to Microsoft Entra ID app"
width="1000"
height="520" />
</li>
<li>
Select <strong>Microsoft Graph</strong>:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/select-graph-api-permissions-for-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Select Graph API permissions for Microsoft Entra ID app"
title="Selecting Graph API permissions for Microsoft Entra ID app"
width="1000"
height="420" />
</li>
<li>
Then choose <strong>Application permissions</strong> option:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/App-Credentials/select-app-permissions-for-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Select app permissions for Microsoft Entra ID app"
title="Selecting app permissions for Microsoft Entra ID app"
width="1000"
height="320" />
</li>
<li>
Continue by adding these <strong>Mail</strong> (Outlook) permissions:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/App-Credentials/select-outlook-mail-application-scopes.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Select Outlook Mail application scopes"
title="Selecting Outlook Mail application scopes"
width="1000"
height="450" />
</li>
<li>
Finish by clicking <strong>Add permissions</strong> button:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/add-permissions-to-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Add permissions to Microsoft Entra ID app"
title="Adding permissions to Microsoft Entra ID app"
width="270"
height="70" />
</li>
<li>
Now it's time to <strong>Grant admin consent</strong> for your application:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/App-Credentials/grant-admin-consent-for-microsoft-entra-id-app.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Grant admin consent for Microsoft Entra ID app"
title="Granting admin consent for Microsoft Entra ID app"
width="1000"
height="590" />
</li>
<li>
Confirm all the permissions are granted:
<img src="https://cdn.zappysys.com/api/Images/authentication/microsoft/App-Credentials/admin-consent-granted-successfully-in-entra-id.png"
loading="lazy"
decoding="async"
class="img-thumbnail block"
alt="Admin consent granted successfully in Entra ID"
title="Admin consent granted successfully in Entra ID"
width="1000"
height="260" />
</li>
<li>
Now go to SSIS package or ODBC data source and use the copied values in <strong>Application Credentials</strong> authentication configuration:
<ul>
<li>In the <strong>Token URL</strong> field paste the <strong>OAuth token endpoint (v2) URL</strong> value you copied in the previous step.</li>
<li>In the <strong>Client ID</strong> field paste the <strong>Application (client) ID</strong> value you copied in the previous step.</li>
<li>In the <strong>Client Secret</strong> field paste the <strong>Client secret</strong> value you copied in the previous step.</li>
<li>Choose <strong>Default User Id</strong> from the drop down menu.</li>
</ul>
</li>
<li>
Click <strong>Test Connection</strong> to confirm the connection is working.
</li>
<li>
That's it! Now you can use the connector.
</li>
</ol>
]]>
</Notes>
</Auth>
</Auths>
<Template>
<Param Name="GroupIdParam" Label="Group ID or Email"
Required="True"
Type="Placeholder"
Desc="The Microsoft Mail group ID GUID or email address for the account to read messages from. (Examples: '4ff54a77-9c09-4274-958f-83bdc0a53900' or 'sales@domain.com')"
OptionsEndPoint="get_groups"
OptionsEndPointValueColumn="Id"
OptionsEndPointLabelColumn="DisplayName"
/>
<Param Name="UserIdParam" Label="User ID or Email"
Required="True"
Type="Placeholder"
Desc="The Microsoft Mail user ID GUID or email address for the account to read messages from. (Examples: '4ff54a77-9c09-4274-958f-83bdc0a53900' or 'first.last@domain.com')"
OptionsEndPoint="get_users"
OptionsEndPointValueColumn="Id"
OptionsEndPointLabelColumn="DisplayName"
ValueTemplate="<<{$value$}|~|^(me|users\/)|~|$1|~|users/{$value$},FUN_IF_REGEX_MATCH>>"
/>
<Param Name="MailFolderIdParam"
OptionsEndPoint="get_mailfolders"
OptionsEndPointParameters="UserId=[$UserId$]"
OptionsEndPointValueColumn="Id"
OptionsEndPointLabelColumn="DisplayName"
ValueTemplate="mailfolders('{$value$}')/"
/>
<Param Name="MessageColumnsParam" Key="$select" Label="Selected Columns" Type="Query"
OptionsEndPoint="get_table_columns" OptionsEndPointValueColumn="Name" OptionsEndPointParameters="Filter=message"
OptionSort="ASC"
MultiSelect="True" MultiSelectSeparator=","
DataType="DT_WSTR" Length="4000"
Desc="Select the individual columns to be included in the response, to reduce the response size and increase performance"
HelpLink="https://zappysys.com/links?url=https://learn.microsoft.com/en-us/graph/query-parameters" />
<Param Name="UserColumnsParam" Key="$select" Label="Selected Columns" Type="Query"
OptionsEndPoint="get_table_columns" OptionsEndPointValueColumn="Name" OptionsEndPointParameters="Filter=user"
OptionSort="ASC"
MultiSelect="True" MultiSelectSeparator=","
DataType="DT_WSTR" Length="4000"
Desc="Select the individual columns to be included in the response, to reduce the response size and increase performance"
HelpLink="https://zappysys.com/links?url=https://learn.microsoft.com/en-us/graph/query-parameters" />
<Param Name="MailFolderColumnsParam" Key="$select" Label="Selected Columns" Type="Query"
OptionsEndPoint="get_table_columns" OptionsEndPointValueColumn="Name" OptionsEndPointParameters="Filter=mailFolder"
OptionSort="ASC"
MultiSelect="True" MultiSelectSeparator=","
DataType="DT_WSTR" Length="4000"
Desc="Select the individual columns to be included in the response, to reduce the response size and increase performance"
HelpLink="https://zappysys.com/links?url=https://learn.microsoft.com/en-us/graph/query-parameters" />
<EndPoint Name="ODataGeneralOptions">
<Params>
<Param Name="OrderBy" Key="$orderby" Label="Order By" Type="Query"
Options="None=;AscendingOrder=SomeColumn asc;DescendingOrder=SomeColumn desc;"
DataType="DT_WSTR" Length="200"
Desc="Order the specified column by ascending or descending order"
HelpLink="https://zappysys.com/links?url=https://learn.microsoft.com/en-us/graph/query-parameters" />
<Param Name="SearchCriteria" Key="$filter" Label="Search Criteria" Type="Query"
Options="None=;Equal Search=SomeColumn eq 'SomeValue';Substring Search=substringof(SomeField,'abc');Starts With=startswith(SomeField, 'abc')"
Desc="Data filter (e.g. somecolumn -eq 'somevalue')"
HelpLink="https://zappysys.com/links?url=https://learn.microsoft.com/en-us/graph/query-parameters" />
<Param Name="PageSize" Key="$top" Label="Page Size" Type="Query" Value="100"
DataType="DT_I4" Desc="The number of records to include in each page of results"
HelpLink="https://zappysys.com/links?url=https://learn.microsoft.com/en-us/graph/query-parameters" />
</Params>
</EndPoint>
<EndPoint Name="SearchMessageParams"
Headers="Prefer: outlook.body-content-type=[$EmailBodyFormat$]"
>
<Params>
<!-- KQL funtionality is still buggy in Mail API so commented
<Param Name="SearchCriteriaKQL" Key="$search" Label="Search Criteria (using KQL) - Simple expression" Type="Query"
Options="None=;
Search Text in Body or Subject="invoice G020427950 is ready";
From=from:some@abcinc.onmicrosoft.com;
To=to:some@abcinc.onmicrosoft.com;
Cc=cc:some@abcinc.onmicrosoft.com;
Bcc=bcc:some@abcinc.onmicrosoft.com;
Participants (From, To, Cc, Bcc)=participants:npatel@zappysys.onmicrosoft.com;
Mail Received on=received:07/23/2018;
Mail Sent on=sent:07/23/2018;
Subject Contains=subject:daily report;"
HelpLink="https://learn.microsoft.com/en-us/graph/search-query-parameter?tabs=http#using-search-on-message-collections"
ValueTemplate=""{$value$}""
>
</Param>
-->
<Param Name="SearchCriteria" Key="$filter" Label="Search Criteria" Type="Query"
Options="None=;
From specific email='from/emailAddress/address eq 'microsoft-noreply@microsoft.com';
Has Attachments=hasAttachments eq true;
Has Attachments, Sent After, and Subject containing 'party'=hasAttachments eq true and sentDateTime gt 2023-03-01 and contains(subject, 'party');
Received before=receivedDateTime lt 2023-02-01;
Sent after=sentDateTime gt 2023-03-01;
Sent after (dynamic)=sentDateTime gt <<yearstart+1d|~|yyyy-MM-dd,FUN_TO_DATE>>;
Search by Internet MessageId=contains(internetMessageId,''59e62584-e364-453a-8444-5591a324ddaa@az.centralus.production.microsoft.com'');
Has attachment(s)=hasAttachments eq true;
Subject contains 'case'=contains(subject, 'case');
Subject starts with 'Your'=startsWith(subject, 'Your');
Subject does not start with 'Your'=not(startsWith(subject, 'Your'));
Only normal importance=importance eq 'normal';
Only low importance=importance eq 'low';
Only high importance=importance eq 'high';
Only if delivery receipt requested=isDeliveryReceiptRequested eq true;
Only if delivery receipt not requested=isDeliveryReceiptRequested eq false;
Only if read receipt requested=isReadReceiptRequested eq true;
Only if read receipt not requested=isReadReceiptRequested eq false;
Only if message is read=isRead eq true;
Only if message is unread=isRead eq false;
Only if message is a draft=isDraft eq true;
Only if message is not a draft=isDraft eq false;
Body content contains=contains(body/content, 'money');
From Sender 'John Doe'=sender/emailAddress/name eq 'John Doe'"
Desc="Data filter (e.g. somecolumn -eq 'somevalue'), you can use Date time functions for dynamic date. You can use keywords like now,today,yesterday,monthstart,monthend,yearstart,yearend,weekstart,weekend along with operator + / - [hour,minute,second,day,month,year]"
HelpLink="https://learn.microsoft.com/en-us/graph/filter-query-parameter?tabs=http" />
<Param Name="EmailBodyFormat" Label="Email Body Format" Type="Placeholder" Value="html" Required="True"
Options="html;text" />
<Param Name="MailFolderId" Template="MailFolderIdParam" />
</Params>
</EndPoint>
<EndPoint Name="MessageChildOutputColumns">
<Params>
<Param Name="SelectedColumns" Template="MessageColumnsParam" />
<Param Name="EnableArrayFlattening" Value="True" Type="Property" Desc="Enables deep array flattening for selected filtered hierarchy. When you turn on this property it will flatten each property of each array item and expose as column (e.g. If you have array property called tags and value is ['red','blue','yellow'] and if you turn on array flatterning then may see columns tags.1, tags.2, tags.3... tags.N in the output. You can control how many array items you want to flatten by setting MaxArrayItemsToFlatten property." />
<Param Name="MaxArrayItemsToFlatten" Value="5" Type="Property" />
</Params>
<OutputColumns>
<Column Name="p1_receivedDateTime" DataType="DT_DBTIMESTAMP" Label="ReceivedDateTime" />
<Column Name="p1_hasAttachments" DataType="DT_BOOL" Label="HasAttachments" />
<Column Name="p1_subject" DataType="DT_WSTR" Label="Subject" Length="800" />
<Column Name="p1_bodyPreview" DataType="DT_WSTR" Label="BodyPreview" Length="4000" />
<Column Name="p1_sender.emailAddress.name" DataType="DT_WSTR" Label="SenderEmailAddressName" Length="800" />
<Column Name="p1_sender.emailAddress.address" DataType="DT_WSTR" Label="SenderEmailAddress" Length="800" />
<Column Name="p1_importance" DataType="DT_WSTR" Label="Importance" Length="500" />
<Column Name="p1_sentDateTime" DataType="DT_DBTIMESTAMP" Label="SentDateTime" />
<Column Name="p1_createdDateTime" DataType="DT_DBTIMESTAMP" Label="CreatedDateTime" />
<Column Name="p1_lastModifiedDateTime" DataType="DT_DBTIMESTAMP" Label="LastModifiedDateTime" />
<Column Name="p1_changeKey" DataType="DT_WSTR" Label="ChangeKey" Length="1000" />
<Column Name="p1_toRecipients" DataType="DT_WSTR" Label="ToRecipients" Length="1190" />
<Column Name="p1_ccRecipients" DataType="DT_WSTR" Label="CcRecipients" Length="1190" />
<Column Name="p1_bccRecipients" DataType="DT_WSTR" Label="BccRecipients" Length="1190" />
<Column Name="p1_toRecipients.1.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient1" Length="200" />
<Column Name="p1_toRecipients.2.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient2" Length="200" />
<Column Name="p1_toRecipients.3.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient3" Length="200" />
<Column Name="p1_toRecipients.4.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient4" Length="200" />
<Column Name="p1_toRecipients.5.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient5" Length="200" />
<Column Name="p1_ccRecipients.1.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient1" Length="200" />
<Column Name="p1_ccRecipients.2.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient2" Length="200" />
<Column Name="p1_ccRecipients.3.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient3" Length="200" />
<Column Name="p1_ccRecipients.4.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient4" Length="200" />
<Column Name="p1_ccRecipients.5.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient5" Length="200" />
<Column Name="p1_bccRecipients.1.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient1" Length="200" />
<Column Name="p1_bccRecipients.2.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient2" Length="200" />
<Column Name="p1_bccRecipients.3.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient3" Length="200" />
<Column Name="p1_bccRecipients.4.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient4" Length="200" />
<Column Name="p1_bccRecipients.5.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient5" Length="200" />
<Column Name="p1_categories" DataType="DT_WSTR" Label="Categories" Length="1000" />
<Column Name="p1_parentFolderId" DataType="DT_WSTR" Label="ParentFolderId" Length="1200" />
<Column Name="p1_conversationId" DataType="DT_WSTR" Label="ConversationId" Length="1200" />
<Column Name="p1_conversationIndex" DataType="DT_WSTR" Label="ConversationIndex" Length="1200" />
<Column Name="p1_isDeliveryReceiptRequested" DataType="DT_BOOL" Label="IsDeliveryReceiptRequested" />
<Column Name="p1_isReadReceiptRequested" DataType="DT_BOOL" Label="IsReadReceiptRequested" />
<Column Name="p1_isRead" DataType="DT_BOOL" Label="IsRead" />
<Column Name="p1_isDraft" DataType="DT_BOOL" Label="IsDraft" />
<Column Name="p1_webLink" DataType="DT_WSTR" Label="WebLink" Length="4000" />
<Column Name="p1_inferenceClassification" DataType="DT_WSTR" Label="InferenceClassification" Length="800" />
<Column Name="p1_internetMessageHeaders" DataType="DT_NTEXT" Label="InternetMessageHeaders" />
<Column Name="p1_body.contentType" DataType="DT_WSTR" Label="BodyContentType" Length="500" />
<Column Name="p1_body.content" DataType="DT_NTEXT" Label="BodyContent" />
<Column Name="p1_from.emailAddress.name" DataType="DT_WSTR" Label="FromEmailAddressName" Length="800" />
<Column Name="p1_from.emailAddress.address" DataType="DT_WSTR" Label="FromEmailAddress" Length="800" />
<Column Name="p1_replyTo" DataType="DT_WSTR" Label="ReplyTo" Length="1190" />
<Column Name="p1_uniqueBody.contentType" DataType="DT_WSTR" Label="UniqueBodyContentType" Length="500" />
<Column Name="p1_uniqueBody.content" DataType="DT_NTEXT" Label="UniqueBodyContent" />
<Column Name="p1_flag.flagStatus" DataType="DT_WSTR" Label="FlagFlagStatus" Length="800" />
<Column Name="p1_@odata.etag" DataType="DT_WSTR" Label="ODataETag" Length="1000" />
<Column Name="p1_internetMessageId" DataType="DT_WSTR" Label="InternetMessageId" Length="1800" />
</OutputColumns>
</EndPoint>
<EndPoint Name="MessageOutputColumns">
<Params>
<Param Name="SelectedColumns" Template="MessageColumnsParam" />
<Param Name="EnableArrayFlattening" Value="True" Type="Property" Desc="Enables deep array flattening for selected filtered hierarchy. When you turn on this property it will flatten each property of each array item and expose as column (e.g. If you have array property called tags and value is ['red','blue','yellow'] and if you turn on array flatterning then may see columns tags.1, tags.2, tags.3... tags.N in the output. You can control how many array items you want to flatten by setting MaxArrayItemsToFlatten property." />
<Param Name="MaxArrayItemsToFlatten" Value="5" Type="Property" />
</Params>
<OutputColumns>
<Column Name="id" DataType="DT_WSTR" Label="Id" Length="1000" />
<Column Name="receivedDateTime" DataType="DT_DBTIMESTAMP" Label="ReceivedDateTime" />
<Column Name="hasAttachments" DataType="DT_BOOL" Label="HasAttachments" />
<Column Name="subject" DataType="DT_WSTR" Label="Subject" Length="800" />
<Column Name="bodyPreview" DataType="DT_WSTR" Label="BodyPreview" Length="4000" />
<Column Name="sender.emailAddress.name" DataType="DT_WSTR" Label="SenderEmailAddressName" Length="800" />
<Column Name="sender.emailAddress.address" DataType="DT_WSTR" Label="SenderEmailAddress" Length="800" />
<Column Name="importance" DataType="DT_WSTR" Label="Importance" Length="500" />
<Column Name="sentDateTime" DataType="DT_DBTIMESTAMP" Label="SentDateTime" />
<Column Name="createdDateTime" DataType="DT_DBTIMESTAMP" Label="CreatedDateTime" />
<Column Name="lastModifiedDateTime" DataType="DT_DBTIMESTAMP" Label="LastModifiedDateTime" />
<Column Name="changeKey" DataType="DT_WSTR" Label="ChangeKey" Length="1000" />
<Column Name="toRecipients" DataType="DT_WSTR" Label="ToRecipients" Length="1190" />
<Column Name="ccRecipients" DataType="DT_WSTR" Label="CcRecipients" Length="1190" />
<Column Name="bccRecipients" DataType="DT_WSTR" Label="BccRecipients" Length="1190" />
<Column Name="toRecipients.1.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient1" Length="200" />
<Column Name="toRecipients.2.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient2" Length="200" />
<Column Name="toRecipients.3.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient3" Length="200" />
<Column Name="toRecipients.4.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient4" Length="200" />
<Column Name="toRecipients.5.emailAddress.address" DataType="DT_WSTR" Label="ToRecipient5" Length="200" />
<Column Name="ccRecipients.1.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient1" Length="200" />
<Column Name="ccRecipients.2.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient2" Length="200" />
<Column Name="ccRecipients.3.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient3" Length="200" />
<Column Name="ccRecipients.4.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient4" Length="200" />
<Column Name="ccRecipients.5.emailAddress.address" DataType="DT_WSTR" Label="CcRecipient5" Length="200" />
<Column Name="bccRecipients.1.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient1" Length="200" />
<Column Name="bccRecipients.2.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient2" Length="200" />
<Column Name="bccRecipients.3.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient3" Length="200" />
<Column Name="bccRecipients.4.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient4" Length="200" />
<Column Name="bccRecipients.5.emailAddress.address" DataType="DT_WSTR" Label="BccRecipient5" Length="200" />
<Column Name="categories" DataType="DT_WSTR" Label="Categories" Length="1000" />
<Column Name="parentFolderId" DataType="DT_WSTR" Label="ParentFolderId" Length="1200" />
<Column Name="conversationId" DataType="DT_WSTR" Label="ConversationId" Length="1200" />
<Column Name="conversationIndex" DataType="DT_WSTR" Label="ConversationIndex" Length="1200" />
<Column Name="isDeliveryReceiptRequested" DataType="DT_BOOL" Label="IsDeliveryReceiptRequested" />
<Column Name="isReadReceiptRequested" DataType="DT_BOOL" Label="IsReadReceiptRequested" />
<Column Name="isRead" DataType="DT_BOOL" Label="IsRead" />
<Column Name="isDraft" DataType="DT_BOOL" Label="IsDraft" />
<Column Name="webLink" DataType="DT_WSTR" Label="WebLink" Length="4000" />
<Column Name="inferenceClassification" DataType="DT_WSTR" Label="InferenceClassification" Length="800" />
<Column Name="internetMessageHeaders" DataType="DT_NTEXT" Label="InternetMessageHeaders" />
<Column Name="body.contentType" DataType="DT_WSTR" Label="BodyContentType" Length="500" />
<Column Name="body.content" DataType="DT_NTEXT" Label="BodyContent" />
<Column Name="from.emailAddress.name" DataType="DT_WSTR" Label="FromEmailAddressName" Length="800" />
<Column Name="from.emailAddress.address" DataType="DT_WSTR" Label="FromEmailAddress" Length="800" />
<Column Name="replyTo" DataType="DT_WSTR" Label="ReplyTo" Length="1190" />
<Column Name="uniqueBody.contentType" DataType="DT_WSTR" Label="UniqueBodyContentType" Length="500" />
<Column Name="uniqueBody.content" DataType="DT_NTEXT" Label="UniqueBodyContent" />
<Column Name="flag.flagStatus" DataType="DT_WSTR" Label="FlagFlagStatus" Length="800" />
<Column Name="@odata.etag" DataType="DT_WSTR" Label="ODataETag" Length="1000" />
<Column Name="internetMessageId" DataType="DT_WSTR" Label="InternetMessageId" Length="1800" />
</OutputColumns>
</EndPoint>
<EndPoint Name="AttachmentOutputColumns">
<OutputColumns>
<Column Name="id" DataType="DT_WSTR" Label="Id" Length="1000" />
<Column Name="name" DataType="DT_WSTR" Label="Name" Length="200" />
<Column Name="contentType" DataType="DT_WSTR" Label="ContentType" Length="200" />
<Column Name="isInline" DataType="DT_BOOL" Label="IsInline" />
<Column Name="lastModifiedDateTime" DataType="DT_DBTIMESTAMP" Label="LastModifiedDateTime" />
<Column Name="size" DataType="DT_I4" Label="Size" />
<Column Name="contentId" DataType="DT_WSTR" Label="ContentId" Length="2000" />
<Column Name="contentBytes" DataType="DT_NTEXT" Label="ContentBytes" Desc="Change to DT_IMAGE here or in ETL tool metadata if you like to get binary data instead of Base64"/>
<Column Name="@odata.type" DataType="DT_WSTR" Label="ODataType" Length="200" />
<Column Name="@odata.mediaContentType" DataType="DT_WSTR" Label="ODataMediaContentType" Length="200" />
</OutputColumns>
</EndPoint>
<EndPoint Name="UserOutputColumns">
<Params>
<Param Name="SelectedColumns" Template="UserColumnsParam" />
</Params>
<OutputColumns>
<Column Name="businessPhones" DataType="DT_WSTR" Label="BusinessPhones" Length="4000" />
<Column Name="displayName" DataType="DT_WSTR" Label="DisplayName" Length="500" />
<Column Name="givenName" DataType="DT_WSTR" Label="GivenName" Length="80" />
<Column Name="jobTitle" DataType="DT_WSTR" Label="JobTitle" Length="200" />
<Column Name="mail" DataType="DT_WSTR" Label="Mail" Length="200" />
<Column Name="mobilePhone" DataType="DT_WSTR" Label="MobilePhone" Length="500" />
<Column Name="officeLocation" DataType="DT_WSTR" Label="OfficeLocation" Length="500" />
<Column Name="preferredLanguage" DataType="DT_WSTR" Label="PreferredLanguage" Length="100" />
<Column Name="surname" DataType="DT_WSTR" Label="SurName" Length="80" />
<Column Name="userPrincipalName" DataType="DT_WSTR" Label="UserPrincipalName" Length="200" />
<Column Name="id" DataType="DT_WSTR" Label="Id" Length="4000" />
</OutputColumns>
</EndPoint>
<EndPoint Name="GroupOutputColumns">
<OutputColumns>
<Column Name="id" Label="Id" DataType="DT_WSTR" Length="500" />
<Column Name="displayName" Label="DisplayName" DataType="DT_WSTR" Length="500" />
<Column Name="deletedDateTime" Label="DeletedDateTime" DataType="DT_WSTR" Length="500" />
<Column Name="classification" Label="Classification" DataType="DT_WSTR" Length="500" />
<Column Name="createdDateTime" Label="CreatedDateTime" DataType="DT_DBTIMESTAMP" />
<Column Name="creationOptions" Label="CreationOptions" DataType="DT_WSTR" Length="1470" />
<Column Name="description" Label="Description" DataType="DT_WSTR" Length="1000" />
<Column Name="expirationDateTime" Label="ExpirationDateTime" DataType="DT_WSTR" Length="500" />
<Column Name="groupTypes" Label="GroupTypes" DataType="DT_WSTR" Length="500" />
<Column Name="isAssignableToRole" Label="IsAssignableToRole" DataType="DT_BOOL" />
<Column Name="mail" Label="Mail" DataType="DT_WSTR" Length="500" />
<Column Name="mailEnabled" Label="MailEnabled" DataType="DT_BOOL" />
<Column Name="mailNickname" Label="MailNickname" DataType="DT_WSTR" Length="100" />
<Column Name="membershipRule" Label="MembershipRule" DataType="DT_WSTR" Length="500" />
<Column Name="membershipRuleProcessingState" Label="MembershipRuleProcessingState" DataType="DT_WSTR" Length="500" />
<Column Name="onPremisesDomainName" Label="OnPremisesDomainName" DataType="DT_WSTR" Length="500" />
<Column Name="onPremisesLastSyncDateTime" Label="OnPremisesLastSyncDateTime" DataType="DT_WSTR" Length="500" />
<Column Name="onPremisesNetBiosName" Label="OnPremisesNetBiosName" DataType="DT_WSTR" Length="500" />
<Column Name="onPremisesSamAccountName" Label="OnPremisesSamAccountName" DataType="DT_WSTR" Length="500" />
<Column Name="onPremisesSecurityIdentifier" Label="OnPremisesSecurityIdentifier" DataType="DT_WSTR" Length="500" />
<Column Name="onPremisesSyncEnabled" Label="OnPremisesSyncEnabled" DataType="DT_WSTR" Length="500" />
<Column Name="preferredDataLocation" Label="PreferredDataLocation" DataType="DT_WSTR" Length="500" />
<Column Name="preferredLanguage" Label="PreferredLanguage" DataType="DT_WSTR" Length="500" />
<Column Name="proxyAddresses" Label="ProxyAddresses" DataType="DT_WSTR" Length="4000" />
<Column Name="renewedDateTime" Label="RenewedDateTime" DataType="DT_DBTIMESTAMP" />
<Column Name="resourceBehaviorOptions" Label="ResourceBehaviorOptions" DataType="DT_WSTR" Length="1020" />
<Column Name="resourceProvisioningOptions" Label="ResourceProvisioningOptions" DataType="DT_WSTR" Length="500" />
<Column Name="securityEnabled" Label="SecurityEnabled" DataType="DT_BOOL" />
<Column Name="securityIdentifier" Label="SecurityIdentifier" DataType="DT_WSTR" Length="1000" />
<Column Name="theme" Label="Theme" DataType="DT_WSTR" Length="500" />
<Column Name="uniqueName" Label="UniqueName" DataType="DT_WSTR" Length="500" />
<Column Name="visibility" Label="Visibility" DataType="DT_WSTR" Length="100" />
<Column Name="onPremisesProvisioningErrors" Label="OnPremisesProvisioningErrors" DataType="DT_WSTR" Length="50" />
<Column Name="serviceProvisioningErrors" Label="ServiceProvisioningErrors" DataType="DT_WSTR" Length="50" />
</OutputColumns>
</EndPoint>
<EndPoint Name="MailFolderOutputColumns">
<Params>
<Param Name="SelectedColumns" Template="MailFolderColumnsParam" />
</Params>
<OutputColumns>
<Column Name="id" DataType="DT_WSTR" Label="Id" Length="1200" />
<Column Name="displayName" DataType="DT_WSTR" Label="DisplayName" Length="500" />
<Column Name="parentFolderId" DataType="DT_WSTR" Label="ParentFolderId" Length="1200" />
<Column Name="childFolderCount" DataType="DT_I4" Label="ChildFolderCount" />
<Column Name="unreadItemCount" DataType="DT_I4" Label="UnreadItemCount" />
<Column Name="totalItemCount" DataType="DT_I4" Label="TotalItemCount" />
<Column Name="sizeInBytes" DataType="DT_I4" Label="SizeInBytes" />
<Column Name="isHidden" DataType="DT_BOOL" Label="IsHidden" />
</OutputColumns>
</EndPoint>
<EndPoint Name="PaginationParams">
<Params>
<Param Name="PageSize" Label="PageSize" Type="Query" Value="100" Desc="The number of records to show on each page of results." Hidden="True" />
<Param Name="DataFormat" Type="Property" Value="OData" />
</Params>
</EndPoint>
</Template>
<EndPoints>
<!-- GET Tables-->
<EndPoint Name="get_tables"
Label="Get Tables"
Url="/$metadata"
Filter="$.edmx:Edmx.edmx:DataServices.Schema[*].EntityType[*]"
Method="GET"
Desc="Get table list and its properties for Graph API"
ResponseFormat="Xml"
CachedTtl="600"
>
<OutputColumns>
<Column Name="@Name" DataType="DT_WSTR" Label="Name" Length="500" />
<Column Name="@BaseType" DataType="DT_WSTR" Label="BaseType" Length="500" />
</OutputColumns>
</EndPoint>
<EndPoint Name="get_table_columns"
Label="Get Table Columns"
Url="/$metadata"
Method="GET"
Desc="Get table list and its properties for Graph API"
Filter="$.edmx:Edmx.edmx:DataServices.Schema[*].EntityType[*].Property[*]"
IncludeParentColumns="True"
ResponseFormat="Xml"
CachedTtl="600"
>
<Params>
<Param Name="Filter" Label="Table Name" Value="" DataEndPoint="get_tables"
ValueTemplate="$.edmx:Edmx.edmx:DataServices.Schema[*].EntityType[?(@@Name=='{$value$}')].Property[*]"
OptionsEndPoint="get_tables"
OptionsEndPointValueColumn="name"
OptionsEndPointLabelColumn="name"
OptionSort="ASC"
/>
</Params>
<OutputColumns>
<Column Name="P_edmx:Edmx.edmx:DataServices.Schema_EntityType_@Name" Label="EntityName" DataType="DT_WSTR" Length="500" />
<Column Name="P_edmx:Edmx.edmx:DataServices.Schema_EntityType_@BaseType" Label="BaseType" DataType="DT_WSTR" Length="500" />
<Column Name="@Name" DataType="DT_WSTR" Label="Name" Length="500" />
<Column Name="@Type" DataType="DT_WSTR" Label="Type" Length="500" />
<Column Name="@Nullable" DataType="DT_BOOL" Label="Nullable" />
</OutputColumns>
</EndPoint>
<!-- GET MY INFO ***-->
<EndPoint Name="get_my_info"
Label="Get My Information"
Url="/me"
Method="GET"
Desc="Get general information about the current user.">
<OutputColumns>
<Column Name="id" DataType="DT_WSTR" Label="Id" Length="500" />
<Column Name="displayName" DataType="DT_WSTR" Label="DisplayName" Length="200" />
<Column Name="givenName" DataType="DT_WSTR" Label="GivenName" Length="200" />
<Column Name="surname" DataType="DT_WSTR" Label="SurName" Length="200" />
<Column Name="jobTitle" DataType="DT_WSTR" Label="JobTitle" Length="200" />
<Column Name="mail" DataType="DT_WSTR" Label="Mail" Length="200" />
<Column Name="userPrincipalName" DataType="DT_WSTR" Label="UserPrincipalName" Length="200" />
<Column Name="businessPhones" DataType="DT_WSTR" Label="BusinessPhones" Length="200" />
<Column Name="mobilePhone" DataType="DT_WSTR" Label="MobilePhone" Length="200" />
<Column Name="officeLocation" DataType="DT_WSTR" Label="OfficeLocation" Length="500" />
<Column Name="preferredLanguage" DataType="DT_WSTR" Label="PreferredLanguage" Length="200" />
<Column Name="@odata.context" DataType="DT_WSTR" Label="@OdataContext" Length="2000" />
</OutputColumns>
</EndPoint>
<!-- GET MESSAGES **-->
<EndPoint Name="get_messages"
Label="Get Messages"
Url="/[$UserId$]/[$MailFolderId$]messages"
Method="GET"
Filter="$.value[*]"
Desc="Get the mail messages for the specified user ID or email address."
Template="SearchMessageParams,ODataGeneralOptions, MessageOutputColumns, PaginationParams"
HelpLink="https://learn.microsoft.com/en-us/graph/api/user-list-messages?view=graph-rest-1.0">
<Params>
<Param Name="UserId" Template="UserIdParam"/>
</Params>
</EndPoint>
<!-- SEND MAIL -->
<EndPoint Name="send_mail"
Label="Send Mail"
Url="/[$UserId$]/sendMail"
Method="POST"
ContentType="application/json"
JsonRowFormat="Multicontent"
Desc="Sends an email message."
HelpLink="https://learn.microsoft.com/en-us/graph/api/user-sendmail?view=graph-rest-1.0">
<LayoutMap>
<![CDATA[<?xml version="1.0" encoding="utf-8"?>
<settings ver="3" singledataset="True">
<dataset id="root" main="True" readfrominput="True"></dataset>
<map name="message">
<map src="Subject" name="subject" />
<map name="body">
<map src="BodyContentType" name="contentType" />
<map src="BodyContent" name="content" />
</map>
<map src="ToRecipients" name="toRecipients" fragment="True" />
<map src="CcRecipients" name="ccRecipients" fragment="True" />
<map src="BccRecipients" name="bccRecipients" fragment="True" />
<map src="InternetMessageHeaders" name="internetMessageHeaders" fragment="True" />
<map src="Attachments" name="attachments" fragment="True" />
<map src="Importance" name="importance" />
<map src="IsDeliveryReceiptRequested" name="isDeliveryReceiptRequested" />
<map src="IsReadReceiptRequested" name="isReadReceiptRequested" />
</map>
<map src="SaveToSentItems" name="saveToSentItems" />
</settings>
]]>
</LayoutMap>
<Body>
<![CDATA[{$rows$}]]>
</Body>
<Params>
<Param Name="UserId" Template="UserIdParam"/>
<Param Name="DoNotOutputEmptyNestedProperty" Type="Property" Value="True" />
<Param Name="DoNotOutputEmptyArrayProperty" Type="Property" Value="True" />
<Param Name="RawOutputDataRowTemplate" Type="Property" Value="{}" ValueTemplate="{Response:'Message Sent'}" />
<Param Name="EnableRawOutputModeSingleRow" Type="Property" Value="True" />
</Params>
<InputColumns>
<Column Name="Subject" DataType="DT_WSTR" Length="250" />
<Column Name="BodyContentType" DataType="DT_WSTR" Length="8" Options="html;text" Example="html or text" />
<Column Name="BodyContent" DataType="DT_NTEXT" />
<Column Name="ToRecipients" DataType="DT_WSTR" Length="4000" Raw="True" Example="[{ "emailAddress": { "address": "john.doe@domain.com" }}, { "emailAddress": { "address": "jane.doe@domain.com" }}]"/>
<Column Name="CcRecipients" DataType="DT_WSTR" Length="4000" Raw="True" Example="[{ "emailAddress": { "address": "john.doe@domain.com" }}, { "emailAddress": { "address": "jane.doe@domain.com" }}]"/>
<Column Name="BccRecipients" DataType="DT_WSTR" Length="4000" Raw="True" Example="[{ "emailAddress": { "address": "john.doe@domain.com" }}, { "emailAddress": { "address": "jane.doe@domain.com" }}]"/>
<Column Name="InternetMessageHeaders" DataType="DT_WSTR" Length="4000" Raw="True" Example="[{ "name": "x-custom-header-group-name", "value": "Nevada" }, { "name": "x-custom-header-group-id", "value": "NV001" }]"/>
<Column Name="Attachments" DataType="DT_NTEXT" Raw="True" Example="[{ "@odata.type": "#microsoft.graph.fileAttachment", "name": "attachment.txt", "contentType": "text/plain", "contentBytes": "SGVsbG8gV29ybGQh" }]"/>
<Column Name="Importance" DataType="DT_WSTR" Length="10" />
<Column Name="IsDeliveryReceiptRequested" DataType="DT_BOOL" />
<Column Name="IsReadReceiptRequested" DataType="DT_BOOL" />
<Column Name="SaveToSentItems" DataType="DT_BOOL" />
</InputColumns>
<OutputColumns>
<Column Name="Id" DataType="DT_WSTR" />
<Column Name="Response" DataType="DT_WSTR" Length="255" />
</OutputColumns>
</EndPoint>
<!-- GET MY MAIL FOLDERS -->
<EndPoint Name="get_my_mailfolders"
Label="Get My Mail Folders [only works with User Credentials]"
Url="/me/mailFolders"
Method="GET"
Filter="$.value[*]"
Desc="Get the list of mail folders for the current user."
Template="ODataGeneralOptions, MailFolderOutputColumns, PaginationParams"
HelpLink="https://learn.microsoft.com/en-us/graph/api/user-list-mailfolders?view=graph-rest-1.0">
</EndPoint>
<!-- the following format:
https://graph.microsoft.com/v1.0/users/{some-use-id}/mailfolders/{some-folder-id}
does not seem to be supported, only /me/mailfolders/{some-folder-id} Works. Revisit this when
-->
<!-- GET MY MAIL FOLDER BY ID -->
<EndPoint Name="get_my_mailfolder"
Label="Get Mail Folder by Id [only works with User Credentials]"
Url="/me/mailFolders/[$MailFolderId$]"
Method="GET"
Desc="Get the mail folder specified by the mail folder Id."
Template="MailFolderOutputColumns"
HelpLink="https://learn.microsoft.com/en-us/graph/api/mailfolder-get?view=graph-rest-1.0">
<Params>
<Param Name="MailFolderId" ReadAs="Id" Label="Mail Folder Id" IsKey="True" Required="True" Type="Placeholder" Desc="The Microsoft Mail mail folder ID for the mail folder." />
</Params>
</EndPoint>
<!-- GET USERS -->
<EndPoint Name="get_users"
Label="Get Users"
Url="/users"
Method="GET"
Filter="$.value[*]"
Desc="Get the list of users."
Template="ODataGeneralOptions, UserOutputColumns, PaginationParams"
HelpLink="https://learn.microsoft.com/en-us/graph/api/user-list?view=graph-rest-1.0">
</EndPoint>
<!-- GET USER BY ID -->
<EndPoint Name="get_user"
Label="Get User by Id"
Url="/[$UserId$]"
Method="GET"
Desc="Get a specific user."
Template="UserOutputColumns"
HelpLink="https://learn.microsoft.com/en-us/graph/api/user-get?view=graph-rest-1.0">
<Params>
<Param Name="UserId" Template="UserIdParam" IsKey="True" ReadAs="Id" />
</Params>
</EndPoint>
<!-- GET GROUPS -->
<EndPoint Name="get_groups"
Label="Get Groups"
Url="/groups"
Method="GET"
Filter="$.value[*]"
Desc="Get the list of groups."
Template="ODataGeneralOptions, GroupOutputColumns, PaginationParams"
HelpLink="https://learn.microsoft.com/en-us/graph/api/group-list?view=graph-rest-1.0">
</EndPoint>
<!-- GET GROUP BY ID -->
<EndPoint Name="get_group"
Label="Get Group by Id"
Url="/groups/[$GroupId$]"
Method="GET"
Desc="Get a specific group."
Template="GroupOutputColumns"
HelpLink="https://learn.microsoft.com/en-us/graph/api/group-get?view=graph-rest-1.0">
<Params>
<Param Name="GroupId" Template="GroupIdParam" IsKey="True" ReadAs="Id" />
</Params>
</EndPoint>
<!-- GET MAIL FOLDERS ***-->
<EndPoint Name="get_mailfolders"
Label="Get Mail Folders"
Url="/[$UserId$]/mailFolders"
Method="GET"
Filter="$.value[*]"
Desc="Get the list of mail folders for the specified user Id."
Template="ODataGeneralOptions, MailFolderOutputColumns, PaginationParams"
HelpLink="https://learn.microsoft.com/en-us/graph/api/user-list-mailfolders?view=graph-rest-1.0">
<Params>
<Param Name="UserId" Template="UserIdParam"/>
</Params>
</EndPoint>
<!-- GET MY MESSAGES ****-->
<EndPoint Name="get_my_messages"
Label="Get My Messages [only works with User Credentials]"
Url="/me/[$MailFolderId$]messages"
Method="GET"
Filter="$.value[*]"
Desc="Get the mail messages for the current user."
Template="SearchMessageParams,ODataGeneralOptions, MessageOutputColumns, PaginationParams"
HelpLink="https://learn.microsoft.com/en-us/graph/api/user-list-messages?view=graph-rest-1.0">
<Params>
</Params>
</EndPoint>
<!-- GET MY MESSAGE BY ID ****-->
<EndPoint Name="get_my_message"
Label="Get My Message by Id [only works with User Credentials]"
Url="/me/messages/[$MessageId$]"
Method="GET"
Desc="Get the mail message by message Id for the specified user ID or email address."
Template="MessageOutputColumns"
Headers="Prefer: outlook.body-content-type=[$EmailBodyFormat$]"
HelpLink="https://learn.microsoft.com/en-us/graph/api/message-get?view=graph-rest-1.0">
<Params>
<Param Name="MessageId" Label="Message Id" ReadAs="Id" IsKey="True" Required="True" Type="Placeholder" Desc="The Microsoft Mail message ID GUID for the message to read. (Example: 'c3220464-7209-453c-8840-3cf4de0afaa6')" />
<Param Name="EmailBodyFormat" Label="Email Body Format" Type="Placeholder" Value="html" Required="True"
Options="html;text" />
</Params>
</EndPoint>
<!-- GET MESSAGE ATTACHMENT LIST **-->
<EndPoint Name="get_message_attachments"
Label="Get Message Attachments"
Url="/[$UserId$]/messages/[$MessageId$]/attachments"
Method="GET"
Filter="$.value[*]"
Desc="Get the list of attachments linked to the specified message Id."
Template="ODataGeneralOptions, AttachmentOutputColumns, PaginationParams"
HelpLink="https://learn.microsoft.com/en-us/graph/api/message-list-attachments?view=graph-rest-1.0">
<Params>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MessageId" ReadAs="Id" Label="Message ID" IsKey="True" Required="True" Type="Placeholder" Desc="The message Id for which to get attachments from." />
</Params>
</EndPoint>
<!-- GET A SPECIFIC MESSAGE ATTACHMENT *-->
<EndPoint Name="get_message_attachment"
Label="Get Message Attachment"
Desc="Get a specific attachment linked to the specified message Id."
Url="/[$UserId$]/messages/[$MessageId$]/attachments/[$AttachmentId$]"
Method="GET"
Template="AttachmentOutputColumns"
HelpLink="https://learn.microsoft.com/en-us/graph/api/attachment-get?view=graph-rest-1.0">
<Params>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MessageId" Label="Message ID" Required="True" Type="Placeholder" Desc="The message Id for which to get the attachment from." />
<Param Name="AttachmentId" IsKey="True" Label="Attachment ID" Required="True" Type="Placeholder" Desc="The attachment Id for the attachment to get." />
</Params>
</EndPoint>
<EndPoint Name="get_messages_by_search_binary"
Label="Get Messages by Search Filters - Output binary data (EML RFC 822 / MIME)"
Url="/[$UserId$]/[$MailFolderId$]messages"
Method="GET"
Filter="$.value[*]"
ContentType="application/json"
OutputHeaders="StatusCode"
Desc="Gets multiple messages as *.EML Binary Content (RFC 822 / MIME) for a specified search condition / mailbox / folder"
Template="SearchMessageParams,ODataGeneralOptions, PaginationParams,MessageChildOutputColumns"
HelpLink="">
<Params>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MailFolderId" Template="MailFolderIdParam"/>
</Params>
<EndPoint Name="child_messages"
Url="/[$UserId$]/[$MailFolderId$]messages/[$parent.id$]/$value"
Method="GET"
IncludeParentColumns="True"
>
<Params>
<Param Name="SaveContentAsBinary" Type="Property" Value="True"/>
<Param Name="UserId" ValueTemplate="<<{$value$}|~|Eq|~|me|~|me|~|users/{$value$},FUN_IF>>"/>
<Param Name="MailFolderId" ValueTemplate="mailfolders('{$value$}')/"/>
</Params>
</EndPoint>
<OutputColumns>
<Column Order="-100" Name="p1_id" Label="MessageId" DataType="DT_STR" Length="255" />
<Column Order="-90" Name="data" Label="Data" DataType="DT_IMAGE" />
<Column Order="-80" Name="p1_ResponseHeaders_StatusCode" Label="StatusCode" DataType="DT_I4" />
<Column Order="-70" Name="p1_ResponseHeaders_StatusCode" Label="ErrorMessage" DataType="DT_STR" ValueTemplate="<<{$value$}|~|EQ:200|~||~|EQ:404|~|Not found|~|Unknown error,FUN_CASE>>" />
<Column Order="-60" Name="p1_ResponseHeaders_StatusCode" Label="UserId" DataType="DT_STR" Length="255" ValueTemplate="[$UserId$]" />
<Column Order="-50" Name="p1_ResponseHeaders_StatusCode" Label="MailFolderId" DataType="DT_STR" Length="255" ValueTemplate="[$MailFolderId$]" />
</OutputColumns>
</EndPoint>
<EndPoint Name="get_message_binary"
Label="Get Message by Id (Single) - Output binary data (EML RFC 822 / MIME)"
Url="/[$UserId$]/[$MailFolderId$]messages/[$MessageId$]/$value"
Method="GET"
Desc="Gets a single message binary data as *.EML File Content (RFC 822 / MIME) for a specified Message Id / mailbox / folder"
OutputHeaders="StatusCode"
HelpLink="">
<Params>
<Param Name="MessageId" Required="True"/>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MailFolderId" Template="MailFolderIdParam"/>
<Param Name="SaveContentAsBinary" Type="Property" Value="True"/>
<Param Name="ContineOn404Error" Label="Continue processing on 404 error" Type="Property" Value="True" Hidden="False" />
<Param Name="EnableCustomReplace" Type="Property" Value="True" Hidden="True" />
<Param Name="SearchFor" Type="Property" Value="^\s*$--regex" Hidden="True" />
<Param Name="ReplaceWith" Type="Property" Value="{}" Hidden="True" ValueTemplate="{error : {code : ''}}"/>
</Params>
<OutputColumns>
<Column Name="ResponseHeaders_StatusCode" Label="MessageId" DataType="DT_STR" Length="255" ValueTemplate="[$MessageId$]" />
<Column Name="ResponseHeaders_StatusCode" Label="StatusCode" DataType="DT_I4" />
<Column Name="data" Label="Data" DataType="DT_IMAGE" />
<Column Name="ResponseHeaders_StatusCode" Label="ErrorMessage" DataType="DT_STR" ValueTemplate="<<{$value$}|~|EQ:200|~||~|EQ:404|~|Not found|~|Unknown error,FUN_CASE>>" />
<Column Name="ResponseHeaders_StatusCode" Label="UserId" DataType="DT_STR" Length="255" ValueTemplate="[$UserId$]" />
<Column Name="ResponseHeaders_StatusCode" Label="MailFolderId" DataType="DT_STR" Length="255" ValueTemplate="[$MailFolderId$]" />
</OutputColumns>
</EndPoint>
<EndPoint Name="delete_message"
Label="Delete Message by Id (Single)"
Url="/[$UserId$]/[$MailFolderId$]messages/[$MessageId$]"
Method="DELETE"
Desc="Delete message by Id for a specific mailbox and folder"
OutputHeaders="StatusCode"
HelpLink="">
<Params>
<Param Name="MessageId" Required="True"/>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MailFolderId" Template="MailFolderIdParam"/>
<Param Name="ContineOn404Error" Label="Continue processing on 404 error" Type="Property" Value="True" Hidden="False" />
<Param Name="ConsumeResponseOnError" Type="Property" Value="True" Hidden="True" />
<Param Name="EnableCustomReplace" Type="Property" Value="True" Hidden="True" />
<Param Name="SearchFor" Type="Property" Value="^\s*$--regex" Hidden="True" />
<Param Name="ReplaceWith" Type="Property" Value="{}" Hidden="True" ValueTemplate="{error : {code : ''}}"/>
</Params>
<OutputColumns>
<Column Name="error.code" Label="Status" DataType="DT_STR" Length="10" ValueTemplate="<<{$value$}|~|Deleted|~|Error,FUN_IF_EMPTY>>"/>
<Column Name="ResponseHeaders_StatusCode" Label="StatusCode" DataType="DT_I4" />
<Column Name="ResponseHeaders_StatusCode" Label="MessageId" DataType="DT_STR" Length="255" ValueTemplate="[$MessageId$]" />
<Column Name="ResponseHeaders_StatusCode" Label="UserId" DataType="DT_STR" Length="255" ValueTemplate="[$UserId$]" />
<Column Name="ResponseHeaders_StatusCode" Label="MailFolderId" DataType="DT_STR" Length="255" ValueTemplate="[$MailFolderId$]" />
<Column Name="error.code" Label="ErrorCode" DataType="DT_WSTR" Length="1000" />
<Column Name="error.message" Label="ErrorMessage" DataType="DT_WSTR" Length="1000" />
</OutputColumns>
</EndPoint>
<EndPoint Name="delete_messages_by_search"
Label="Delete Messages - Using Search Condition (Bulk Delete)"
Url="/[$UserId$]/[$MailFolderId$]messages"
Method="GET"
Filter="$.value[*]"
ContentType="application/json"
Desc="Delete multiple messages for a specified search condition / mailbox / folder (Bulk delete outlook messages)"
Template="SearchMessageParams,ODataGeneralOptions, PaginationParams"
HelpLink="">
<Params>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MailFolderId" Template="MailFolderIdParam"/>
</Params>
<EndPoint Name="child_messages"
Url="/$batch"
ContentType="application/json"
Method="POST"
BatchSize="20"
Filter="$.responses"
>
<Params>
<Param Name="UserId" />
<Param Name="MailFolderId" />
</Params>
<Body>
<![CDATA[{ "requests" : {$rows$} } ]]>
</Body>
<LayoutMap>
<![CDATA[<?xml version="1.0" encoding="utf-8"?>
<settings>
<dataset id="root" readfrominput="True" />
<map name="id" src="id" />
<map name="method" value="DELETE" />
<map name="url" src="id" function="/<<[$UserId$]|~|Eq|~|me|~|me|~|users/[$UserId$],FUN_IF>>/mailfolders('[$MailFolderId$]')/messages/{$value$}" />
</settings>]]>
</LayoutMap>
</EndPoint>
<OutputColumns>
<Column Name="p1_id" Label="MessageId" DataType="DT_STR" Length="255" />
<Column Name="status" Label="Status" DataType="DT_I4" />
<Column Name="body.error.code" Label="ErrorCode" DataType="DT_WSTR" Length="1000" />
<Column Name="body.error.message" Label="ErrorMessage" DataType="DT_WSTR" Length="1000" />
</OutputColumns>
</EndPoint>
<EndPoint Name="download_message"
Label="Download Message by Id (Single *.EML File RFC 822 / MIME)"
Url="/[$UserId$]/[$MailFolderId$]messages/[$MessageId$]/$value"
Method="GET"
Desc="Downloads a single message as *.EML File type (RFC 822 / MIME) for a specified Message Id / mailbox / folder"
OutputHeaders="StatusCode"
HelpLink="">
<Params>
<Param Name="MessageId" Required="True"/>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MailFolderId" Template="MailFolderIdParam"/>
<Param Name="SaveContentAsBinary" Type="Property" Value="True"/>
<Param Name="OverwriteFile" Value="True" Options=";True;False"/>
<Param Name="SaveFolder" Value="c:\temp" Desc="Specify a disk folder path to save file(s) to" Required="True" Editor="FolderOpen"/>
<Param Name="ContineOn404Error" Label="Continue processing on 404 error" Type="Property" Value="True" Hidden="False" />
<Param Name="EnableCustomReplace" Type="Property" Value="True" Hidden="True" />
<Param Name="SearchFor" Type="Property" Value="^\s*$--regex" Hidden="True" />
<Param Name="ReplaceWith" Type="Property" Value="{}" Hidden="True" ValueTemplate="{error : {code : ''}}"/>
</Params>
<OutputColumns>
<Column Name="ResponseHeaders_StatusCode" Label="StatusCode" DataType="DT_I4" />
<Column Name="ResponseHeaders_StatusCode" Label="ErrorMessage" DataType="DT_STR" ValueTemplate="<<{$value$}|~|EQ:200|~||~|EQ:404|~|Not found|~|Unknown error,FUN_CASE>>" />
<Column Name="ResponseHeaders_StatusCode" Label="MessageId" DataType="DT_STR" Length="255" ValueTemplate="[$MessageId$]" />
<Column Name="ResponseHeaders_StatusCode" Label="UserId" DataType="DT_STR" Length="255" ValueTemplate="[$UserId$]" />
<Column Name="ResponseHeaders_StatusCode" Label="MailFolderId" DataType="DT_STR" Length="255" ValueTemplate="[$MailFolderId$]" />
<Column Name="data" Label="SavedFileSize" DataType="DT_I8"
ValueTemplate="<<[$SaveFolder$]\[$MessageId$].eml|~|{$value$}|~|[$OverwriteFile$],FUN_FILE_WRITE_BINARY_SAFE>>" />
</OutputColumns>
</EndPoint>
<EndPoint Name="download_messages_by_search"
Label="Download Messages by Search Condition (Multiple *.EML Files RFC 822 / MIME)"
Url="/[$UserId$]/[$MailFolderId$]messages"
Method="GET"
Filter="$.value[*]"
ContentType="application/json"
OutputHeaders="StatusCode"
Desc="Downloads multiple messages as *.EML File type (RFC 822 / MIME) for a specified search condition / mailbox / folder"
Template="SearchMessageParams,ODataGeneralOptions, PaginationParams,MessageChildOutputColumns"
HelpLink="">
<Params>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MailFolderId" Template="MailFolderIdParam"/>
<Param Name="OverwriteFile" Value="True" Options=";True;False"/>
<Param Name="SaveFolder" Value="c:\temp" Desc="Specify a disk folder path to save file(s) to" Required="True" Editor="FolderOpen"/>
</Params>
<EndPoint Name="child_messages"
Url="/[$UserId$]/[$MailFolderId$]messages/[$parent.id$]/$value"
Method="GET"
IncludeParentColumns="True"
>
<Params>
<Param Name="SaveContentAsBinary" Type="Property" Value="True"/>
<Param Name="UserId" ValueTemplate="<<{$value$}|~|Eq|~|me|~|me|~|users/{$value$},FUN_IF>>"/>
<Param Name="MailFolderId" ValueTemplate="mailfolders('{$value$}')/"/>
</Params>
</EndPoint>
<OutputColumns>
<Column Order="-100" Name="p1_id" Label="MessageId" DataType="DT_STR" Length="255" />
<Column Order="-90" Name="data" Label="SavedFileSize" DataType="DT_I8"
ValueTemplate="<<[$SaveFolder$]\[$parent.p1_id$].eml|~|{$value$}|~|[$OverwriteFile$],FUN_FILE_WRITE_BINARY_SAFE>>"
/>
<Column Order="-80" Name="p1_ResponseHeaders_StatusCode" Label="StatusCode" DataType="DT_I4" />
<Column Order="-70" Name="p1_ResponseHeaders_StatusCode" Label="ErrorMessage" DataType="DT_STR" ValueTemplate="<<{$value$}|~|EQ:200|~||~|EQ:404|~|Not found|~|Unknown error,FUN_CASE>>" />
<Column Order="-60" Name="p1_ResponseHeaders_StatusCode" Label="UserId" DataType="DT_STR" Length="255" ValueTemplate="[$UserId$]" />
<Column Order="-50" Name="p1_ResponseHeaders_StatusCode" Label="MailFolderId" DataType="DT_STR" Length="255" ValueTemplate="[$MailFolderId$]" />
</OutputColumns>
</EndPoint>
<!-- DOWNLOAD A SPECIFIC MESSAGE ATTACHMENT *-->
<EndPoint Name="download_message_attachment"
Label="Download Message Attachment (Single File)"
Desc="Download a specific attachment linked to the specified message Id."
Url="/[$UserId$]/messages/[$MessageId$]/attachments/[$AttachmentId$]/$value"
Method="GET"
OutputHeaders="StatusCode"
HelpLink="https://learn.microsoft.com/en-us/graph/api/attachment-get?view=graph-rest-1.0">
<Params>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MessageId" Label="Message ID" Required="True" Type="Placeholder" Desc="The message Id for which to get the attachment from." />
<Param Name="AttachmentId" IsKey="True" Label="Attachment ID" Required="True" Type="Placeholder" Desc="The attachment Id for the attachment to get." />
<Param Name="RequestTimeoutMs" Type="Property" Desc="Timeout in milliseconds after which download stops" Value="7200000" Required="True" Hidden="True" />
<Param Name="FileOverwriteMode" Type="Property" Value="AlwaysOverwrite" Required="True" />
<Param Name="TargetFilePath" Key="ResponseDataFile" Desc="Specify a disk file path to save file as" Type="Property" Required="True" Value="" Editor="FileSave" />
<Param Name="SaveContentAsBinary" Type="Property" Value="True" Hidden="True" />
<Param Name="RawOutputDataRowTemplate" Type="Property" Value="{Status:'Downloaded'}" />
<Param Name="EnableRawOutputModeSingleRow" Type="Property" Value="True" />
<Param Name="ContineOn404Error" Label="Continue processing on 404 error" Type="Property" Value="False" Hidden="False" />
</Params>
<OutputColumns>
<Column Name="data" DataType="DT_NTEXT" Label="Data" />
<Column Name="Status" DataType="DT_STR" />
<Column Name="ResponseHeaders_StatusCode" Label="StatusCode" DataType="DT_I4" />
</OutputColumns>
</EndPoint>
<EndPoint Name="download_message_attachments"
Label="Download Message Attachments (Multiple Files) - Using Search Condition"
Url="/[$UserId$]/[$MailFolderId$]messages"
Method="GET"
Filter="$.value[*]"
ContentType="application/json"
Desc="Downloads multiple attachments for a specified search condition / mailbox / folder"
Template="SearchMessageParams,ODataGeneralOptions, PaginationParams"
HelpLink="">
<Params>
<Param Name="UserId" Template="UserIdParam" />
<Param Name="MailFolderId" Template="MailFolderIdParam"/>
<Param Name="OverwriteFile" Value="True" Options=";True;False"/>
<Param Name="SaveFolder" Value="c:\temp" Desc="Specify a disk folder path to save file(s) to" Required="True" Editor="FolderOpen"/>
</Params>
<EndPoint Name="child_message_attachments"
Url="/[$UserId$]/[$MailFolderId$]messages/[$parent.id$]/attachments"
Method="GET"
IncludeParentColumns="True"
Filter="$.value"
Desc="See contentBytes column - it invokes FUN_FILE_WRITE_BINARY_SAFE to save Base64 bytes to file."
>
<Params>
<Param Name="UserId" ValueTemplate="<<{$value$}|~|Eq|~|me|~|me|~|users/{$value$},FUN_IF>>"/>
<Param Name="MailFolderId" ValueTemplate="mailfolders('{$value$}')/"/>
</Params>
</EndPoint>
<OutputColumns>
<Column Name="id" Label="Id" DataType="DT_STR" Length="255" />
<Column Name="p1_id" Label="MessageId" DataType="DT_STR" Length="255" />
<Column Name="name" Label="Name" DataType="DT_WSTR" Length="500" />
<Column Name="contentId" Label="ContentId" DataType="DT_STR" Length="255" />
<Column Name="contentType" Label="ContentType" DataType="DT_STR" Length="255" />
<Column Name="contentLocation" Label="ContentLocation" DataType="DT_STR" Length="1000" />
<Column Name="isInline" Label="IsInLine" DataType="DT_BOOL" />
<Column Name="lastModifiedDateTime" Label="LastModifiedDateTime" DataType="DT_DBTIMESTAMP" />
<Column Name="size" Label="Size" DataType="DT_I4" />
<Column Name="name" Label="SavedPath" DataType="DT_WSTR"
ValueTemplate="[$SaveFolder$]\[$parent.id,FUN_MD5HEX$]_{$value$}" />
<Column Name="contentBytes" Label="SavedSize" DataType="DT_I8"
ValueTemplate="<<[$SaveFolder$]\[$parent.id,FUN_MD5HEX$]_[$parent.name$]|~|{$value$}|~|[$OverwriteFile$],FUN_FILE_WRITE_BINARY_SAFE>>" />
</OutputColumns>
</EndPoint>
</EndPoints>
<Tables>
<Table Name="MyMessages"
SelectEndPoint="get_my_messages"
LookupEndPoint="get_my_message"
InsertEndPoint="send_mail"
/>
<Table Name="MyMailFolders"
SelectEndPoint="get_my_mailfolders"
LookupEndPoint="get_my_mailfolder"
/>
<Table Name="Users"
SelectEndPoint="get_users"
LookupEndPoint="get_user"
/>
<Table Name="Groups"
SelectEndPoint="get_groups"
LookupEndPoint="get_group"
/>
</Tables>
<Examples>
<Example Default="True" Group="ODBC" Slug="read-messages-current-user" Label="Read messages for the current user">
<Desc><![CDATA[<p>Gets all messages for the current user's mailbox. Use <code>MyMessages</code> to list every message in the default folder.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMessages]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-users" Label="Read users">
<Desc><![CDATA[<p>Gets all users. Use <code>WHERE Id='...'</code> to limit to one user.</p>]]></Desc>
<Code>
<![CDATA[select * from Users
--Where Id='049beb7f-03e0-4b0d-825d-73567b6786e9'
]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-groups" Label="Read groups">
<Desc><![CDATA[<p>Gets all groups. Use <code>WHERE Id='...'</code> to limit to one group.</p>]]></Desc>
<Code>
<![CDATA[select * from Groups
--Where Id='049beb7f-03e0-4b0d-825d-73567b6786e9'
]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-message-by-id" Label="Read a message by ID">
<Desc><![CDATA[<p>Gets a single message by ID. Use <code>WHERE Id='...'</code> with the message ID from the mailbox.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMessages
WHERE Id='AAXkADIwNzNhODMyLTZiMTQtNDhiMC02OWQzLTc5YTY5M2IyMjk0NABGAyAAAACbj2hVuNphT74wylrfU4ixBwAbUV6IxRnpQrqzrb2WfacdAAAAAAEMAAAbUV6IxRnpQrqzrb2WfacdAAAysBnxAAA=']]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-for-user" Label="Read messages for a specified user">
<Desc><![CDATA[<p>Gets messages for a given user. Supply <code>UserID</code> in the <code>WITH</code> clause (user email or GUID).</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM get_messages
WITH (UserID='firstname.lastname@domainname.com')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-first-n-messages" Label="Read first N messages for a specified user">
<Desc><![CDATA[<p>Gets the first N messages for a user. Supply <code>UserID</code> and <code>PageSize</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM get_messages
WITH (UserID='firstname.lastname@domainname.com', PageSize='5')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-in-folder" Label="Read messages in a mail folder">
<Desc><![CDATA[<p>Gets messages in a mail folder. Supply <code>MailFolderID</code> in the <code>WITH</code> clause (e.g. <code>INBOX</code> or a folder ID).</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM get_messages
WITH (
MailFolderID='INBOX' --or use mai folder id
)]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-subject-starts" Label="Read messages with subject starting with text">
<Desc><![CDATA[<p>Gets messages whose subject starts with given text. Use <code>SearchCriteria</code> in the <code>WITH</code> clause (e.g. <code>startsWith(Subject,'Announcements for')</code>). See Microsoft Graph filter docs for more conditions.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM get_messages
WITH (UserID='firstname.lastname@domainname.com', SearchCriteria='startsWith(Subject,''Announcements for'')')
--Check this link to learn more about search conditions: https://learn.microsoft.com/en-us/graph/filter-query-parameter?tabs=http
]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-with-attachments" Label="Read messages that have attachments">
<Desc><![CDATA[<p>Gets only messages that have attachments. Use <code>SearchCriteria='hasAttachments eq true'</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM get_messages
WITH (UserID='firstname.lastname@domainname.com', SearchCriteria='hasAttachments eq true')
--Check this link to learn more about search conditions: https://learn.microsoft.com/en-us/graph/filter-query-parameter?tabs=http
]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-unread-messages" Label="Read unread messages">
<Desc><![CDATA[<p>Gets only unread messages. Use <code>SearchCriteria='IsRead eq false'</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM get_messages
WITH (UserID='firstname.lastname@domainname.com', SearchCriteria='IsRead eq false')
--Check this link to learn more about search conditions: https://learn.microsoft.com/en-us/graph/filter-query-parameter?tabs=http
]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-order-sent-asc" Label="Read messages ordered by sent time (ascending)">
<Desc><![CDATA[<p>Gets messages ordered by sent date/time ascending. Use <code>OrderBy='sentDateTime'</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMessages WITH (OrderBy='sentDateTime')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-order-sent-desc" Label="Read messages ordered by sent time (descending)">
<Desc><![CDATA[<p>Gets messages ordered by sent date/time descending. Use <code>OrderBy='sentDateTime desc'</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMessages WITH (OrderBy='sentDateTime desc')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-order-received-asc" Label="Read messages ordered by received time (ascending)">
<Desc><![CDATA[<p>Gets messages ordered by received date/time ascending. Use <code>OrderBy='receivedDateTime'</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMessages WITH (OrderBy='receivedDateTime')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-order-received-desc" Label="Read messages ordered by received time (descending)">
<Desc><![CDATA[<p>Gets messages ordered by received date/time descending. Use <code>OrderBy='receivedDateTime desc'</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMessages WITH (OrderBy='receivedDateTime desc')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-order-sender-asc" Label="Read messages ordered by sender name (ascending)">
<Desc><![CDATA[<p>Gets messages ordered by sender name ascending. Use <code>OrderBy='sender/emailAddress/name'</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMessages WITH (OrderBy='sender/emailAddress/name')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-messages-order-sender-desc" Label="Read messages ordered by sender name (descending)">
<Desc><![CDATA[<p>Gets messages ordered by sender name descending. Use <code>OrderBy='sender/emailAddress/name desc'</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMessages WITH (OrderBy='sender/emailAddress/name desc')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-mail-folders" Label="Read mail folders">
<Desc><![CDATA[<p>Gets all mail folders for the current user. Use the returned folder ID in examples that need <code>MailFolderID</code>.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMailFolders]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-mail-folder-by-id" Label="Read a mail folder by ID">
<Desc><![CDATA[<p>Gets a single mail folder by ID. Use <code>WHERE Id='...'</code> with the folder ID from Read mail folders.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM MyMailFolders
WHERE (Id='AAMkADIwNzNhODMyLTZiMTQtNDhiMCz4OWQzLTc5YTY5M2IyMjk0NAYuAAAAAACbj2hVuNphT74wyYrfU4ixAQAbUV6IxRnpQrWzrb2WfacdAAAAAAEKAcA=')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-attachments-for-message" Label="Read attachments for a message">
<Desc><![CDATA[<p>Gets all attachments for a message. Supply <code>MessageId</code> in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM get_message_attachments
WITH (MessageId='AAXkADIwNzNhODMyLTZiMTQtNDhiMC02OWQzLTc5YTY5M2IyMjk0NABGAyAAAACbj2hVuNphT74wylrfU4ixBwAbUV6IxRnpQrqzrb2WfacdAAAAAAEMAAAbUV6IxRnpQrqzrb2WfacdAAAysBnxAAA=')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="read-attachment-by-ids" Label="Read an attachment by ID">
<Desc><![CDATA[<p>Gets a single attachment by message ID and attachment ID. Supply both IDs in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM get_message_attachment
WITH (MessageId='AAXkADIwNzNhODMyLTZiMTQtNDhiMC02OWQzLTc5YTY5M2IyMjk0NABGAyAAAACbj2hVuNphT74wylrfU4ixBwAbUV6IxRnpQrqzrb2WfacdAAAAAAEMAAAbUV6IxRnpQrqzrb2WfacdAAAysBnxAAA=',
AttachmentId='AAMkADIwNzNhODMyLTZiMTQtNDhiM704OWQzLTc5YTY5M2IyMjk0NABGAAqAAACbj2hVuNphT74wylrfU4ixBwAbUV6IxRnpQrqzrb2WfacdAABBAAEMAAAbUV6IxRnpQrqzrb2WfacdAAAysB9xAAABEgAQAK6dg4NuEa5Fmn_5Tp_D_XM=')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="download-attachment-to-file" Label="Download an attachment to a file">
<Desc><![CDATA[<p>Downloads a single attachment to a disk file. Supply <code>MessageId</code> and <code>AttachmentId</code> in the <code>WITH</code> clause and set <code>TargetFilePath</code> to the local path where the file should be saved.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM download_message_attachment
WITH (MessageId='AAMkADIwNz2hODMyLTZiMTQtNDhiMC04OWQzLTc5YTY5M2IyMjk0NABGZAAAAxCbj2hVuNphT74wylrfU4ixBwAbUV6IxRnpQ6qzrb2WfacdAAAAAAEMAAAbUb6IxRnpQrqzrb2WfacdAAAysBnxAAA=',
AttachmentId='AAMkADIwNzNhODMyLTZiMTQtNDhiMC04cWQzLTc5YTY5M2IyMjk0NABGAAAAAACbj2hVuNphTZ4wylrfU4ixBwAbUV6IxRnpQrqzrb2WfacdAAAAAAEMAA8bUV6IxRnpQrqzrb2WfacdAAAysBnxAAABEgAQAK6dg4NuEa5Fmn_5Tp_D_XM=',
TargetFilePath='C:\temp\photo.png'
)]]>
</Code>
</Example>
<Example Group="ODBC" Slug="download-message-as-eml" Label="Download a message as .EML file">
<Desc><![CDATA[<p>Downloads a single message as an .EML file (RFC 822 / MIME). Supply Message Id, User Id, and MailFolder Id; the message is saved to the path given in <code>TargetFilePath</code>. The file can be opened in most email clients and includes attachments.</p>]]></Desc>
<Code>
<![CDATA[SELECT * FROM
download_message
WITH(
MessageId='AAMkADliN2RmZGM4..........3JFHGAAf2n2J-AAA=',
SaveFolder='c:\temp',
OverwriteFile='True',
--UserId='me', --or use "user-id" or use "email"
--UserId='someuser@mycompany.onmicrosoft.com',
--UserId='1487fe8b-f09f-4015-a817-b8b9fe2a3edc',
MailFolderId='INBOX' --or use mailbox ID
)]]>
</Code>
</Example>
<Example Group="ODBC" Slug="download-multiple-messages-as-eml" Label="Download multiple messages as .EML files with search filters">
<Desc><![CDATA[<p>Searches for messages by condition and downloads each as an .EML file (RFC 822 / MIME). Supply User Id, MailFolder Id, optional search conditions, and <code>SaveFolder</code>. Each message is saved as its own file; files can be opened in most email clients and include attachments.</p>]]></Desc>
<Code>
<![CDATA[
SELECT * FROM download_messages_by_search
WITH(
SaveFolder='c:\download', --save as *.eml files
OverwriteFile='True',
MailFolderId='INBOX', --or use mailbox folder Id (see get_mailfolders endpoint)
UserId='me' --or use "user-id" or use "email"
--search mail with attachments, sent after 2023-03-01, subject contains string "invoice" and from email is microsoft-noreply@microsoft.com
--SearchCriteria='hasAttachments eq true and sentDateTime gt 2023-03-01 and contains(subject, ''invoice'') and from/emailAddress/address eq ''microsoft-noreply@microsoft.com'' ',
)
--Check this link to learn more about search conditions: https://learn.microsoft.com/en-us/graph/filter-query-parameter?tabs=http
]]>
</Code>
</Example>
<Example Group="ODBC" Slug="download-multiple-attachments-search" Label="Download multiple attachments with search condition">
<Desc><![CDATA[<p>Downloads Office 365 email attachments that match search criteria. You can combine conditions (e.g. has attachments only, sent after a date, subject contains text, from a specific sender). Supply <code>SaveFolder</code> and the search parameters in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[
SELECT * FROM download_message_attachments
WITH(
SaveFolder='c:\download',
OverwriteFile='True',
MailFolderId='INBOX', --or use mailbox ID
UserId='me', --or use "user-id" or use "email"
--search mail with attachments, sent after 2023-03-01, subject contains string "invoice" and from email is microsoft-noreply@microsoft.com
SearchCriteria='hasAttachments eq true and sentDateTime gt 2023-03-01 and contains(subject, ''invoice'') and from/emailAddress/address eq ''microsoft-noreply@microsoft.com'' ',
EmailBodyFormat='HTML' --or text
)
--Check this link to learn more about search conditions: https://learn.microsoft.com/en-us/graph/filter-query-parameter?tabs=http
]]>
</Code>
</Example>
<Example Group="ODBC" Slug="delete-multiple-messages-search" Label="Delete multiple messages with search condition">
<Desc><![CDATA[<p>Deletes multiple messages that match a search condition. Supply User Id, MailFolder Id, and search criteria (e.g. has attachments, sent after date, subject contains text, from address). Only messages matching all conditions are deleted.</p>]]></Desc>
<Code>
<![CDATA[
SELECT * FROM delete_messages_by_search
--To delete max N messages set limit below
--LIMIT 5
WITH(
MailFolderId='INBOX', --or use mailbox ID
UserId='me', --or use "user-id" or use "email"
--UserId='1487fe8b-f09f-4015-a817-b8b9fe2a3edc',
--search mail with attachments, sent after 2023-03-01, subject contains string "invoice" and from email is microsoft-noreply@microsoft.com
--Your Microsoft invoice G073237208 is ready
SearchCriteria='hasAttachments eq true and sentDateTime gt 2025-07-01 and contains(subject, ''Your Microsoft invoice'') and from/emailAddress/address eq ''microsoft-noreply@microsoft.com'' '
)
--Check this link to learn more about search conditions: https://learn.microsoft.com/en-us/graph/filter-query-parameter?tabs=http
]]>
</Code>
</Example>
<Example Group="ODBC" Slug="delete-message-by-id" Label="Delete a message by ID">
<Desc><![CDATA[<p>Deletes a single message by ID. Supply <code>MessageId</code> and optionally User Id and MailFolder Id in the <code>WITH</code> clause.</p>]]></Desc>
<Code>
<![CDATA[
SELECT * FROM delete_message
WITH(
UserId='me',
--UserId='1487fe8b-f09f-4015-a817-b8b9fe2a3edc', --OR use Id
--UserId='myname@company.com', --OR use email
MessageId='AAMkADliN2......iS7RK5Ny-I3JFHGAAZRll7aAAA=',
MailFolderId='INBOX' --OR use mailbox ID
)
]]>
</Code>
</Example>
<Example Group="ODBC" Slug="send-email" Label="Send an email">
<Desc><![CDATA[<p>Sends an email via the Office 365 API. You can set headers, HTML or text body, recipients, and attach local files. Use <code>BodyContentType</code> set to <code>Text</code> for plain text instead of HTML.</p>]]></Desc>
<Code>
<![CDATA[INSERT INTO MyMessages
(Subject, BodyContentType, BodyContent
, ToRecipients, CcRecipients, BccRecipients
, InternetMessageHeaders
, Attachments, Importance, IsDeliveryReceiptRequested, IsReadReceiptRequested
, SaveToSentItems)
VALUES
('Employee Reviews Scheduled', 'HTML', '<b>Hi All,</b> employee reviews have been scheduled. <span style="text-decoration: underline;">Please reflect this in your notes.</span>',
'[{ "emailAddress": { "address": "john.doe@domain.com" }}, { "emailAddress": { "address": "jane.doe@domain.com" }}]',
'[{ "emailAddress": { "address": "mary.dawson@domain.com" }}]',
'[{ "emailAddress": { "address": "ryan.connor@domain.com" }}]',
'[{ "name": "x-custom-header-group-name", "value": "Managers" }, { "name": "x-custom-header-group-id", "value":"MGR001" }]',
'[
{
"@odata.type": "#microsoft.graph.fileAttachment",
"name": "file1.txt",
"contentType": "text/plain",
"contentBytes": "<<c:\file1.txt,FUN_FILE_BASE64ENC>>"
},
{
"@odata.type": "#microsoft.graph.fileAttachment",
"name": "profile-picture.png",
"contentType": "image/png",
"contentBytes": "<<c:\profile-picture.png,FUN_FILE_BASE64ENC>>"
}
]',
'normal', 'false', 'false', 'true')]]>
</Code>
</Example>
<Example Group="ODBC" Slug="generic-api-request" Label="Call generic API request">
<Desc><![CDATA[<p>Calls any Office 365 / Outlook API using the <code>generic_request</code> endpoint. Use when the connector does not define a specific endpoint but you need to call that API.</p>]]></Desc>
<Code>
<![CDATA[ SELECT * FROM generic_request
WITH (
URL='/users/049beb7f-03e0-4b0d-825d-73567b6786e9'
, RequestMethod='GET'
, Filter='$' --optional if you like to read from array inside document
--Try commenting below line or define static metadata (speed up API calls by not requesting columns)
, Meta='businessPhones:String(220); displayName:String(230); givenName:String(100); jobTitle:String(255); mail:String(310); mobilePhone:String(255); officeLocation:String(255); preferredLanguage:String(255); surname:String(140); userPrincipalName:String(500); id:String(360); '
)]]>
</Code>
</Example>
</Examples>
</ApiConfig>