Entwickler-Ecke

Alle Sprachen - Alle Plattformen - PowerShell - UTF-8 Kodierung für HTML E-Mail


Pat.bat - Mo 19.08.19 15:53
Titel: PowerShell - UTF-8 Kodierung für HTML E-Mail
Hallo zusammen,

ich habe derzeit ein kleines Problem und weiß nicht so recht wie ich es lösen kann.

Ich habe ein Skript in PowerShell, das eine E-Mail verschicken soll, dazu bedient es sich an dem Outlook Com Objekt.

Die e-Mail samt Signatur als htm Datei werden auch ordentlich versand, nur werden Umlaute in meinem E-Mail Body nicht korrekt angezeigt.
In der Signatur aber schon (diese wurde in Word erstellt und als htm gespeichert)


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
$Signature = Get-Content -Path "G:\FD_50_Bank\System\Aufgabenplanungen\E-Mail\Signatur.htm" 
$htmlBody = "<HTML><meta http-equiv=Content-Type content=""text/html; charset=utf-8""><BODY><p>$Body</p>$Signature<\BODY><\HTML>"

# Funktion zum Senden einer E-Mail. Parameter müssen mit übergeben werden.
Function Send-Mail($Importance, $Subject, $Body, $To, $CC, $Source, $BoolAttachments, [Array]$Dateien) 
{
    Try {
        # Erstellen eines Outlook Application Objekts
        $o = New-Object -ComObject Outlook.Application

        $mail = $o.CreateItem(0)
        $mail.importance = $Importance          # 1 = Normal, 2 = Wichtig
        $mail.subject = "$Subject"        
        $mail.HTMLbody = $Body
        $mail.To = "$To"                       
        $mail.CC = "$CC"


aufgerufen wird die Funktion über:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
Send-Mail   -Importance $Importance `
            -Subject $Subject `
            -Body $htmlBody `
            -To $To `
            -CC $cc `
            -Source $FilePath `
            -BoolAttachments $BoolAttachments `
            -Dateien @($Files)



Ich hoffe jemand kann mich auf das Problem hier stoßen, ich finde es nicht.


Christian S. - Mo 19.08.19 16:30

Eine PowerShell hat leider kein UTF-8-Encoding (ich glaube, es ist Windows-1252, bin aber gerade nicht 100% sicher), das heißt wenn Du die Methode von einer PowerShell aus aufrufst, wird der String für den Body falsch kodiert sein.


Ralf Jansen - Mo 19.08.19 22:15

Möglicherweise hilft es das $OutputEncoding auf utf zu setzen wie hier [https://mohitgoyal.co/2017/03/03/understanding-default-encoding-and-change-the-same-in-powershell/] beschrieben. Es klingt von der Beschreibung her nach dem Richtigen aber da du direkt mit einem COM Objekt kommunizierst würde ich nicht unbedingt damit rechnen das es dort auch hilft.