none
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:Fehlermeldung

    Gruß

    Carsten

    Freitag, 22. März 2019 08:42

Antworten

  • Moin,

    das sollte heißen

    [System.Text.Encoding]::UTF8
    oder, wie von Olaf angeregt, implizite Konvertierung aus String verwenden.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Freitag, 22. März 2019 10:59
  • 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:

    < = &lt;
    > = &gt;
    ä = &auml;

    usw.. Codes siehe hier:
    https://www.degraeve.com/reference/specialcharacters.php

    Nun 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!

    Freitag, 22. März 2019 16:46

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
    Freitag, 22. März 2019 10:24
  • Moin,

    das sollte heißen

    [System.Text.Encoding]::UTF8
    oder, wie von Olaf angeregt, implizite Konvertierung aus String verwenden.


    Evgenij Smirnov

    http://evgenij.smirnov.de

    Freitag, 22. März 2019 10:59
  • Du musst dann auch UTF8 dem Body zuweisen:

    $enc = [System.Text.Encoding]::UTF8
    $emailMessage.Body = $enc.GetBytes("Mein HTML-Code")

    Freitag, 22. März 2019 14:02
  • Du musst dann auch UTF8 dem Body zuweisen:

    $enc = [System.Text.Encoding]::UTF8
    $emailMessage.Body = $enc.GetBytes("Mein HTML-Code")

    ...womit der Body dann ein Array aus ganzzahligen Werten wäre ;-)

    Evgenij Smirnov

    http://evgenij.smirnov.de

    Freitag, 22. März 2019 14:17
  • 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:

    < = &lt;
    > = &gt;
    ä = &auml;

    usw.. Codes siehe hier:
    https://www.degraeve.com/reference/specialcharacters.php

    Nun 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!

    Freitag, 22. März 2019 16:46