E-Mail-Versand über Office 365 / Microsoft Graph mit List & Label

Microsoft legt in seinem Office-365-Paket immer mehr Steine in den Weg, um SMTP-E-Mails „einfach so“ mit der Basis-Authentifizierung zu versenden (siehe z.B. hier) und mit MAPI/XMAPI in der Cloud sowieso. Aber auch on-premise bringt immer wieder neue Herausforderungen mit sich (hast du dich schon mal mit unserem Cross-Bitness-Proxy für x86-Applikationen und x64-Office beschäftigt? 🙂 ). Es war also höchste Zeit, eine neue, aktuelle Lösung für den sehr häufig verwendeten E-Mail-Versand anzubieten.

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.

E-Mail-Versand über Office 365 Microsoft Graph

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:

ergebnis des codes in office 365

Empfohlene Artikel

Schreibe einen Kommentar