Hiermit kann der Versand über jedes Exchange-Online Postfach getestet werden für das SmtpClientAuthenticationDisabled aktiviert wurde.
Bei dem Beispiel wird das Postfach “postfach@walkingcows.de” für den Versand getestet. Einfach noch das Kennwort eingeben, dann läuft das.
# 1) TLS 1.2 sicherstellen (wichtig für STARTTLS mit Microsoft 365)
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
# 2) Absender/Ziel
$From = "postfach@deinedomain.de"
$To = "mailadresse@deinedomain.de"
# 3) SMTP-Einstellungen
$SmtpServer = "smtp.office365.com"
$Port = 587
# 4) Preflight: TCP-Check
Write-Host ("Preflight: Prüfe TCP-Konnektivität zu {0}:{1} ..." -f $SmtpServer, $Port)
$tcp = Test-NetConnection -ComputerName $SmtpServer -Port $Port
if (-not $tcp.TcpTestSucceeded) {
throw ("Keine Verbindung zu {0}:{1}. Firewall/Proxy/ISP prüfen." -f $SmtpServer, $Port)
}
# 5) Passwort sicher abfragen und PSCredential selbst bauen (Username kommt aus $From)
$SecurePwd = Read-Host -AsSecureString "Passwort für $From (wird nicht angezeigt)"
$Cred = [pscredential]::new($From, $SecurePwd)
# -- Debug-Check: sollte 'postfach@deinedomain.de' anzeigen --
# Write-Host "Cred.UserName = $($Cred.UserName)"
# 6) Testmail aufbauen
$subject = "SMTP AUTH Test von $From - $(Get-Date -Format 'yyyy-MM-dd HH:mm:ss')"
$body = @"
Dies ist eine Test-Mail via SMTP AUTH (Port $Port / STARTTLS) aus $From.
Client: $env:COMPUTERNAME
Zeitstempel: $(Get-Date -Format o)
"@
$mail = [System.Net.Mail.MailMessage]::new($From, $To, $subject, $body)
# 7) Senden mit STARTTLS + Auth
$smtp = [System.Net.Mail.SmtpClient]::new($SmtpServer, $Port)
$smtp.EnableSsl = $true # STARTTLS auf 587
$smtp.UseDefaultCredentials = $false
$smtp.Credentials = $Cred.GetNetworkCredential() # Username/Passwort sicher übergeben
$smtp.DeliveryMethod = [System.Net.Mail.SmtpDeliveryMethod]::Network
$smtp.Timeout = 100000
try {
$smtp.Send($mail)
Write-Host "✅ Mail versendet an $To. Prüfe auch 'Gesendete Elemente' von $From." -ForegroundColor Green
}
catch [System.Net.Mail.SmtpException] {
Write-Error ("❌ SMTP-Versand fehlgeschlagen: {0} (StatusCode: {1})" -f $_.Exception.Message, $_.Exception.StatusCode)
if ($_.Exception.StatusCode -eq [System.Net.Mail.SmtpStatusCode]::MustIssueStartTlsFirst) {
Write-Warning "STARTTLS/TLS 1.2 Handshake fehlgeschlagen. Prüfe Proxy/SSL-Inspection/TLS-Policies."
}
}
if ($mail) { $mail.Dispose() }
if ($smtp) { $smtp.Dispose() }