Mit der Version 28 unterstützen wir nun auch den E-Mail-Versand über Microsoft Graph. Damit steht dir ein zukunftssicherer Weg für den Versand zur Verfügung.
Die Verwendung ist denkbar einfach. Du brauchst lediglich die neuen DLLs …
- combit.ListLabel28.MailExtensions_x86.dll / combit.ListLabel28.MailExtensions_x64.dll (je nach Bitness Ihrer Applikation)
- combit.ListLabel28.GraphMailExtension.dll
… sowie einige unter der MIT-Lizenz bzw. der Microsoft-.NET-Library-Lizenz stehenden Assemblies auszuliefern. Diese Module befinden sich im Verzeichnis „\Verschiedenes\Optionale Module unter OSI-Lizenzen\Mail Extensions“ der List & Label-Installation.
Setze dann den Versandprovider auf „GRAPH“, um das neue Feature zu nutzen und übergebe die zusätzlich notwendigen Informationen zur Authentifizierung. Hier ist ein kleines Beispiel für .NET, das die MailJob-Klasse verwendet:
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();
Bei dieser bevorzugten Herangehensweise liegt die Bereitstellung des gültigen Zugriffstokens vollständig in der Verantwortung des Anwenders bzw. der Anwenderin.
Alternativ kannst du – entsprechende Rechte für die Applikation vorausgesetzt – mit einer Applikations-Authentifizierung arbeiten. In diesem Fall verwendest du:
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
Die Übergabe eines Bearer Token selbst ist in diesem Fall nicht mehr erforderlich.
Um an geeigneter Stelle ein Bearer Token für eine Benutzer-Authentifizierung zu erhalten, kannst du hierfür z.B. auf die Microsoft-Bibliotheken zurückgreifen.
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;
Das Ergebnis dieses Codes sieht in Office 365 dann so aus: