Exchange Online - Send Mail with SMTP Auth from a Shared Mailbox
Hallo zusammen,
Kürzlich hatte ich einen Fall, wo jemand mit SMTP Authentication einer Shared Mailbox über Exchange Online Mails versenden wollte.
Dazu müssen jedoch einige Bedingungen erfüllt sein:
- Username, Passwort und UPN der Shared Mailbox sind bekannt
- Passwort läuft nicht ab und muss nicht beim nächsten anmelden geändert werden
- SMTPAuth ist freigeschaltet (Set-CASMailbox)
- AuthenticationPolicy erlaubt SMTPAuth (Falls vorhanden)
- Conditional Access allows Basic Auth (No MFA / No BasicAuth Blocking)
- Shared Mailbox benötigt eine Lizenz
Ich habe mir dazu eine CloudOnly Shared Mailbox angelegt
Das geht natürlich auch mit Powershell
$pwd = "MySecredPassword" | ConvertTo-SecureString -AsPlainText -Force
$MBXName = "cloudservice"
New-Mailbox -Name $MBXName -Password $pwd -PrimarySmtpAddress $MBXName@icewolf.ch -alias $MBXName -LastName $MBXName -Shared
Man beachte, dass die UPN Suffix den Tenantnamen beinhaltet (tenant.onmicrosoft.com)
Das Passwort lässt sich auch über das AzureAD PowerShell Module setzen und dabei gleich die Passwort Policy anpassen.
#Set Password / Disable ForcePasswordChange
Import-Module AzureAD
Connect-AzureAD
Get-AzureADUser -SearchString "cloudservice"
Set-AzureADUserPassword -ObjectId 081deeea-d196-475a-a3cd-9cb6deaac666 -ForceChangePasswordNextLogin $false -EnforceChangePasswordPolicy $false
Diese Settings kann man sich auch mit folgendem Befehl anzeigen lassen - hier im Vergleich mit einer von OnPrem synchronisierten SharedMailbox
Get-AzureADUser -SearchString "cloudservice" | fl pass*
Nun muss der Mailbox SMTP Authentication erlaubt werden
#CAS Mailbox allow SMTPClientAutentication
Get-CASMailbox -Identity cloudservice
Set-CASMailbox -Identity cloudservice -SmtpClientAuthenticationDisabled $false
Falls man wie ich eine AuthenticationPolicy gebaut hat, muss dort SMTP Auth erlaubt sein
Get-AuthenticationPolicy | fl Name
Get-AuthenticationPolicy -Identity AllowBasicAutodiscoverEAS | fl
Diese AuthenticationPolicy muss nun noch dem User zugewiesen werden
Set-User -Identity cloudservice -AuthenticationPolicy "AllowBasicAutodiscoverEAS" -WarningAction SilentlyContinue
Get-User -Identity cloudservice| fl *Auth*
Der nächste Fallstrick kann noch Conditional Access sein. Der Benutzer muss von folgenden Richtlinien ausgeschlossen werden:
-
MFA Authentication Erforderlich
-
Basic Auth / Legacy Protokolle vorboten
-
CombindedSecurityRegistration
Der Einfachheit halber, habe ich mir eine AAD Gruppe angelet, mit den Accounts, welche von den Conditional Access Policies ausgeschlossen werden sollen. So kann ich dann immer die Gruppe als Exclusion angeben.
Ob die Firewall gesperrt ist kann man mit folgendem Befehl prüfen
Test-NetConnection -Port 587 -ComputerName smtp.office365.com
Getestet habe ich dann mit folgendem PowerShell Script
###############################################################################
# SMTP Auth via Powershell
###############################################################################
# Sender Credentials
$Username = "cloudservice@icewolfch.onmicrosoft.com"
$Password = "MySecredPassword"
# Sender and Recipient Info
$MailFrom = "cloudservice@icewolf.ch"
$MailTo = "a.bohren@icewolf.ch"
# Server Info
$SmtpServer = "smtp.office365.com"
$SmtpPort = "587"
#Message Stuff
$MessageSubject = "SMTP Auth Test"
$Message = New-Object System.Net.Mail.MailMessage $MailFrom,$MailTo
$Message.IsBodyHTML = $true
$Message.Subject = $MessageSubject
$Message.Body = @'
<!DOCTYPE html>
<html>
<head>
</head>
<body>
This is just a test Message.
</body>
</html>
'@
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
$Smtp = New-Object Net.Mail.SmtpClient($SmtpServer,$SmtpPort)
$Smtp.EnableSsl = $true
$Smtp.UseDefaultCredentials = $false
$Smtp.Credentials = New-Object System.Net.NetworkCredential($Username,$Password)
$Smtp.Send($Message)
Wie man sieht, klappt das nicht
In untenstehendem Artikel steht, dass man für SMTP Auth eine Lizenz braucht. Exchange Online Plan 2 Lizenzen genügen hier.
How to set up a multifunction device or application to send email using Microsoft 365 or Office 365
Anschliessend muss man sich ein bisschen gedulden, bis die Lizenz aktiv wird. Danach klappt jedoch dann der Mailversand mit SMTP Auth
So sieht die Nachricht aus
Und in den Mailheadern sieht man, dass die Nachricht Authentifiziert versendet wurde.
SCL = -1
X-MS-Exchange-Organization-AuthAs = Internal