Hallo zusammen,
wie kann ich aus FHEM heraus auf meiner QNap NAS Mails versenden? Hintergrund: Bei einer Alarmauslösung soll eine E-Mail an mich versendet werden.
Ich habe bereits versucht den Artikel aus dem Wiki umzusetzen und habe den Part für die Synology Diskstation analog bei mir eingebaut. Hierzu habe ich die Datei "99_sendmail.pm" im Verzeichnis "/lib/FHEM/" angelegt, mit folgendem Inhalt:
sub sendmail($$$) {
my($empf, $subj, $nachricht) = @_;
system("php -r 'mail(\"$empf\",\"$subj\",\"$nachricht\");'");
undef;
}
Anschließend habe ich in der "99_Utils.pm" noch die Zeile "use sendmail;" eingefügt.
gebe ich nun { sendmail('empfaenger@mail.de' ('empfaenger@mail.de'),'Subject','text 123') } in die FHEM Befehlszeile ein, passiert gar nix. Im Log gibts hierzu auch keinen Eintrag.
Hat jemand ne Idee wo hier mein Fehler liegt?
Gruß
spunky
Definiere zunächst ein notify, in dem die mail verschickt wird und triggere es dann:
define testmail notify testmail {sendmail('empfaenger@mail.de','Subject','text 123')}
trigger testmail
habe ich gemacht. passiert aber nix, wenn man es triggert.
Was für ein Betriebssystem hast du?
Ich nutze debian auf einer NSLU2 und habe sendEmail zusätzlich installiert, funktioniert einwandfrei mit dem wiki Beispiel für Raspberry pi.
http://www.debianadmin.com/how-to-sendemail-from-the-command-line-using-a-gmail-account-and-others.html (//www.debianadmin.com/how-to-sendemail-from-the-command-line-using-a-gmail-account-and-others.html)
Du solltest mal versuchen, ob der Befehl "php -r 'mail..." von der Konsole ausgeführt werden kann (nicht aus FHEM heraus).
also es ist die original-Firmeware von Qnap. Ist das ein nslu2-linux? Zumindest werden von http://ipkg.nslu2-linux.org (//ipkg.nslu2-linux.org) die pakete geladen.
also wenn ich "php -r mail(name@domain.tld (name@domain.tld),test,123)" eingebe, dann kann ich irgendwas eingeben, komme aber nicht mehr zum promt zurück. sieht in der konsole so aus:
[~] # php -r mail(name@domain.tld,test,123)
>
>
dann habe ich per ipkg noch "sendmail" installiert. Das muss man aber glaub ich noch konfigurieren (und da hörts bei mir endgültig auf; aus den anleitungen die ich hierzu gefunden habe, werde ich nicht schlau).
sendEmail ist glaub ich nur bei Debian vorhanden. jedenfalls hab ich es nicht per ipkg installieren können.
letztendlich würde ich halt am liebsten von der adresse "fhem@meinedomain.de (fhem@meinedomain.de)" (welche ich bei meinem provider angelegt habe) mails versenden können. aber dafür müsste ich doch auf der qnap irgendeinen mail-clienten installiert haben, welcher über den smtp-server meines domain-hosters versendet. oder liege ich da falsch?
zu dem sendmail-modul, welches ich analog aus dem wiki für synology-nas übernommen habe, bekomme ich beim rereadcfg im log folgende fehlermeldung:
2013.01.12 11:00:36 1: reload: Error:Modul 99_Utils deactivated:
sendmail.pm did not return a true value at /opt/lib/FHEM/99_Utils.pm line 9, <$fh> line 7.
BEGIN failed--compilation aborted at /opt/lib/FHEM/99_Utils.pm line 9, <$fh> line 7.
Das debian auf der NSLU2 ist eine Linux Variante. Mit der Qnap kenne ich mich leider nicht aus.
Ich hatte auch große Probleme mit der Einrichtung des Mail Systems unter Debian. Das habe ich aufgegeben und mit SendEmail war es nach der Installation sehr einfach. Die Zugangsdaten und SMTP Einstellungen vom Provider werden einfach beim Sendebefehl mit übergeben. Ist natürlich schade, wenn sich das bei dir nicht installieren lässt.
Der Link oben ist speziell für debian, vielleicht findest du auf dieser Seite (//caspian.dotconf.net/menu/Software/SendEmail/) noch Hilfe zu sendEmail.
Von der Konsole aus musst du zunächst die Mail verschicken können, bevor du dir über FHEM Gedanken machst. Falls hier sonst keiner Rat weiß, solltest du ein Forum suchen, dass sich speziell mit deinem Gerät/ Software beschäftigt. Danach können wir hier wieder helfen und den Befehl von FHEM aus absetzen.
Wenn es nur um den Versand geht, hilft auch einen Blick auf msmtp zu werfen.
Das ist nicht so ein Dickschiff wie sendmail, macht seine Sache aber genausoWenn es nur um .
Die nächste Überlegung wären auch spezielle Dienste fürs Handy.
Android: nma (//www.notifymyandroid.com/)
Apple: prowl (//www.prowlapp.com/)
Ich nutze mit meinem Note die Variante nma.
Die Einrichtung unter Debian ist recht einfach. Bei Bedarf schicke ich eine Anleitung.
Gruss Kai-Uwe
also das nma ist ja recht nice. habs mal auf meinem androiden installiert und es gibt ja sogar ein perl script.
auf der internetseite finde ich aber keine vernünftige anleitung, wo die installation schritt für schritt erklärt ist. hab jetzt zwar die app und auch nen api-key, aber wie sendet man nun nachrichten? und wie muss der syntax in fhem sein, wenn ich eine nachricht verschicken will.
wäre super, wenn du mir die anleitung schicken würdest.
also msmtp will auch nicht so recht klappen. keine ahnung wie ich den ganzen sch.. konfigurieren soll.
das einzige was irgendwie funktioniert ist "sendmail". wenn ich auf der konsole "sendmail name@meinedomain.de (name@meinedomain.de)" eingebe, dann funktioniert erstmal zwar nichts und es sieht aus, als ob die konsole hängt. sobald ich putty jedoch schließe, erfolgt der versand einer e-mail und ich erhalte eine Mail von "SERVER" <SERVER@SERVER>>.
Kann man damit was anfangen und oder ggf. drauf aufbauen?
Zu NMA:
1. Also das Perlscript nach /opt/fhem/FHEM kopieren.
2. Aufruf zB. in der fhem.cfg
`perl /opt/fhem/FHEM/nma.pl -k [api_key_deleted_by_admin] -s Einbruch -m $piri_ort -p 2`;;\
Das lange Etwas ist Dein Key aus API-Key von NMA.
Die Parameter siehst Du wenn Du ./nma.pl --help aufrufst.
In meinem Beispiel ist der Betreff "Einbruch" und der Text ist die Variable des Einbruchortes.
-p ist die Dringlichkeit.
Bitte achte auch darauf, das das Perlscript die passenden Rechte hat. Ich mal chmod 777 nma.pl gemacht, also Vollzugriff.
(Nicht gut aber es geht. Vielleicht kann mir ein Rechteexperte mal die richtigen Rechte verraten.)
Viel Spaß beim Benachrichtigen.
Gruss
Kai-Uwe
Zitat von: spunky78 schrieb am Sa, 12 Januar 2013 15:11also msmtp will auch nicht so recht klappen. keine ahnung wie ich den ganzen sch.. konfigurieren soll.
das einzige was irgendwie funktioniert ist "sendmail". wenn ich auf der konsole "sendmail name@meinedomain.de (name@meinedomain.de)" eingebe, dann funktioniert erstmal zwar nichts und es sieht aus, als ob die konsole hängt. sobald ich putty jedoch schließe, erfolgt der versand einer e-mail und ich erhalte eine Mail von "SERVER" <SERVER@SERVER>>.
Kann man damit was anfangen und oder ggf. drauf aufbauen?
Bekommst du diese e-mail über einen provider wie t-online, gmx,... oder ist das eine Nachricht der Konsole?
@ kud: Danke, das probier ich später mal aus.
@ broadway:
das ist die nachricht der konsole. wenn ich in der konsole
"sendmail empfänger@meinedomain.de (nger@meinedomain.de)" eingebe und nach "enter" in der nächsten zeile "Dies ist ein Test", dann bekomme ich eine E-Mail mit "Dies ist ein Test" im Inhalt, jedoch ohne Betreff und mit dem Absender SERVER@SERVER. und versendet wird erst, wenn ich die konsole schließe (weiß nicht wie ich nach dem sendmail befehl wieder zum promt zurück komme *g*).
Zitat von: spunky78 schrieb am Sa, 12 Januar 2013 15:57@ kud: Danke, das probier ich später mal aus.
@ broadway:
das ist die nachricht der konsole. wenn ich in der konsole
"sendmail empfänger@meinedomain.de (nger@meinedomain.de)" eingebe und nach "enter" in der nächsten zeile "Dies ist ein Test", dann bekomme ich eine E-Mail mit "Dies ist ein Test" im Inhalt, jedoch ohne Betreff und mit dem Absender SERVER@SERVER. und versendet wird erst, wenn ich die konsole schließe (weiß nicht wie ich nach dem sendmail befehl wieder zum promt zurück komme *g*).
Das klingt eher nach einem lokalen loopback, der dein Haus nicht verlässt. Das email System ist also definitiv noch nicht konfiguriert.
... also es ist schon ne richtige e-mail, die rausgeht. zwar wird nicht - wie gewünscht - der versand über mein domain-hoster getätigt, sondern direkt von meiner nas aus, aber das wäre nicht schlimm, wenn der absender entsprechend vorgegeben werden kann. z.b. fhem@server oder so. und ich müsste wissen wie ich den versand aus fhem nun bewerkstellige.
die sendmail.pm mit folgendem code:
sub sendmail {
my($empf, $subj, $nachricht) = @_;
system("php -r 'mail(\"$empf\",\"$subj\",\"$nachricht\");'");
undef;
}
produziert halt den folgenden fehler lt. log:
2013.01.12 15:40:26 1: reload: Error:Modul 99_Utils deactivated:
sendmail.pm did not return a true value at /opt/lib/FHEM/99_Utils.pm line 9, <$fh> line 7.
BEGIN failed--compilation aborted at /opt/lib/FHEM/99_Utils.pm line 9, <$fh> line 7.
das denke ich nicht, da die email ja auf meinem androiden ankommt. und das postfach liegt ja auf dem mailserver meines hosters. auch wenn ich via web-mailer auf mein postfach zugreife, finde ich dort die mails meines NAS. also raus gehen die schon.
Hallo,
da ich neu hier bin, kurz etwas zu mir und dann zum Thema.
Habe Fherm seid einem halben Jahr am laufen, und bin begeistert.
Es läuft auf einem QNAP TS-212 mit HMLAN.
Eingesetzt werden 2 Rauchmelder ein paar schaltbare Steckdosen
und ein Dimmer. Läuft alles soweit sehr gut.
Zum Thema, ich hätte auch einige Probleme das Thema E-Mail zum laufen zu bringen,
und bin mit folgenden Schritten zum Erfolg gelangt:
1. im NAS den SMTP-Server konfigurieren
2. im NAS sendmail installieren
Das war es, dann noch das notify und die Mail kommt.
define Mail01 at *23:34 "printf "Subject: Der Betreff\nFrom: XXX@hotmail.com (XXX@hotmail.com)\nTo: XXX@hotmail.com (XXX@hotmail.com)\n\nDas ist die Nachricht" | sendmail -t"
Wie gesagt, bei klappt es...
Hallo Heinz,
das hört sich ja vielversprechend an. Habe nun mal bei mir folgendes angelegt:
define testmail3 notify testmail3 "printf "Subject: ALARM\nFrom: fhem@xxx.de\nTo: dennis@xxx.de\n\nALARM Einbruch" | sendmail"
(das -t hinter Sendmail habe ich mal weggelassen (keine ahnung was es bedeutet), da es laut telnet dieses kommando nicht unterstützt wird)
wenn ich mit "trigger testmail3" den mailversand auslöse, dann komm ich schon mal etwas weiter. im log kommt dann der hinweis:
sendmail: No recipients supplied - mail will not be sent
ach so:
1. smtp ist im qnap unter "Systemadministration" -> "Benachrichtigungen" natürlich konfiguriert.
2. sendmail habe ich über ipkg auch installiert.
blöd das es hier keine "edit"-funktion gibt.
also: ich kann unter telnet "sendmail -t" eingeben und komme dann in diese art eingabebereich und nicht mehr zum promt zurück (wie oben beschrieben)
gebe ich den kompletten string ein (sendmail -t "Subject: ALARM\nFrom: fhem@xxx.de (fhem@xxx.de)\nTo:....) bekomme ich die meldung:
sendmail: recipients with -t option not supported
setze ich in dem define string in fhem das "-t" dann passiert beim triggern gar nix (laut log) und wenn ich ihn weglasse, dann sagt das log halt:
sendmail: No recipients supplied - mail will not be sent
also irgendwie scheint es entweder einen syntaxfehler zu geben, oder ich hab mir irgendwas kaputt-konfiguriert. :(
mittlerweile gibt telnet zumindest ne fehlermeldung aus:
sendmail: RCPT TO:<Subject: ALARM\nFrom: fhem@xxx.de (fhem@xxx.de)\nTo: dennis@xxx.de (dennis@xxx.de)\n\ntest> (501 <Subject: ALARM\nFrom: fhem@xxx.de (fhem@xxx.de)\nTo: dennis@xxx.de (dennis@xxx.de)\n\ntest>: "@" or "." expected after "Subject")
Subject ist doch der Betreff. Warum wird da ein @ oder . erwartet? Kennt sich jemand ein wenig mit sendmail aus und kann die Fehlermeldung deuten?
Mach Feierabend für heute!
Morgen blickst du besser durch.
Schönen Sonntag!
Hallo,
erste Versuche hatte ich mit folgender Eingabe gemacht:
printf "Subject: hallo\nFrom: XXX@hotmail.com (XXX@hotmail.com)\nTo: YYY@hotmail.com (YYY@hotmail.com)\n\nHello test" | sendmail -t
Da ich das ganze vom iPad getestet habe, habe ich den Befehl in der App SSH Mobile Free eingegeben
und prompt eine Mail bekommen.
Was das -t wirklich macht weiß ich auch nicht, habe das so irgendwo gelesen.
Gruss ...
Zitat von: Heinz schrieb am Sa, 12 Januar 2013 22:48Was das -t wirklich macht weiß ich auch nicht, habe das so irgendwo gelesen.
Hallo Heinz,
das kannst Du hier nachlesen:
http://www.postfix.org/sendmail.1.htmlAuszug:
---
-t Extract recipients from message headers. These are
added to any recipients specified on the command
line.
---
Also ich bin einen großen Schritt weiter.
Wenn ich auf der Telnet-Konsole folgendes eingebe:
[~] # sendmail -t
Subject:Alarm
To:name@meinedomain.de
From:fhem@meinedomain.de
Hier steht der Text 1
Hier steht der Text 2
[~] #
und nach dem Text "Strg+D" drücke, dann versendet sendmail von der Konsole einwandfrei.
Trigger ich jedoch in Fhem:
define testmail3 notify testmail3 "printf "Subject:ALARM\nTo:name@meinedomain.de\nFrom:fhem@meinedomain.de\nAlarm Fenster" | sendmail -t"
dann bekomme ich im log keine fehlermeldung, jedoch auch keine bestätigung. aus fhem bekomm ich nach wie vor keine e-mail raus. was überseh ich hier?
zusammengefasst:
1: smtp ist im qnap unter "Systemadministration" -> "Benachrichtigungen" konfiguriert. Testmail wird erfolgreich verschickt
2: sendmail ist per ipkg installiert und funktioniert über die konsole.Mail wird erfolgreich verschickt
3: E-Mail über Fhem via sendmail funktioniert nicht.
Zum einen könnte es sein, dass das @ doppelt geschrieben werden muss, vielleicht gibt es aber auch ein Problem mit den Anführungszeichen. Es könnte ja sein, dass fhem nur den String "printf " sieht und das danach nicht versteht. Vielleicht gibt es dafür escape-Zeichen, aber ich weiß leider nicht welche.
...ach ja und loglevel für das notify ist nicht auf 6 oder?
ES KLAPPT!
es lag an den doppelten @@. loglevel 6 hatte ich auch noch nicht drin. MIT loglevel 6 und folgendem syntax:
testmail3 "printf "Subject:ALARM\nTo:name@@meinedomain.de\nFrom:fhem@@meinedomain.de\n\ntest" | sendmail -t"
funktioniert es!!!!
Vielen Dank an alle!
Zitat von: spunky78 schrieb am So, 13 Januar 2013 16:50loglevel 6 hatte ich auch noch nicht drin.
Glückwunsch!
Ich wollte mit meinem post nur sicher gehen, dass man Meldungen im log sieht. Mit loglevel 6 bewirkst du, dass KEINE Meldungen ins log geschrieben werden.
Zitat von: spunky78 schrieb am Sa, 12 Januar 2013 15:57(weiß nicht wie ich nach dem sendmail befehl wieder zum promt zurück komme *g*).
Ctrl-D
Zitat von: kud schrieb am Sa, 12 Januar 2013 12:53Ich nutze mit meinem Note die Variante nma.
Die Einrichtung unter Debian ist recht einfach. Bei Bedarf schicke ich eine Anleitung.
Sehr gerne - ich würde dies auch gerne mal testen. Kannst du eine kurze Anleitung mit Beispiel liefern, ggf. sogar im FHEMwiki einen Artikel verfassen?
Habe selbst mal etwas ausprobiert und kann schon mal folgendes liefern:
use strict;
use LWP::UserAgent;
my $browser = LWP::UserAgent->new();
my $url = 'https://www.notifymyandroid.com/publicapi/notify';
my $apikey = '123...';
my $application = 'FHEM';
my $event = 'Warnung';
my $description = 'Batteriespannung niedrig - Wohnzimmer_Tuergriff';
my $priority = '0';
$application =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$event =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
$description =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
my $seite = $browser->post($url, [apikey => $apikey, application => $application, event => $event, description => $description, priority => $priority,]);
Das ganze müsste natürlich noch in eine Funktion, der zumindest event und description übergeben wird. Der apikey sollte idealerweise als globale Variable extern definiert werden (geht das in FHEM, eigne globale Variablen?).
... siehe Codeschnipsel-Thread (//forum.fhem.de/index.php?t=msg&goto=58465). Die Umwandlung in das URL-Encoding (Leerzeichen = %20) kann man sich sogar sparen.
Zitat von: spunky78 schrieb am So, 13 Januar 2013 16:50ES KLAPPT!
es lag an den doppelten @@. loglevel 6 hatte ich auch noch nicht drin. MIT loglevel 6 und folgendem syntax:
testmail3 "printf "Subject:ALARM\nTo:name@@meinedomain.de\nFrom:fhem@@meinedomain.de\n\ntest" | sendmail -t"
funktioniert es!!!!
Vielen Dank an alle!
Das ist nun komisch. Von der Kommandozeile geht das hier auf meinem QNAP NAS:
printf "Subject: ALARM\nFrom: xxx@yyy.de\nTo: zzz@yyy.de\n\nFHEM" | sendmail
In fhem.cfg geht dies hier nicht:
define testmail notify testmail "printf "Subject: ALARM\nFrom: xxx@@yyy.de\nTo: zzz@@yyy.de\n\nFHEM" | sendmail"
trigger testmail
Keine Fehlermeldung im Log. Jemand eine Idee?
Hallo,
probier mal mit einem @. Bei mir läuft es auch nur mit einem.
Gruss Heinz
also bei mir gehts nicht ohne doppelte @@.
Probier mal sendmail mit "-t":
testmail3 "printf "Subject:ALARM\nTo:name@@meinedomain.de (@@meinedomain.de)\nFrom:fhem@@meinedomain.de (@@meinedomain.de)\n\ntest" | sendmail -t"
Das -t steuert - wenn ich das richtig verstanden habe, ansonsten möge man mich bitte korrigieren - das sendmail den empfänger aus der Zeile entnimmt. Ohne "-t" lande ich bei eingabe von sendmail in diesem blinkenden eingaberomt auf der konsole, wo man dann zeilenbasiert subject, To, From und den Text eingeben kann und die mail dann per "Strg+D" absenden.
Es funktioniert bei mir auch nur in der oben abgebildeten art und ohne zeilenumbruch in der cfg-datei mittels "\". und auch nur bei einem notify. der versuch das mit anders in einen string einzubauen hat nie funktioniert (meine damit verschachtelte funktionen mit if-Abfragen in {}-Klammern und so)
Daher habe ich mir zum versenden der verschiedenen benachrichtigungen jeweils einen notify-dummy, wie oben abgebildet, angelegt und dann diese durch die verschachtelten notifys getriggert.
define Tuer_offen_WZ notify Tuer_offen_WZ "printf "Subject:ACHTUNG Terrassentuer Wohnzimmer geoeffnet\nTo:name@@meinedomain.de\nFrom:fhem@@meinedomain.de\n\nDas Haus wurde verschlossen, jedoch ist die Wohnzimmertuer noch offen." | sendmail -t"
define Tuer_offen_EZ notify Tuer_offen_EZ "printf "Subject:ACHTUNG Terrassentuer Esszimmer geoeffnet\nTo:name@@meinedomain.de\nFrom:fhem@@meinedomain.de\n\nDas Haus wurde verschlossen, jedoch ist die Esszimmertuer noch offen." | sendmail -t"
define Tuer_offen_KU notify Tuer_offen_KU "printf "Subject:ACHTUNG Terrassentuer Kueche geoeffnet\nTo:name@@meinedomain.de\nFrom:fhem@@meinedomain.de\n\nDas Haus wurde verschlossen, jedoch ist die Kuechentuer noch offen." | sendmail -t"
define Fenster_offen_HA notify Fenster_offen_HA "printf "Subject:ACHTUNG Fenster Hausanschlussraum geoeffnet\nTo:name@@meinedomain.de\nFrom:fhem@@meinedomain.de\n\nDas Haus wurde verschlossen, jedoch ist das Fenster im Hausanschlussraum noch offen." | sendmail -t"
define Fenster_offen_VR notify Fenster_offen_VR "printf "Subject:ACHTUNG Fenster Vorratsraum geoeffnet\nTo:name@@meinedomain.de\nFrom:fhem@@meinedomain.de\n\nDas Haus wurde verschlossen, jedoch ist Fenster im Vorratsraum noch offen." | sendmail -t"
define Tuer_offen_pruef notify FL_KeyMatic:locked.* {\
if (Value("WZ_TuerKontakt") ne "zu") { fhem ("trigger Tuer_offen_WZ")}} {\
if (Value("EZ_TuerKontakt") ne "zu") { fhem ("trigger Tuer_offen_EZ")}} {\
if (Value("KU_TuerKontakt") ne "zu") { fhem ("trigger Tuer_offen_KU")}} {\
if (Value("HA_FensterKontakt") ne "zu") { fhem ("trigger Fenster_offen_HA")}} {\
if (Value("VR_FensterKontakt") ne "zu") { fhem ("trigger Fenster_offen_VR")}}
attr Tuer_offen_pruef alias Fenster offen bei verlassen des Hauses
attr Tuer_offen_pruef group E-Mail Benachrichtigungen
attr Tuer_offen_pruef room FHEM
vielleicht hilft dir das weiter.