---
title: "SendMail() über M365 mit SMTP und OAuth2"
---
Der Mailversand über Microsoft 365 mit Basic Auth ist ab September 2025 nicht mehr erlaubt. Damit weiterhin Mails aus SMT School versendet werden können, muss in M365 SMT School als App registriert werden. Dieser App kann danach die Berechtigung erteilt werden, Mails für bestimmte Postfächer zu versenden.

Grundsätzlich beschreibt [https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth](https://learn.microsoft.com/en-us/exchange/client-developer/legacy-protocols/how-to-authenticate-an-imap-pop-smtp-application-by-using-oauth) das Verfahren, die Dokumentation ist aber etwas kompliziert und scheint nicht überall vollständig zu sein. Die folgenden Schritte beschreiben die für den Versand aus SMT School notwendige Konfiguration.

# Application in Microsoft 365 registrieren und Service Principal dazu erstellen

!!! info
    Die Vorgänge in diesem Abschnitt müssen nur einmal durchgeführt werden. Danach ist alles vorbereitet, um die Berechtigung an die notwendigen Benutzer zu erteilen.

Voraussetzungen:

- Zugriff auf das **Microsoft 365 Admin Center**
- Benutzer mit mindestens **Application Developer** Berechtigung

(Siehe auch [https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app](https://learn.microsoft.com/en-us/entra/identity-platform/quickstart-register-app) )

## 1. Neue App registrieren

- Anmelden im **Microsoft 365 Admin Center**(im Tenant des entsprechenden Kunden)
- **Entra Admin Center** öffnen (Menüpunkt im deutschen Admin Portal: **Identität**)
- **App registrations** öffnen
- Neue App registration erstellen. Der Display name kann frei gewählt werden, z.B. **SMT School**

## 2. Client Secret erstellen

- In der neu erstellten App ins Menü **Certificates & secrets** wechseln
- Ein neues **Client secret** erstellen (Description frei wählbar).
**Achtung**: Der Value des neuen Secrets muss kopiert und irgendwo gespeichert werden. Später kann dieser hier nicht mehr angezeigt werden.
- Ablaufdatum des Client secrets notieren und allenfalls irgendwo eine Erinnerung vor Ablauf konfigurieren. ![image-20250807-092721.png](https://swissmains.atlassian.net/wiki/download/attachments/1078919182/image-20250807-092721.png)

## 3. Berechtigungen erteilen

- In der neu erstellten App ins Menü **API permissions** wechseln
- Die folgende Berechtigungen aus **APIs my organization uses / Application Permissions** hinzufügen:
    - **Office 365 Exchange Online** > **Mail.Send**
    - **Office 365 Exchange Online** > **SMTP.SendAsApp** ![image-20250814-075536.png](https://swissmains.atlassian.net/wiki/download/attachments/1078919182/image-20250814-075536.png)![image-20250814-081030.png](https://swissmains.atlassian.net/wiki/download/attachments/1078919182/image-20250814-081030.png)![image-20250812-080111.png](https://swissmains.atlassian.net/wiki/download/attachments/1078919182/image-20250812-080111.png)![image-20250814-075651.png](https://swissmains.atlassian.net/wiki/download/attachments/1078919182/image-20250814-075651.png)
- Die Berechtigung muss nach dem Hinzufügen noch genehmigt werden (Grant admin consent for …). ![image-20250813-100547.png](https://swissmains.atlassian.net/wiki/download/attachments/1078919182/image-20250813-100547.png)

## 4. Angaben für die spätere Verwendung notieren

Die folgenden Angaben aus der neu registrierten App werden später benötigt:

- tenantId: Nummer 3 im Screenshot unten
- appName: Nummer 1 im Screenshot unten
- clientId: Nummer 2 im Screenshot unten
- clientSecret: Value, welcher in [2. Client Secret erstellen](sendmail-über-m365-mit-smtp-und-oauth2.md#2.-Client-Secret-erstellen) gespeichert wurde

Die untenstehende Ansicht ist mit “Overview” / “Übersicht” zugänglich. Zusätzlich müssen diese Werte an SwissMains gesendet werden für die Weiterverarbeitung in den Reports.

![image-20250807-134124.png](https://swissmains.atlassian.net/wiki/download/attachments/1078919182/image-20250807-134124.png)

## 5. Exchange Service Principal für registrierte App erstellen

Damit im Exchange die notwendigen Berechtigungen für die gewünschten Postfächer vergeben werden können, muss für die eben erstellte App ein Service Principal in Exchange erstellt werden.

Die nachfolgenden Schritte erfordern die Powershell Module Microsoft.Graph und ExchangeOnlineManagement. Falls diese noch nicht installiert sind, müssen sie installiert werden. Die Powershell muss dazu im Administrator-Modus ausgeführt werden.

```
Install-Module Microsoft.Graph -Scope CurrentUser -Repository PSGallery -Force
Install-Module -name ExchangeOnlineManagement
```

**Hinweis 1**: Einige Versionen von Microsoft.Graph und ExchangeOnlineManagement verwenden inkompatible Versionen der Microsoft Authentication Library. Dies führt dazu, dass es Fehler beim Laden der Module geben kann. Je nach Version kann die Reihenfolge beim Laden eine Rolle spielen bzw. das Problem lösen. Am einfachsten werden die beiden Module in separaten Powershell-Instanzen geladen.

**Hinweis 2**: Bei Import-Module öffnet sich ein Anmeldefenster. Hier muss man sich mit einem M365 Admin-Account (am besten derselbe wie im vorherigen Schritt) anmelden.

- Zuerst muss die ID des AD Service Principals der eben erstellten App gesucht werden. Dies erfolgt über das **Microsoft.Graph** Powershell Modul: ```
Connect-MgGraph -Scopes "Application.Read.All"
Get-MgServicePrincipal -Filter "startswith(displayName,'<appName aus Schritt 4>')"
```
- Die Id und die AppId des entsprechenden Resultats wird im nächsten Schritt benötigt: ![image-20260216-083111.png](https://swissmains.atlassian.net/wiki/download/attachments/1078919182/image-20260216-083111.png)
- Nun muss im Exchange ein Service Principal dazu erstellt werden. Dies erfolgt über das **ExchangeOnlineManagement**Powershell Modul: ```
Import-Module -name ExchangeOnlineManagement
Connect-ExchangeOnline -Organization <tenantId aus Schritt 4>
$spDisplayName = "Service Principal for <appName aus Schritt 4>"
New-ServicePrincipal -AppId <AppId aus vorherigem Schritt> -ObjectId <Id aus vorherigem Schritt> -DisplayName $spDisplayName
```
- Die hier verwendete Id wird für das Vergeben der Berechtigung für die einzelnen Postfächer benötigt. Sie kann jederzeit über den Befehl Get-MgServicePrincipal ermittelt werden. Praktischer ist jedoch, diese Id irgendwo für die zukünftige Verwendung zu speichern.

# Berechtigungen für Postfächer setzen

Damit Mails von den gewünschten Absendern verschickt werden können, muss die entsprechende Berechtigung pro Postfach vergeben werden.

- Der folgende Schritt muss für alle Mailadressen ausgeführt werden, welche als Absender verwendet werden sollen (die ersten beiden Zeilen sind nur notwendig, wenn dieser Schritt nachträglich in einer anderen Powershell-Instanz gestartet wird): ```
Import-Module -name ExchangeOnlineManagement
Connect-ExchangeOnline -Organization <tenantId aus Schritt 4>
Add-MailboxPermission -Identity "<Mail-Adresse>" -user <Id aus vorherigem Schritt> -accessrights FullAccess
```

# MailServer-Parameter in Opus

(Wird von SwissMains konfiguriert)

In der SendMail() function in Opus müssen folgende Werte im Parameter **MailServer**mitgegeben werden:

MailServer = [“Servername”,"ClientID","ClientSecret","TokenURL","Scope"];

wobei:

Servername = “smtp.office365.com”
ClientID = <clientId>
ClientSecret = <clientSecret>
TokenURL = “login.microsoftonline.com/” + <tenantId> + “/oauth2/v2.0/token”
Scope = “https://outlook.office365.com/.default”
