peterleb
Goto Top

Powershell SendMail mit Extras (Image, Betreffsymbol etc.)

Hallo,

habe in meiner Frage zum Email-Versand bei Server-Neustart ja ein bisschen mit der Powershell experimentiert.
Herausgekommen ist ein Script, das tatsächlich funktioniert und bei dem das Ergebnis auch ansprechend geworden ist.

Falls es Jemanden interessiert, hier ist der Code:

$AktDat = Get-Date -format G
$CN = $env:computername
$OS = (Get-WmiObject win32_operatingsystem).caption
$Rel1 = (Get-WmiObject win32_operatingsystem).version
$Rel2 = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" -Name ReleaseID).ReleaseId  
$Rel3 = (Get-ItemProperty "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\" -Name UBR).UBR  
$utf8 = New-Object System.Text.utf8encoding

$wmi=Get-WmiObject -computername $CN -Class Win32_OperatingSystem
$UpTime = Get-Date ($wmi.converttodatetime($wmi.lastbootuptime)) -format G
$UpTimeCount = (Get-date)  - (Get-Date ($wmi.converttodatetime($wmi.lastbootuptime)))

#$Dateiname = "Pfad zum Dateianhang, falls Sie einen mit versenden möchten"    # z.B. c:\zipdatei.zip  
$Dateiname = “C:\SendMail\WindowsserverRestart.jpg”

$BodyImg = @”
<html>
<body>
<br><img src="cid:image1.jpg"><br>  
</body>
</html>
“@

$SmtpServer = new-object system.net.mail.smtpClient
$SmtpServer.Host = "172.20.0.20"                                               # FQDN des SMTP-Servers  
$MailMessage = New-Object system.net.mail.mailmessage

$attachment = new-object Net.Mail.Attachment($Dateiname)

$attachment.ContentDisposition.Inline = $True
$attachment.ContentDisposition.DispositionType = “Inline”
$attachment.ContentType.MediaType = “image/jpeg”
$attachment.ContentId = ‘image1.jpg’

$MailMessage.SubjectEncoding = $utf8
$MailMessage.from = "sharkoon.event@xxxxx.net"  
$MailMessage.To.add("xxxxxx@xxxxxx.de")  
$MailMessage.Subject = "x Server-Neustart Benachrichtigung”  
$MailMessage.IsBodyHtml = $true                 # je nachdem ob Sie html ($true) oder txt ($false) Mails schicken möchten

$MailMessage.Body = "Server $CN <br $BodyImg <br> Neustart am $AktDat <br> <br> $OS <br> Version: $Rel1" + "." + "$Rel3 ($Rel2) <br> <br> Letzter Neustart: $UpTime <br> Uptime: $UpTimeCount"  
$MailMessage.Attachments.Add($attachment)
$SmtpServer.Send($MailMessage)

Das kleine x bei $MailMessage.Subject ist eigentlich ein Raketensymbol gewesen, aber damit funktioniert die Formatierung als Code hier nicht.

Ansonsten viel Spaß damit.
Vielleicht hat Jemand Verbesserungsvorschläge.

Gruß Peter

Content-Key: 356951

Url: https://administrator.de/contentid/356951

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: 134464
134464 04.12.2017 aktualisiert um 12:08:46 Uhr
Goto Top
Schön das du dich mit Powershell beschäftigst aber so fehlt da noch eine Menge Errorhandling, Generalisierung als wiederverwendbaren Funktion, mit Pipelinesupport &Co., etc. pp.

Vielleicht lässt du deine Powershell-Kenntnisse erst noch etwas reifen, gerade wenn man gestern erst damit angefangen hat, sollte man von Tipps noch etwas Abstand nehmen face-wink.
Mitglied: PeterleB
PeterleB 04.12.2017 aktualisiert um 12:32:23 Uhr
Goto Top
Du hast sicher Recht.

Ich habe jedoch furchtbar lange gesucht, wie man das mit dem Image anstellt.
Da die Sache aber funktioniert, wollte ich es den anderen Suchenden nicht vorenthalten.

Nicht mehr und nicht weniger.

Peter

PS: Warum kann ich dieses Unicode-Zeichen hier nicht darstellen? Genau an der Stelle wird immer der Text abgeschnitten.
Mitglied: 134464
134464 04.12.2017 aktualisiert um 12:40:34 Uhr
Goto Top
PS: Warum kann ich dieses Unicode-Zeichen hier nicht darstellen? Genau an der Stelle wird immer der Text abgeschnitten.
Geht nicht, wird vom Forum ausgefiltert.
Sollte man aber sowieso besser weglassen wenn man solche Mails an Fremde schickt und nicht möchte das sie im Spam-Filter hängen bleiben.
Mitglied: FalkMS
FalkMS 23.06.2020 aktualisiert um 12:16:33 Uhr
Goto Top
@PeterleB Danke