Benutzer mit den meisten Antworten
Probleme mit UTF 8 Encoding

Frage
-
Guten Tag zusammen,
ich habe Probleme mit den Umlauten beim Versenden einer Mail mit Hilfe von Powershell. Leider finde ich nicht Fehler nicht & habe selbst auch erst wenig Erfahrung mit PowerShell. Vllt kann mir ja jemand helfen.
Hier die relevanten Codesnipsel:
# message
$emailMessage = New-Object System.Net.Mail.MailMessage( $emailFrom , $emailTo )
$emailMessage.Subject = "Ihr Kennwort laeuft bald ab"
$emailMessage.BodyEncoding = System.Text.Encoding.UTF8;
$emailMessage.IsBodyHtml = $true
$emailMessage.Body = "<html>
<head>
</head>
<body>
Hallo $GivenName $Surname,
<br>
Ihr Domaenenkennwort laeuft am folgenden Zeitpunkt ab: $PasswordExpireDate.
<br>
Sie haben $DaysBeforePasswordchange Tage Zeit, bis das Kennwort ablaeuft. Sie sollten es nun ändern.
Um ihr Kennwort jetzt zu aendern klicken Sie bitte <a href='www.google.de.de'>hier</a>
<br>
Freundliche Grüße
Das Team der SKS
</body>
</html>
"
#client
$SMTPClient = New-Object System.Net.Mail.SmtpClient( $emailSmtpServer , $emailSmtpServerPort )
$SMTPClient.EnableSsl = $True
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential( $emailSmtpUser , $emailSmtpPass );
$SMTPClient.Send( $emailMessage )sowie die Fehlemeldung:
Gruß
Carsten
Antworten
-
Moin,
das sollte heißen
[System.Text.Encoding]::UTF8
oder, wie von Olaf angeregt, implizite Konvertierung aus String verwenden.
Evgenij Smirnov
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 26. März 2019 10:11
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 28. März 2019 14:30
-
Ok, aber so gehts:
System.Text.Encoding.Default.GetString( System.Text.UTF8Encoding.UTF8.GetBytes("abÄcd"))
Nachtrag:
Allerdings glaube ich nicht, dass die UTF8-Darstellung eine Verbesserung bringt sondern dass der HTML-Text selber nicht HTML-Konform ist.
D.h., Sonderzeichen im Text müssen als HTML-Codes dargestellt werden, z.B:< = <
> = >
ä = äusw.. Codes siehe hier:
https://www.degraeve.com/reference/specialcharacters.phpNun gibt es eine .Net-Klasse, die dies für einen erledigt:
$var = Syste.Web.HttpUtility.HtmlEncode("abÄcd")
Dabei ist natürlich zu beachten, dass der HTML-Code des Bodys selber nicht per HTMLEncode umzuwandeln ist, sondern ausschließlich der reine Textanteil!
- Bearbeitet Der Suchende Samstag, 23. März 2019 09:07
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 26. März 2019 10:11
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 28. März 2019 14:30
Alle Antworten
-
Bitte keine Screenshots von Code oder von Fehlermeldungen posten. Die sind üblicherweise sehr schlecht zu lesen. Einfach den Text der Meldung kopieren und diesen hier posten .... formatiert als Code. ... und den Code natürlich auch als Code formatieren ... das vorletzte Symbol auf der Symbolleiste des Post-Editors. Danke
Gibt es einen bestimmten Grund, warum Du nicht das in Powershell vorhandene cmdlet Send-MailMessage benutzt? Magst Du Dir nicht die HIlfe mal durchlesen (komplett inclusive Beispiele bitte) und es mal testen?
Unabhängig davon: hast Du mal versucht, das Encoding einfach als String anzugeben ... also
$emailMessage.BodyEncoding = 'UTF8'
?
Live long and prosper!
(79,108,97,102|%{[char]$_})-join''
- Bearbeitet BOfH-666 Freitag, 22. März 2019 10:27
-
Moin,
das sollte heißen
[System.Text.Encoding]::UTF8
oder, wie von Olaf angeregt, implizite Konvertierung aus String verwenden.
Evgenij Smirnov
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 26. März 2019 10:11
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 28. März 2019 14:30
-
Du musst dann auch UTF8 dem Body zuweisen:
$enc = [System.Text.Encoding]::UTF8
$emailMessage.Body= $enc.GetBytes("Mein HTML-Code")
Evgenij Smirnov
-
Ok, aber so gehts:
System.Text.Encoding.Default.GetString( System.Text.UTF8Encoding.UTF8.GetBytes("abÄcd"))
Nachtrag:
Allerdings glaube ich nicht, dass die UTF8-Darstellung eine Verbesserung bringt sondern dass der HTML-Text selber nicht HTML-Konform ist.
D.h., Sonderzeichen im Text müssen als HTML-Codes dargestellt werden, z.B:< = <
> = >
ä = äusw.. Codes siehe hier:
https://www.degraeve.com/reference/specialcharacters.phpNun gibt es eine .Net-Klasse, die dies für einen erledigt:
$var = Syste.Web.HttpUtility.HtmlEncode("abÄcd")
Dabei ist natürlich zu beachten, dass der HTML-Code des Bodys selber nicht per HTMLEncode umzuwandeln ist, sondern ausschließlich der reine Textanteil!
- Bearbeitet Der Suchende Samstag, 23. März 2019 09:07
- Als Antwort vorgeschlagen Denniver ReiningMVP, Moderator Dienstag, 26. März 2019 10:11
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 28. März 2019 14:30