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:






