FHEM sendet EMail Texte nicht mehr mit Umlauten

Begonnen von iceman, 09 September 2020, 16:51:27

Vorheriges Thema - Nächstes Thema

iceman

Ich weiß, meine Frage/Problem betrifft nicht wirklich FHEM sondern eher Perl oder qx, aber da ich das Problem in FHEM habe, wende ich mich erst einmal an euch.

Also, ich schicke Status Mails aus FHEM mittels folgenden Perl Befehl:

$ret .= qx(echo 'Um $datestring: $text \xfc\n' | mail  -s '$fhem$subject' $rcpt);

Dabei Enthält der $text Umlaute und ° Zeichen. diese wurden bis zum 1.8. bei mir auch brav übertragen und korrekt dargestellt. Danach bekomme ich nun Mist. Also aus einem ° wird z.B. ТА usw. (ich vermute ein UTF8 Problem)

Nachtrag: Jetzt hab ich noch ein bisschen weiter herum experimentiert. Wenn ich den Text direkt in den Perlcode eingebe werden die Sonderzeichen auch korrekt dargestellt. Also betrifft es nur die Strings in den variablen z.B. $text oder $subject.

Wenn ich mail von der Kommando Zeile aus aufrufe werden alle Sonderzeichen korrekt übertragen und angezeigt. Also gehe ich davon aus, das das Problem bei perl oder qx zu suchen ist.

Kann mir jemand sagen wo ich das wieder anpassen kann bzw. an welcher Stelle ich suchen muss?

Otto123

Hi,

ich habe da letztens auch rum experimentiert, weil in bestimmten Situationen die ausgelesenen JSON Readings plötzlich anders formatiert waren.
Ich habe mir dann mit UTF8 encode / decode beholfen.
so in der Art, das use UTF8 erzeugt für den Inhalt von $text den Effekt den Du wahrscheinlich hast.
{use utf8;;use Encode qw(encode decode);; my $enc = 'UTF8';; my $text= "Ülmtülp";; return encode($enc,$text)}

Ich bin nicht der Perl Spezi, das war ne Lösung aus: search & try & error ;)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

iceman

Danke Otto,

Du hast  mich auf die richtige Spur gebracht. Allerdings verwirrt mich das Ergebnis noch mehr.

$text = encode("iso-8859-1",$text);
$subject = encode("iso-8859-1",$subject);

$ret .= qx(echo 'Um $datestring: $text $text2 \xfc\n' | mail  -s '$fhem$subject' $rcpt);


Jetzt wird der Betreff korrekt mit deutschen Umlauten ausgegeben, aber obwohl ich im $text testweise den gleichen String stehen hatte kommt im Mailtext wieder nur Grütze raus...
Anscheinend interpretiert echo die strings wieder anders... Was für ein umständlicher Kram... Das muss doch einfacher gehen...

iceman

So ich hab's nun hinbekommen. Und dazu eine kleine generische Subroutine eingebaut, die alles Perl Strings immer ins richtige Format konvertiert so das sie auch per Mail lesbar sind.

Hier meine Lösung, falls es jemand mal braucht:

use Encode::Guess;
...
sub CheckString($) {
my $temp_string = @_[0];

my $dec = Encode::Guess->guess($temp_string );
if (ref $dec) {
     return $dec->decode($temp_string );
}
elsif ($dec =~ /No appropriate encodings found/i) {
     return Encode::decode('iso-8859-1',$temp_string );
}
else {
     Log 3, "CheckString ERROR: Text: $temp_string";
}

return $temp_string;
}