Hallo,
ich versuche Mails mit FHEM zu versenden.
Kann jemand mit der Fehlermeldung:
Mail: syntax error at (eval 238) line 1, at EOF
etwas anfangen?
Dankeschön
Klar.
In Zeile 1 hat es einen Syntax error - steht doch da ???
EOF heisst End Of File wenn mich nicht alles täuscht.
Hallo Puschel,
ok, ob da die 99_myUtils gemeint ist? Irgenwie komme ich nicht weiter. Kann ich noch was posten?
Dankeschön
Zitatob da die 99_myUtils gemeint ist?
Keine Ahnung. Wo du den Code hinterlegt hast solltest du schon selbst wissen.
ZitatKann ich noch was posten?
Wie wäre es mit dem Code den du versuchst zu verwenden?
Den der Code wirft dir ja den Fehler aus.
siehe hier:http://forum.fhem.de/index.php/topic,16311.0.html (http://forum.fhem.de/index.php/topic,16311.0.html)
Nein, nicht auf Wiki oder Blog oder sonst wohin verweisen sondern den Code so wie DU ihn bei dir jetzt verwenden willst.
Also ich bin nach Wiki vorgegangen,
eine 99_myUtils so wie http://www.fhemwiki.de/wiki/99_myUtils_anlegen (http://www.fhemwiki.de/wiki/99_myUtils_anlegen)
danach nach: http://www.fhemwiki.de/wiki/E-Mail_senden#Raspberry_Pi (http://www.fhemwiki.de/wiki/E-Mail_senden#Raspberry_Pi)
die 99_myUtils sieht dann so aus:
##############################################
# $Id: myUtilsTemplate.pm 7570 2015-01-14 18:31:44Z rudolfkoenig $
#
# Save this file as 99_myUtils.pm, and create your own functions in the new
# file. They are then available in every Perl expression.
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# Enter you functions below _this_ line.
######## DebianMail Mail auf dem RPi versenden ############
sub
DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $attach = shift;
my $ret = "";
# hier natürlich meine Daten drin, ist das "\" nach name richtig?
my $sender = "name\@domain.de";
my $konto = "name\@domain.de";
my $passwrd = "mein Passwort";
my $provider = "smtp.mein Provider.de:25";
Log 1, "sendEmail RCP: $rcpt";
Log 1, "sendEmail Subject: $subject";
Log 1, "sendEmail Text: $text";
Log 1, "sendEmail Anhang: $attach";;
$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -a '$attach' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=auto -o message-charset=utf-8);
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
Log 1, "sendEmail returned: $ret";
}
########################################################
1;
und meine Probiermail:
define Mail at *10:18:00 {\ DebianMail('meineMailAdresse@domain.de','FHEM gruest','passt doch','Anhang');\ }
Dankeschön
meineMailAdresse@domain.de
Versuch mal
meineMailAdresse@@domain.de
im at
Ein reload deiner 99_myUtils hast du gemacht nachdem du den Code eingetragen hast?
Das \ in der 99_myUtils nach dem Namen sollte passen - das hab ich auch drinnen.
Edith: Das @@ steht auch so im verlinkten Wiki-Beitrag ;)
Edith2: Ok, beim at-Beispiel steht nur ein @ ???
Edith3: Aber im Wiki hat es am Schluss des at-Beispieles 2 ;; - die solltest du auch versuchen wenn du deine Konfig direkt bearbeitest (und danach sieht der Code auch aus).
Hallo,
ein reload 99_myUtils.pm habe ich gemacht und auch im at meineMailAdresse@@domain.de geändert,
leider immer noch der gleiche Fehler.
Mail: syntax error at (eval 273) line 1, at EOF
Beispiel aus dem Wiki:
DebianMail('email@email.domain','Subject','Text','Anhang');;\
Man beachte die 2 ;; am Schluss - siehe obige Ediths.
Zitat von: Puschel74 am 01 August 2015, 11:28:24
Beispiel aus dem Wiki:
DebianMail('email@email.domain','Subject','Text','Anhang');;\
Man beachte die 2 ;; am Schluss - siehe obige Ediths.
Auch dies habe ich jetzt drinnen (keine Ahnung, warum nur 1 ; drin war.)
Aber leider keine Änderung.
2015.08.01 11:40:00 3: Mail: syntax error at (eval 358) line 1, at EOF
Ich würde in der Kommandozeile von FHEM zum Test zunächst folgendes eingeben:
{DebianMail('email@domain.de','Subject','Text')}
Achtung: bei Eingabe in der Kommandozeile nur ein "@" verwenden. Wenn das klappt, bist du einen Schritt weiter.
Zitat von: Brice am 01 August 2015, 11:46:09
Ich würde in der Kommandozeile von FHEM zum Test zunächst folgendes eingeben:
{DebianMail('email@domain.de','Subject','Text')}
Achtung: bei Eingabe in der Kommandozeile nur ein "@" verwenden. Wenn das klappt, bist du einen Schritt weiter.
also: {DebianMail('xxxxxx@xxxxxxxxx.de','FHEM gruest','passt doch')}
Resultat ist hier:
2015.08.01 12:06:05 1: sendEmail RCP: xxxxx@xxxxxxx.de
2015.08.01 12:06:05 1: sendEmail Subject: FHEM gruest
2015.08.01 12:06:05 1: sendEmail Text: passt doch
2015.08.01 12:06:05 1: PERL WARNING: Use of uninitialized value $attach in concatenation (.) or string at ./FHEM/99_myUtils.pm line 43.
2015.08.01 12:06:05 3: stacktrace:
2015.08.01 12:06:05 3: main::__ANON__ called by ./FHEM/99_myUtils.pm (43)
2015.08.01 12:06:05 3: main::DebianMail called by (eval 360) (1)
2015.08.01 12:06:05 3: (eval) called by fhem.pl (960)
2015.08.01 12:06:05 3: main::AnalyzePerlCommand called by fhem.pl (980)
2015.08.01 12:06:05 3: main::AnalyzeCommand called by fhem.pl (910)
2015.08.01 12:06:05 3: main::AnalyzeCommandChain called by ./FHEM/01_FHEMWEB.pm (2051)
2015.08.01 12:06:05 3: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (672)
2015.08.01 12:06:05 3: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (435)
2015.08.01 12:06:05 3: main::FW_Read called by fhem.pl (3044)
2015.08.01 12:06:05 3: main::CallFn called by fhem.pl (648)
2015.08.01 12:06:05 1: sendEmail Anhang:
2015.08.01 12:06:05 1: PERL WARNING: Use of uninitialized value $attach in concatenation (.) or string at ./FHEM/99_myUtils.pm line 45.
2015.08.01 12:06:05 3: stacktrace:
2015.08.01 12:06:05 3: main::__ANON__ called by ./FHEM/99_myUtils.pm (45)
2015.08.01 12:06:05 3: main::DebianMail called by (eval 360) (1)
2015.08.01 12:06:05 3: (eval) called by fhem.pl (960)
2015.08.01 12:06:05 3: main::AnalyzePerlCommand called by fhem.pl (980)
2015.08.01 12:06:05 3: main::AnalyzeCommand called by fhem.pl (910)
2015.08.01 12:06:05 3: main::AnalyzeCommandChain called by ./FHEM/01_FHEMWEB.pm (2051)
2015.08.01 12:06:05 3: main::FW_fC called by ./FHEM/01_FHEMWEB.pm (672)
2015.08.01 12:06:05 3: main::FW_answerCall called by ./FHEM/01_FHEMWEB.pm (435)
2015.08.01 12:06:05 3: main::FW_Read called by fhem.pl (3044)
2015.08.01 12:06:05 3: main::CallFn called by fhem.pl (648)
2015.08.01 12:06:06 1: sendEmail returned: Aug 01 12:06:06 fhem01 sendEmail[2628]: Email was sent successfully!
also das passt, sind aber noch paar Fehlermeldungen drin?
Zumindest die Mail ist erstmal angekommen.
Und wie weiter?
Zitat von: FMEM-User22 am 01 August 2015, 12:08:26
Und wie weiter?
Ich weiß ja nicht, was du vor hast ;-)
Aber zumindenst sollte der Code
define Mail at *10:18:00 {DebianMail('meineMailAdresse@domain.de','FHEM gruest','passt doch')}
jetzt auch funktionieren.
Ich arbeite beim Mailversand nicht mit Anhängen, sondern lasse mir Temeraturwerte von Kühl- und Gefrierschrank mitteilen. Von daher kann zum Versenden von Anhängen nichts beitragen.
Zitat von: Brice am 01 August 2015, 12:29:11
Ich weiß ja nicht, was du vor hast ;-)
Aber zumindenst sollte der Code
define Mail at *10:18:00 {DebianMail('meineMailAdresse@domain.de','FHEM gruest','passt doch')}
jetzt auch funktionieren.
Ich arbeite beim Mailversand nicht mit Anhängen, sondern lasse mir Temeraturwerte von Kühl- und Gefrierschrank mitteilen. Von daher kann zum Versenden von Anhängen nichts beitragen.
sowas ähnliches möchte ich auch. Anhänge brauch ich (zumindest jetzt nicht).
*12:35:00 {\ DebianMail('xxx@xxxxx.de','FHEM gruest','passt doch');;\ }
bringt den Fehler:
2015.08.01 12:35:00 3: Mail: syntax error at (eval 398) line 1, at EOF
und solange dies nicht klappt, kann man sich auch keine Werte zuschicken lassen, oder?
Wenn du den von dir als funktionierend getesteten Code nehmen würdest (also die Zeichen "\ " bzw. ";;\" entfernst) wirst du feststellen, dass es klappt....
Es hat doch bei Dir schon funktioniert, wie Brice es Dir gezeigt hat: Über die Eingabe in der Kommmandozeile von Fhem bzw. Bearbeitung im DEF.
Das ist nicht mehr funktionsfähiger Code:
*12:35:00 {\ DebianMail('xxx@xxxxx.de','FHEM gruest','passt doch');;\ }
Ursprung ist der fhem.cfg-Code aus dem Wiki, den Du bei der Bearbeitung direkt in der fhem.cfg genauso wie Wiki gezeigt eintragen solltest. Und nicht irgendwie umformatiert. "\" und ",," sind Spezialitäten, die (im Wesentlichen) Direkt-editierter betreffen und in Kommandozeile/DEF nichts zu suchen haben und automatisch erledigt werden.
Im Übrigen @@ ist grds. nichts für at, sondern notify.
Und wenn Du bei Aufruf des sub einfach etwas nicht übergibst, führt das eben zu Perl-Warnungen / Fehlern.
Zitat von: krikan am 01 August 2015, 12:52:17
Es hat doch bei Dir schon funktioniert, wie Brice es Dir gezeigt hat: Über die Eingabe in der Kommmandozeile von Fhem bzw. Bearbeitung im DEF.
Das ist nicht mehr funktionsfähiger Code:
*12:35:00 {\ DebianMail('xxx@xxxxx.de','FHEM gruest','passt doch');;\ }
Ursprung ist der fhem.cfg-Code aus dem Wiki, den Du bei der Bearbeitung direkt in der fhem.cfg genauso wie Wiki gezeigt eintragen solltest. Und nicht irgendwie umformatiert. "\" und ",," sind Spezialitäten, die (im Wesentlichen) Direkt-editierter betreffen und in Kommandozeile/DEF nichts zu suchen haben und automatisch erledigt werden.
Im Übrigen @@ ist grds. nichts für at, sondern notify.
Und wenn Du bei Aufruf des sub einfach etwas nicht übergibst, führt das eben zu Perl-Warnungen / Fehlern.
OK, super, jetzt klappt alles bestens.
Das mit den \ und ;; muss ich mir nochmal zu Gemüte führen. Ich mache alles übers WEB-Frontend in eine Datenbank. Keine .cfg direkt bearbeitet.
Dankeschön nochmals an alle
Zitat von: Brice am 01 August 2015, 12:29:11
Ich arbeite beim Mailversand nicht mit Anhängen, sondern lasse mir Temeraturwerte von Kühl- und Gefrierschrank mitteilen.
Gibts dafür eine Anleitung oder Codeschnipsel?
Dankeschön
Eine Anleitung gibt es sicherlich irgendwo, aber da dies bei mir bereits seit ca. 3 Jahren implementiert ist, gehe ich davon aus, dass diese aus der Vor-Forums-Zeit kommt (also der Google-Group). Die suche ich dir jetzt aber nicht.
Ich nutze S300TH in der Kühl-Gefrierkombi. Code wie folgt, keine Ahnung, ob du damit etwas anfangen kannst. Und: die cfg wurde noch direkt editiert :-)
define check_Gefrierschrank_Temp notify Gefrierschrank_Temp:temperature.* { \
if ( (ReadingsVal("Gefrierschrank_Temp","temperature",0) > -13.0) && (time > $main::NewMailtime) ){\
DebianMail('name@@domain.de','Gefrierschrank Temperatur %EVTPART1','zu hoch');;\
$main::NewMailtime = time + 3600;;\
}\
}
Achtung: da ein Notify, muss das @ maskiert werden, wie Krikan schon erwähnte.
Damit nicht bei jedem Überschreiten eine neue Mail generiert wird (die S300TH senden ca. alle 3 Minuten), ist NewMailtime auf 1 Stunde gesetzt. Dazu muss die 99_MyUtils.pm erweitert werden:
####### New Mail #####
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
my $NewMailtime = time;
}
my $NewMailtime = time;
Heute würde das wohl eleganter mit einem DOIF zu erledigen sein, aber bei mir läuft es als Notify seit mehreren Jahren, früher mit FB_Mail jetzt mit DebianMail.
Über Sinn bzw. Unsinn der Temp-Überwachung läßt sich natürlich streiten. Bei unserer Kombi werden die Schwellwerte immer dann überschritten, wenn wir mehrere Tage nicht zuhause sind. Dann kommen z.T. mehrere Mail pro Tag (ist im Freundeskreis schon ein Running Gag). Ist wie bei Feuerlöschern: MiniMax ist auch nur Mist, wenn du nicht zuhause bist ;-)
ok,
dankeschön. Ich versuche mich mal daran.
Schöne Grüße