[Gelöst] Perl Anweisung für Fettschrift und Farbe in exmail

Begonnen von Knallfrosch, 27 Juli 2024, 11:22:28

Vorheriges Thema - Nächstes Thema

Knallfrosch

Hallo zusammen,

ich sende mir aus FHEM eine eMail mit versch. Readings.

Das sieht wie folgt aus:

exmail('meine@meine.meine', 'Solarertrag+Stromverbrauch', "$datum_2\nErtrag Solarbank: $Ertrag1 \nErtrag Hoymiles: $Ertrag2 \nGesamt Tag: $ErtragTG kWh
 \nEinsparung: $Ersparnis EUR \nEingespeist Heute: $EinspDay \nStromverbrauch Heute: $StromDay \n\nIm $Monatsnamen[$Monat-1] \nErzeugung: $ErtragMG
 \nErsparnis: EUR $ErsparnisM \nStromverbrauch: $StromMon \nEingespeist Monat: $EinspMon")}
Nun würde ich gerne das $datum_2 und den $Monatsnamen fett, sowie $EinspDay in rot darstellen.

Kann mit bitte jemand helfen, wie ich das umsetzen kann!?

Vielen Dank.

Grüße

eisman

hi,

etwa so:

sub MailTextHof($$$) {
  my ($eMail,$subject,$Keller) = @_;
  my $STRG1 = sub_TimeStampDatum( ReadingsTimestamp( $Keller,"state",'00.00.'));
  my $STRG2 = sub_TimeStampZeit(  ReadingsTimestamp( $Keller,"state",'00:00' ));
 
  my $HTML = '<!DOCTYPE html>' .
'<html>' .
      '<head> <title>Smarthome</title> </head>' .
      '<body >' .
        '<h1 style="background-color:blue;color:white;font-family:verdana;text-align:center;">Achtung</h1>' .
        '<p style="background-color:blue;color:white;text-align:right;">Ma, ' . $STRG1 . ' um ' . $STRG2 . '</p>' .
        '<p ><b>Die Hoftür ist seit 30min geöffnet!!</b></p>' .
        '<p > </p>' .
        '<p >mit freundlichen grüßen</p>' .
        '<p >Ihr Smarthome Server</p>' .
      '</body>' .
'</html>';
  Log 1, "MailTextHof returned: $eMail // $subject // $Keller ";
  DebianMail($eMail,$subject,$HTML);
  return 0;
}

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Knallfrosch

Hallo,

also wenn ich das richtig vestehe wird hinter $myHTML definiert, dass die Mail im html-Format versendet werden soll und dort dann auch die Mail quasi geschrieben und entsprechend mit den html-Befehlen formatiert.

Wenn ich das bei mir versuche angepasst einzubauen, wird aber keine Mail verschickt.

Ich werde mal noch etwas probieren und dann den kompletten Code hier einstellen.
Vielleicht fällt dann auch der Fehler auf.


Grüße

Knallfrosch

Ich habe nun einiges versucht, aber finde meinen Fehler nicht.

Die Mail wird nun verschickt, allerdings ist sie leer.

Kann mir bitte jemand bei der Fehlersuche helfen?



Solarertrag_Log:* {my $Ertrag1 = sprintf "%.2f kWh" ,ReadingsVal("1_Solarertrag_Solix","energyDay",0)/1000;
my $Ertrag2 = sprintf "%.2f kWh" ,ReadingsVal("2_Solarertrag_Hoymiles","ENERGY_Today",0);
my $ErtragTG = $Ertrag1+$Ertrag2;
my $ErtragMG = sprintf "%.2f kWh" ,ReadingsVal("Solarmessung","statEnergyMonth",0)/1000+sprintf "%.2f kWh" ,ReadingsVal("2_Solarertrag_Hoymiles","statENERGY_TotalMonth",0);
my $EinspDay = sprintf "%.2f kWh" ,ReadingsVal("Stromzaehler","statZaehler_wirkenergie_totalDay",0);
my $EinspMon = sprintf "%.2f kWh" ,ReadingsVal("Stromzaehler","statZaehler_wirkenergie_totalMonth",0);
my $Ersparnis = $ErtragTG*0.325;
my $ErtragG = sprintf "%.2f kWh" ,ReadingsVal("Solarertrag","energy",0)/1000;
my $ErsparnisG = sprintf "%.2f EUR" ,ReadingsVal("Solarertrag","ersparnis",0);
my $TageG = sprintf "%.f Tagen" ,ReadingsVal("Solarertrag","Tage",0);
my $ErtragM = sprintf "%.2f kWh" ,ReadingsVal("Solarertrag","energyMonth",0)/1000;
my $ErsparnisM = $ErtragMG*0.325;
my $StromDay = sprintf "%.2f kWh" ,ReadingsVal("Stromzaehler","statZaehler_zaehlerstand_totalDay",0);
my $StromMon = sprintf "%.2f kWh" ,ReadingsVal("Stromzaehler","statZaehler_zaehlerstand_totalMonth",0);

my ($Sekunden, $Minuten, $Stunden, $Monatstag, $Monat,
    $Jahr, $Wochentag, $Jahrestag, $Sommerzeit) = localtime(time);
my $CTIME_String = localtime(time);
$Monat += 1;
$Jahrestag += 1;
$Jahr += 1900;
 
my @Wochentage = qw(Sonntag Montag Dienstag Mittwoch Donnerstag Freitag Samstag);
my @Monatsnamen = qw(Januar Februar März April Mai Juni Juli August September Oktober November Dezember);
 

my $datum_2 = sprintf("%s %2d. %s% 04d",
   $Wochentage[$Wochentag],
   $Monatstag,
   $Monatsnamen[$Monat-1],
   $Jahr,

my $Text = '<!DOCTYPE html>' .
'<html>' .
      '<head> <title>Zählerwerte</title> </head>' .
      '<body >' .
        '<h1 style="background-color:blue;color:white;font-family:verdana;text-align:center;">Zählerwerte</h1>' .
        '<p ><b>Die Ersparnis heute ist $Ersparnis  $</b></p>' .
        '<p > </p>' .
        '<p >Dies ist eine Testmail</p>' .
        '<p >FHEM</p>' .
      '</body>' .
'</html>'

);

exmail('Meine@meine.de', 'Solarertrag+Stromverbrauch', "$Text")}

eisman

#4
hi,


######## DebianMail  Mail auf dem RPi versenden ############
# $provider für SMTP Server anpassen.
# Einmal in der FHEM Kommandozeile, user und password anpassen:
# {setKeyValue("myEmailKonto",'xxx.xxx@xxx.de');;setKeyValue("myEmailPasswrd",'xxxxxxxx')}
sub DebianMail {
  my $rcpt     = shift;
  my $subject  = shift;
  my $text     = shift;
  my $attach   = shift;
  my $ret      = "";
  my $error;
  my $konto    = 'xxx.xxx@xxx.xx';
  my $passwrd  = '.xxxxxxxxxx';
  my $from     = 'xxx.xxx@xxx.xx';         # or use different KeyValue if konto is not the from email address
  my $provider = "mail.xxx.de:587";      # smtp.domain.tld:port see provider documentation
# Log 1, "sendEmail RCP: $rcpt";
# Log 1, "sendEmail Subject: $subject";
# Log 1, "sendEmail Text: $text";
# Log 1, "sendEmail Anhang: $attach";
  if (not defined($attach)) { $attach = '' }
  $ret .= qx(sendemail -f '$from' -t '$rcpt' -u '$subject' -m '$text' -a '$attach' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=yes -o message-charset=utf-8);
  $ret =~ s,[\r\n]*,,g;                         # remove CR from return-string
# Log 1, "sendemail returned: $ret $konto $passwrd";
  fhem("set ESP06 tone 21 2300 2500");
  return 0;
}



vieleicht hilft es etwas besser
gruss

PS: eMail-konto sollte auch html unterstützen......
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

RalfRog

Aus meiner Sicht scheinen beispielhaft hier im Abschnitt Klammern und Semikolon am Ende der Kommandozeile nicht korrekt zu sein. Schau es insgesamt nochmal durch.

Zitat von: Knallfrosch am 27 Juli 2024, 12:43:51......
my $datum_2 = sprintf("%s %2d. %s% 04d",    öffnende Klammer wo ist die schließende?
  $Wochentage[$Wochentag],
  $Monatstag,
  $Monatsnamen[$Monat-1],
  $Jahr,   Abschluss mit ;

my $Text = '<!DOCTYPE html>' .
    '<html>' .
      '<head> <title>Zählerwerte</title> </head>' .
      '<body >' .
        '<h1 style="background-color:blue;color:white;font-family:verdana;text-align:center;">Zählerwerte</h1>' .
        '<p ><b>Die Ersparnis heute ist $Ersparnis  $</b></p>' .
        '<p > </p>' .
        '<p >Dies ist eine Testmail</p>' .
        '<p >FHEM</p>' .
      '</body>' .
    '</html>'   Abschluss mit ;

);    sprintf endet hier nicht



Gruß Ralf
FHEM auf Proxmox VM Bookworm (Futro S740) - nanoCUL, HM-MOD-RPI-PCB und MAX!Cube über LAN
HM- Fensterkontakte, UP-Schalter, Bewegungsmelder und ein Rauchmelder sowie Shelly 3EM, 1PM, PlugS und IT Schaltsteckdosen

Knallfrosch

Hallo,

vielen Dank für die Hilfe.
Ich habe die genannten Fehler korrigiert.

Die Mail wird verschickt, allerdings kommt sie leer an.


Im Log finde ich dazu:

exmail('Meine@meine.de', 'Solarertrag+Stromverbrauch', "$test")}
<!DOCTYPE html><html><head> <title>Zählerwerte</title> </head><body ><h1 style=background-color:blue
sh: 1: color:white: not found
sh: 1: font-family:verdana: not found
sh: 1: text-align:center: not found
sh: 1: >Zählerwerte</h1><p ><b>Die Ersparnis heute ist   $</b></p><p > </p><p >Dies ist eine Testmail</p><p >FHEM</p></body></html>: not found
mail: Nachrichtenrumpf ist leer, hoffentlich ist das OK
2024.07.29 07:56:00 3: Solarertrag_Notify_Mail return value: -1

Ok, wenn ich nun die Zeile mit der Schriftart und Formatierung entferne, wird die Mail ebenso verschickt und ich sehe in der Mail folgendes:

<!DOCTYPE html><html><head> <title>Z=C3=A4hlerwerte</title> </head><body >=
<p ><b>Die Ersparnis heute ist   $</b></p><p > </p><p >Dies ist eine Testm=
ail</p><p >FHEM</p></body></html>

Der html-Code wird also nur als "normaler" Text versendet.

Liegt das bei mir an exmail?
Eisman verwendet ja offensichtlich erfolgreich debianmail.



Grüße

eisman

hi,

sender und empfänger müssen HTML- mails können,
ich hatte damals nur das eine mail Prog gefunden,

FHEM WIKI email

du must mal schauen ob dein eMail Prog  "Content-Type: text/html" unterstützt.
habe da nichts zu exmail gefunden...

gruss
1x FHEM Debian, Homematic,ZigBee,FS20 / 1X Raspberry, ConBee / 7x ESP
1x FHEM Debian, Homematic,Z2M             / 1X Raspberry, ConBee / 6x ESP
1x FHEM Debian,MQTT2                             / 1X Raspberry, i2c,onewire,gpio
1x auf Windows 2012 Hyper-V-S

Knallfrosch

Empfänger kann sicherlich html.

Ich werde in den nächsten Tagen mal versuchen ein anderes Mailprogramm zu installieren und in Gang zu bringen.

Ich habe auch schon versucht etwas über exmail herauszufinden, aber nichts gefunden.
Das ganze läuft schon 7 oder 8 Jahre, ich weiß auch nicht mehr wie ich das alles installiert und in Betrieb genommen habe.

Bevor ich aber nun am RPi neue Software installiere muss ich mir erstmal ein frisches Backup ziehen. :-)

Ich melde mich wieder, wenn ich weitergekommen bin.

Grüße

Knallfrosch

#9
Nach dem finden und löschen eines Copy&Paste-Fehler funktioniert es einwandfrei mit Sendmail/DebianMail.

Vielen Dank für die Hilfe.


Grüße