skip to Main Content
Abschaltung Der SMTP Basic Auth In Exchange Online

Abschaltung der SMTP Basic Auth in Exchange online

Microsoft macht jetzt ernst und will im zweiten Halbjahr 2021 die SMTP Basic Authentication in Exchange online abschalten. Für die User sollte dies keine Veränderungen bringen. Inzwischen werden auch die Warnungen im Microsoft 365 Message Center immer dringlicher, z.B. MC237741 oder MC204828

Gerne werden aber auch in der IT Automatismen benutzt, die automatisch Emails verschicken und der einfachste Weg war einen SMTP Server zu verwenden. Mit Office 365 und Exchange online sind nun einige dieser SMTP Clients auf die Cloud konfiguriert. Daher besteht Handlungsbedarf.

Microsoft sagt dazu: “nehmt halt OAUTH. Achso, also bitte beschäftigt euch mit dem Protokoll, implementiert es, und alles ist gut.”

Endgeräte und andere SMTP Clients, muss man eben schauen, wie man die ans Laufen bringt. Nicht hilfreich und eine Lösung dafür ist kompliziert. Wer einen internen SMTP relay nutzen kann, kann hier schon aufhören zu lesen.

Hin und wieder nutze ich ganz gerne PowerShell um das eine oder andere in der IT nicht von Hand machen zu müssen. Hier bin ich jetzt über eben das Problem mit dem E-Mail verschicken gestolpert.

Und PowerShell ist ja auf jedem System vorhanden, sogar mit einer Entwicklungsumgebung. Die ist zwar nicht zu vergleichen mit Visual Studio Code oder Ähnlichem, aber mir reicht es. Hier kommt ein Punkt zu tragen der später noch wichtig wird. Die vorhandene PowerShell Version ist fast immer 5.1. Diese ist zwar alt, aber man muss nichts installieren oder gar vorhandene Skripte auf PowerShell 7 umbauen. Die Vorhandenen Skripte sind oftmals alt, evolutionär weiterentwickelt, und kleiner weis mehr so genau, was die eigentlich im Detail machen. Also bitte auf PowerShell 5.1 bleiben.

Also habe ich mal ge”bing”t was man so machen kann. Die prominentesten Suchtreffer gingen in eine Richtung, die mir nicht behagte. Der Entwickler solle doch micht mehr Microsoft Exchange verwenden, sondern sich einen ganz anderen externen Provider suchen und sich einfach dort ein kostenloses Konto anlegen. Die Mails gehen dann außerhalb der Organisation entlang. Um ehrlich zu sein will ich gar nicht wissen, wie viele Entwickler schon diesen Weg gegangen sind.

Bislang wurde oft die PowerShell Funktion Send-MailMessage verwendet. Dieses spricht die System APIs an. Nach etwas Recherche stellt sich heraus, das Microsoft beides, also die Funktion und die APIs dringend nicht mehr empfiehlt.

Aber der geneigte Entwickler könne doch auch die Microsoft Authentication Library (MSAL) und etwas names MailKit verwenden. Letzteres wird auf NuGet angeboten. Um es etwas abzukürzen: nach drei Tagen Forschungsarbeit ist es mir nicht gelungen MailKit mit PowerShell 5.1 zur Zusammenarbeit zu bewegen. Es liegt vermutlich aber an mir und nicht am Tool.

Wenigstens habe ich bei meinen Forschungen eine praktische Funktion aus der PowerShell Galary gefunden MSAL.PS. Mit der Funktion Get-MSALToken und etwas Ausprobieren hatte ich so den OAUTH Teil elegant und wie empfohlen gelöst. Die Überlegungen zur App Registrierung, waren allerdings etwas umfangreicher.

Viele vorhandene Lösungen, setzten auf eine registrierte App und nutzen das “client secret” also hat die App die Rechte zum SMTP E-Mail senden. Damit müsste man für sehr viele Apps registrieren. Da ist eine “Pubic client/native” App-Registrierung einfacher. Es muss nur eine App registriert werden und die bisherigen Benutzeranmeldeinformationen können zusammen mit der “Client ID” weiterverwendet werden.

Jetzt nur noch mein schönes neuen OAUTH Token and den SMTP Server bringen. Und was soll ich sagen, ich war ich ausgezählt. Also musste am Ende ein eigener “handgeschnitzer” SMTP Client her.

Die gute Nachricht ist: für alle anderen ist das Problem lösbar, das PowerShell und eine Anleitung für die

Funktion Send-O365MailMessage,

die alles kann, findet sich auf GitHub. Damit kann man zwar nicht 1:1 Send-MailMessage ersetzen, aber mit wenig Aufwand kann man vorhandene PowerShell 5.1 Skripts wieder zum E-Mail senden bringen.

Eine Doku zum Setup findet sich dort auch.

Die Syntax ist ähnlich wie die der Send-MailMessage Funktion. Zusätzlich kann man einfach Bilder oder andere Dateien in HTML Emails einbetten.

Sollte jemand eine Einfachere, Besser oder elegantere Lösung kennen, würde ich mich auch freuen davon zu erfahren.

 

Update:

Inzwischen hat etwas bei Send-O365MailMessage getan: Die Funktion hat zusätzlich zum Senden mit SMTP OAUTH noch die Option mit der Microsoft GraphAPI zu senden bekommen. Dafür wird ein anderes / weiteres Recht der registrierten App benötigt. Der Standard Weg ist jetzt E-Mail mit der GraphAPI senden. Mit dem Schalter -SendWithSMTP kann auf SMTP mit OAUTH umgestellt werden. Die sonstige Syntax ist gleichgeblieben.

Back To Top