With version 28, we now support email delivery via Microsoft Graph. This gives you a future-proof method to send your email.
It is extremely easy to use. All you need are the new DLLs …
- combit.ListLabel28.MailExtensions_x86.dll / combit.ListLabel28.MailExtensions_x64.dll (je nach Bitness Ihrer Applikation)
- combit.ListLabel28.GraphMailExtension.dll
… as well as some assemblies under the MIT License or the Microsoft .NET Library License. These modules are located in the “\Miscellaneous\Optional Modules Under OSI Licenses\Mail Extensions” folder of the List & Label installation.
Next, set the shipping provider to “GRAPH” in order to use the new feature, and pass on the additional information required for authentication. Here’s a small .NET example using the MailJob class:
MailJob mailJobLL = new MailJob(); mailJobLL.Provider = "GRAPH"; mailJobLL.AdditionalOptions.Add("Graph.AuthType", "3"); // use bearer token authentication mailJobLL.AdditionalOptions.Add("Graph.ClientId", "697517f7-70dd-4ef9-8a5c-xxxxxxxxxxxx"); // client id of the app mailJobLL.AdditionalOptions.Add("Graph.TenantId", "fe0ef3d4-0076-4c1f-9b6c-xxxxxxxxxxxx"); // azure domain mailJobLL.AdditionalOptions.Add("Graph.RedirectUri", "msal697517f7-70dd-4ef9-xxxxxxxxxxxx://auth"); // redirect here mailJobLL.AdditionalOptions.Add("Graph.UserName", "<Your Graph Username>"); // we either need user name or user object id mailJobLL.AdditionalOptions.Add("Graph.UserObjectId", "34567890-3456-3456-3456-xxxxxxxxxxxx"); // we either need user name or user object id mailJobLL.AdditionalOptions.Add("Graph.BearerToken", "xxxxxxxxxxxx"); // and of course the promised token that we previously acquired mailJobLL.From = "<From>"; mailJobLL.To = "<To>"; mailJobLL.Subject = "My Test Message"; mailJobLL.BodyHtml = File.ReadAllText(@"C:\temp\mailcontent.html"); mailJobLL.Send();
Using this approach means that it is entirely the responsibility of the user to provide the valid access token.
Alternatively, you can work with an application authentication, if you have the required permissions for the application. In this case, you’ll use:
mailJobLL.AdditionalOptions.Add("Graph.AuthType", "1"); // use app authentication mailJobLL.AdditionalOptions.Add("Graph.SecretClientKeyId", "7538351a-fddf-41d9-b7b3-xxxxxxxxxxxx"); // app authentication only mailJobLL.AdditionalOptions.Add("Graph.SecretClientKeyValue", "xxxxxxxxxxxx"); // app authentication only
In this case, it’s no longer required to transfer a bearer token.
In order to get a bearer token for user authentication at the right point, you can use the Microsoft libraries, for example.
PublicClientApplicationBuilder pcaConfig = PublicClientApplicationBuilder.Create(clientId) .WithTenantId(tenantId) .WithRedirectUri(redirectUri); ClientApplication = (Microsoft.Identity.Client.PublicClientApplication)pcaConfig.Build(); var authResult = ClientApplication.AcquireTokenInteractive(new string[] { scope }) .WithPrompt(Microsoft.Identity.Client.Prompt.ForceLogin) .WithLoginHint(userName) .ExecuteAsync().Result; bearerToken = authResult.AccessToken;
The result in Office 365 will look like this: