michaelseel
Goto Top

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

back-to-top$SmtpClient.Send($Mail)

back-to-top~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: (face-smile , 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

Content-ID: 1147553402

Url: https://administrator.de/forum/email-versenden-ueber-powershell-ise-1147553402.html

Ausgedruckt am: 22.04.2025 um 18:04 Uhr

149062
Lösung 149062 12.08.2021 aktualisiert um 10:11:54 Uhr
Goto Top
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 ...
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
emeriks
emeriks 12.08.2021 um 11:09:39 Uhr
Goto Top
149062
149062 12.08.2021 aktualisiert um 11:33:44 Uhr
Goto Top
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.

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.

emeriks
emeriks 12.08.2021 um 11:38:21 Uhr
Goto Top
587 oder 578 ?
In Deiner Frage steht 578. In Deinem letzten Kommentar 587.
colinardo
Lösung colinardo 12.08.2021, aktualisiert am 13.08.2021 um 11:01:57 Uhr
Goto Top
Servus @MichaelSeel, willkommen auf Administrator.de!
$SmtpClient.port = "578"
Zahlendreher!
$SmtpClient.port = 587
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
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.SecurityProtocolType]::GetNames([System.Net.SecurityProtocolType]) 
für sämtliche supporteten Ciphers oder
[System.Net.ServicePointManager]::SecurityProtocol = 'Tls,Tls11,Tls12'  
nur für explizite Ciphers Abhilfe schaffen.

Grüße Uwe