Email versenden über Powershell ISE
Hallo,
Ich benötige ein Script um monatliche Log Dateien Automatisch via Baramundi als Email zu versenden.
Das Script schreibe ich mit PowerShell ISE und sieht folgender Maßen im Grundgerüst aus:
function GenerateMail {
$SmtpClient = New-Object System.Net.Mail.SmtpClient
$SmtpClient.host = "smtp.ionos.de"
$SmtpClient.port = "578"
$SmtpClient.EnableSSL = $true
$Username = "Userlogin"
$Password = "Password"
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username,$Password)
$Mail = New-Object System.Net.Mail.MailMessage
$Mail.From = "Absender@domain.de"
$Mail.To.Add("Empfänger@domain.de")
$Mail.IsBodyHtml = 1
$Mail.Subject = "Meine Erste HTML Mail"
$Mail.Body = "Testnachricht"
$SmtpClient.Send($Mail)
}
GenerateMail
Bevor irgendwelche Fragen auftreten:
Da ich immer wieder Fehler beim ausführen hatte, habe ich das Script erstmal zu kurz wie möglich gehalten um einfach nur eine Email zu verschicken.
Attachment und LoginCredential habe ich daher erstmal rausgenommen, bzw. Unverschlüsselt in das Script gepackt.
Mein Problem ist jetzt folgendes:
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> C:\Temp\einfachemail.ps1
Ausnahme beim Aufrufen von "Send" mit 1 Argument(en): "Fehler beim Senden von Mail."
In C:\Temp\einfachemail.ps1:15 Zeichen:1
+ CategoryInfo : NotSpecified: (
, MethodInvocationException
+ FullyQualifiedErrorId : SmtpException
Ich bekomme den gleichen Fehler sowohl auf meinen Firmennotebook als auch auf einem Windows Server 2019Std
Portfreigabe ist vorhanden und wurde schon mit Telnet und Portabfrage geprüft.
Forum und Google wurde natürlich auch schon gefragt und hat mir bei meinen ersten Problemen geholfen.
Aber den "Fehler beim Senden von Mail." bekomme ich einfach nicht weg und hab auch nichts spezifisches dazu gefunden.
Danke und beste Grüße
Michael
Ich benötige ein Script um monatliche Log Dateien Automatisch via Baramundi als Email zu versenden.
Das Script schreibe ich mit PowerShell ISE und sieht folgender Maßen im Grundgerüst aus:
function GenerateMail {
$SmtpClient = New-Object System.Net.Mail.SmtpClient
$SmtpClient.host = "smtp.ionos.de"
$SmtpClient.port = "578"
$SmtpClient.EnableSSL = $true
$Username = "Userlogin"
$Password = "Password"
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential($Username,$Password)
$Mail = New-Object System.Net.Mail.MailMessage
$Mail.From = "Absender@domain.de"
$Mail.To.Add("Empfänger@domain.de")
$Mail.IsBodyHtml = 1
$Mail.Subject = "Meine Erste HTML Mail"
$Mail.Body = "Testnachricht"
$SmtpClient.Send($Mail)
}
GenerateMail
Bevor irgendwelche Fragen auftreten:
Da ich immer wieder Fehler beim ausführen hatte, habe ich das Script erstmal zu kurz wie möglich gehalten um einfach nur eine Email zu verschicken.
Attachment und LoginCredential habe ich daher erstmal rausgenommen, bzw. Unverschlüsselt in das Script gepackt.
Mein Problem ist jetzt folgendes:
PS C:\WINDOWS\system32\WindowsPowerShell\v1.0> C:\Temp\einfachemail.ps1
Ausnahme beim Aufrufen von "Send" mit 1 Argument(en): "Fehler beim Senden von Mail."
In C:\Temp\einfachemail.ps1:15 Zeichen:1
$SmtpClient.Send($Mail)
~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (+ FullyQualifiedErrorId : SmtpException
Ich bekomme den gleichen Fehler sowohl auf meinen Firmennotebook als auch auf einem Windows Server 2019Std
Portfreigabe ist vorhanden und wurde schon mit Telnet und Portabfrage geprüft.
Forum und Google wurde natürlich auch schon gefragt und hat mir bei meinen ersten Problemen geholfen.
Aber den "Fehler beim Senden von Mail." bekomme ich einfach nicht weg und hab auch nichts spezifisches dazu gefunden.
Danke und beste Grüße
Michael
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1147553402
Url: https://administrator.de/forum/email-versenden-ueber-powershell-ise-1147553402.html
Ausgedruckt am: 22.04.2025 um 18:04 Uhr
5 Kommentare
Neuester Kommentar

Der SMTPClient und auch das CMDLet Send-MailMessage ist schon seit einiger Zeit nicht mehr empfohlen (auch von Microsoft selbst) und unterstützt auch keine modernen Authentifizierungsverfahren, nur dass mittlerweile auch durch etliche Sicherheitslücken aufgefallene STARTTLS für SSL Verbindungen. Deswegen sollte man auch im Hinsicht auf die Zukunft zügig auf eine Alternative umsteigen.
Eine wäre bspw. die Mailkit-Bibliothek, da die in .NET programmiert ist lässt sich diese in der PS nutzen.
Beiträge dazu hier im Forum: https://administrator.de/latest/?filter=knowledge&sort=chronoday& ...
Source https://docs.microsoft.com/de-de/dotnet/api/system.net.mail.smtpclient?v ...
/evo
Eine wäre bspw. die Mailkit-Bibliothek, da die in .NET programmiert ist lässt sich diese in der PS nutzen.
Beiträge dazu hier im Forum: https://administrator.de/latest/?filter=knowledge&sort=chronoday& ...
Source https://docs.microsoft.com/de-de/dotnet/api/system.net.mail.smtpclient?v ...
Es wird nicht empfohlen, die- SmtpClient Klasse für die neue Entwicklung zu verwenden, da SmtpClient viele moderne Protokolle nicht unterstützt. Verwenden Sie stattdessen mailkit oder andere Bibliotheken. Weitere Informationen finden Sie unter SmtpClient darf nicht auf GitHub verwendet werden.
/evo
Siehe: https://www.ionos.de/hilfe/e-mail/allgemeine-themen/serverinformationen- ...
Da steht was von Port 465.
Da steht was von Port 465.

Zitat von @emeriks:
Siehe: https://www.ionos.de/hilfe/e-mail/allgemeine-themen/serverinformationen- ...
Da steht was von Port 465.
Das supported die SMTPClient Klasse nicht denn auf Port 465 wird bei Ionos nur direktes SSL unterstützt, der SMTPClient supportet aber nur das STARTTLS Verfahren und kein direktes SSL. Ionos lauscht auch auf 587 und dort supported es STARTTLS, musste aber feststellen das das je nach Server nur leidlich funktioniert mit der SMTPClient Klasse. Deswegen sollte man nicht lange fackeln und auf eine zuverlässige und moderne Bibliothek umsteigen.Siehe: https://www.ionos.de/hilfe/e-mail/allgemeine-themen/serverinformationen- ...
Da steht was von Port 465.
https://docs.microsoft.com/de-de/dotnet/api/system.net.mail.smtpclient.e ...
Die- SmtpClient Klasse unterstützt nur die SMTP-Dienst Erweiterung für Secure SMTP over Transport Layer Security, wie in RFC 3207 definiert. In diesem Modus beginnt die SMTP-Sitzung auf einem unverschlüsselten Kanal. Anschließend wird vom Client ein STARTTLS-Befehl an den Server ausgegeben, um zur sicheren Kommunikation über SSL zu wechseln. Weitere Informationen finden Sie unter RFC 3207, veröffentlicht von der Internet Engineering Task Force (IETF).
Eine Alternative Verbindungsmethode besteht darin, dass vor dem Senden von Protokoll Befehlen eine SSL-Sitzung eingerichtet wird. Diese Verbindungsmethode wird manchmal als SMTP/SSL, SMTP über SSL oder SMTPS bezeichnet und verwendet standardmäßig Port 465. Diese Alternative Verbindungsmethode mithilfe von SSL wird derzeit nicht unterstützt.
Eine Alternative Verbindungsmethode besteht darin, dass vor dem Senden von Protokoll Befehlen eine SSL-Sitzung eingerichtet wird. Diese Verbindungsmethode wird manchmal als SMTP/SSL, SMTP über SSL oder SMTPS bezeichnet und verwendet standardmäßig Port 465. Diese Alternative Verbindungsmethode mithilfe von SSL wird derzeit nicht unterstützt.
Servus @MichaelSeel, willkommen auf Administrator.de!
Zudem ist die Eigenschaft kein String sonder vom Typ [INT], das macht hier aber nichts weil die PS das einem verzeiht und eine Umwandlung vornimmt.
Den restlichen Ausführungen von @149062 kann ich mich aber nur anschließen. Am besten gleich Mailkit nutzen!
Was einem hier ab und zu je nach System auch mal ans Bein pisst sind die SSL Cipher-Suites des ServicePointManager. Hier sollte dann ein vor dem eigentlichen Skript eingefügtes
für sämtliche supporteten Ciphers oder
nur für explizite Ciphers Abhilfe schaffen.
Grüße Uwe
$SmtpClient.port = "578"
Zahlendreher!$SmtpClient.port = 587
Den restlichen Ausführungen von @149062 kann ich mich aber nur anschließen. Am besten gleich Mailkit nutzen!
Was einem hier ab und zu je nach System auch mal ans Bein pisst sind die SSL Cipher-Suites des ServicePointManager. Hier sollte dann ein vor dem eigentlichen Skript eingefügtes
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType])
[System.Net.ServicePointManager]::SecurityProtocol = 'Tls,Tls11,Tls12'
Grüße Uwe