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

https://docs.microsoft.com/en-us/exchange/mail-flow-best-practices/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

 

Grüsse
Andres Bohren