Hallo,
ich habe wie bei http://www.fhemwiki.de/wiki/E-Mail_senden beschrieben Email senden auf meinem Raspberry 2 installiert und nur die notwendigen Daten in der 99_myUtils.pm geändert:
##############################################
# $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.
### Notifications über Prowl auf dem RPi versenden ###
sub prowl
{
my $subject = $_[0];
my $event = $_[1];
my $priority = $_[2];
my $ret = "";
$ret .= system("wget -q -O /dev/null 'http://api.prowlapp.com/publicapi/add?apikey=XXX&application=FHEM&event=$event&priority=$priority&description=$subject'");
$ret =~ s,[r
]*,,g;
Log 1, "prowl returned: $ret";
}
######## DebianMail Mail auf dem RPi versenden ############
sub DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $attach = shift;
my $ret = "";
my $sender = "XXX\@outlook.com";
my $konto = "XXX\@outlook.com";
my $passwrd = "XXX";
my $provider = "smtp-mail.outlook.com:587";
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;
Leider bekomme ich folgenden Fehler und FHEM stützt - zumindest teilweise - ab (lädt und Oberfäche verschwindet, dann nicht erreichbar). Eine Email kommt auch nicht an...
2016.09.24 15:28:41 1: sendEmail RCP: mail@martintroll.com
2016.09.24 15:28:41 1: sendEmail Subject: Test
2016.09.24 15:28:41 1: sendEmail Text: Test-Text
2016.09.24 15:28:41 1: PERL WARNING: Use of uninitialized value $attach in concatenation (.) or string at ./FHEM/99_myUtils.pm line 55.
2016.09.24 15:28:41 1: sendEmail Anhang:
2016.09.24 15:28:41 1: PERL WARNING: Use of uninitialized value $attach in concatenation (.) or string at ./FHEM/99_myUtils.pm line 57.
Sieht jemand meinen Fehler? Hat jemand eine Idee was hier falsch läuft?
Lieben Dank im Voraus!
EDIT: die Fehlermeldung kommt wenn ich in FHEM {DebianMail('XXX@XXX.com','Test','Test-Text');;} eingebe.
Hi,
passiert, weil du wohl keinen Anhang mitsendest und daher ist die Variable $attach dann uninitialisiert...
Hier mal schauen:
https://forum.fhem.de/index.php/topic,56156.msg477260.html#msg477260 (https://forum.fhem.de/index.php/topic,56156.msg477260.html#msg477260)
bzw. selber im Forum suchen... ;-)
Gruß, Joachim
EDIT: aber dass fhem bei sowas "kaputt" geht/gehen soll (ist ja "nur" eine WARNING) ist eigenartig...
Hi,
Du musst es einfach machen wie es im Wiki steht
ZitatDebianMail("email@email.domain","Subject","Text","'Anhang1' 'Anhang2' ...");;\
Keine Anhang dann wenigstens ""
Gruß Otto
hm, gesucht hatte ich davor schon, aber war nicht wirklich passend.
Ich habe nun zwei Ding geändert:
1. die beiden Hochkommas haben bei '@attach' (wohl Fehler im Wiki!)
2. habe es nun mit {DebianMail('XXX@outlook.com','Test','Test-Text','');;}
=> keine Fehlermeldung mehr aber auch keine Emails...
Was nun?
Das mit den Anhängen war ein Spezialproblem. Da muss ich nochmal drüber nachdenken.
Brauchst Du nun Anänge oder nicht? Wenn nicht nimm die Variante.
sub
DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
my $ret = "";
my $sender = "";
my $konto = "";
my $passwrd = "";
my $provider = "";
#Log 1, "sendEmail RCP: $rcpt";
#Log 1, "sendEmail Subject: $subject";
#Log 1, "sendEmail Text: $text";
$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$text' -s '$provider' -xu '$konto' -xp '$passwrd' -o tls=auto);
$ret =~ s,[\r\n]*,,g; # remove CR from return-string
#Log 1, "sendEmail returned: $ret";
}
Also ich hab nur deine Fehlermeldung wie im Titel geschrieben in die Suche eingegeben und ungefähr 3-5 Treffer und mind. 2 davon haben gepasst.
U.a. der Link von mir.
Die Hochkomma (wenn ich das richtig sehe) sind ja auch bei dir jetzt falsch.
Die einfachen sind dazu da innerhalb des Parameter $attach mehrere Anhänge zu haben...
Du musst entweder einen leeren Anhang also "" statt keinem Anhang beim Senden mitgeben (das denke ich meint Otto)...
...oder es in der Send-Funktion initialisieren (wenn kein Anhang) wie in meinem Link beschrieben...
Ich muss echt zu doof dafür sein!! :o
ein {\DebianMail("XXX@outlook.com","Test","Test-Text","")\} bringt jetzt immerhin ein:
Global symbol "@outlook" requires explicit package name at (eval 58) line 1.
syntax error at (eval 58) line 1, near ")\"
Das mit dem "" für Anhänge habe ich jetzt verstanden. Leider brauche ich anhänge.
PS: im Wiki (unten unter Probleme) ist das ganze mit ' und nicht mit " angegeben -> müsste mal jemand updaten...
Hallo Maddhin,
bleib mal ganz ruhig ;)
Offenbar ist derzeit im Wiki wirklich ein Fehler, JoWiemann hat das am 29.8 von ' nach " geändert.
Fakt ist: Mann muss den Aufruf bei der Adresse mit ' machen. Kann sein, beim Attachment anders. Ich brauche aber etwas Zeit um das zu probieren.
Bis dahin nimm bitte meine Version.
Hast Du jetzt mal meinen Vorschlag und deinen ursprünglichen Aufruf probiert oder nicht?
Gruß Otto
@otto123 : danke für Deine Geduld!
Also, meine 99_myUtils.pm sieht jetzt 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.
### Notifications über Prowl auf dem RPi versenden ###
sub prowl
{
my $subject = $_[0];
my $event = $_[1];
my $priority = $_[2];
my $ret = "";
$ret .= system("wget -q -O /dev/null 'http://api.prowlapp.com/publicapi/add?apikey=XXX&application=FHEM&event=$event&priority=$priority&description=$subject'");
$ret =~ s,[r
]*,,g;
Log 1, "prowl returned: $ret";
}
######## DebianMail Mail auf dem RPi versenden ############
sub DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $text = shift;
$text //= "";
my $attach = shift;
$attach //= "";
my $ret = "";
my $sender = "XXX\@outlook.com";
my $konto = "XXX\@outlook.com";
my $passwrd = "XXX";
my $provider = "smtp-mail.outlook.com:587";
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;
hier habe ich Deine Vorschläge implementiert und die Hochkommas bei '$attach' gesetzt (die fehlen im Wiki auch).
dann haue ich
{\DebianMail("123@outlook.com","Test","Test-Text","")\}
in die FHEM Befehlszeile und bekomme:
Global symbol "@outlook" requires explicit package name at (eval 61) line 1.
syntax error at (eval 61) line 1, near ")\"
Das Log sagt:
2016.09.24 16:49:12 1: PERL WARNING: Possible unintended interpolation of @outlook in string at (eval 62) line 1.
2016.09.24 16:49:12 3: eval: {\DebianMail("123@outlook.com","Test","Test-Text","")\}
2016.09.24 16:49:12 1: PERL WARNING: Backslash found where operator expected at (eval 62) line 1, near ")\"
2016.09.24 16:49:12 3: eval: {\DebianMail("123@outlook.com","Test","Test-Text","")\}
Was soll ich jetzt tun?
einfach erstmal meine Version nehmen ohne attach? Das mit attach war nicht so easy, ich erinnere mich an eine Diskussion. Deswegen war das ursprünglich im Wiki auch nicht drin.
Also Aufruf mit ' anstatt "
Siehe auch hier (https://forum.fhem.de/index.php?topic=16470.90).
Gruß Otto
Ein
{DebianMail('123@outlook.com','Test','Test-Text','')}
gibt jetzt ein
138
aus und im Log steht:
2016.09.24 17:20:51 1: sendEmail RCP: 123@outlook.com
2016.09.24 17:20:51 1: sendEmail Subject: Test
Ich versuche im Moment eine Email über die Konsole abzuschicken um zu sehen, ob das überhaupt funktioniert - bisher aber kein Erfolg, nur time outs a la
Sep 24 17:16:07 fhem sendEmail[2003]: ERROR => Timeout while connecting to smtp-mail.outlook.com:25 There was no response after 60 seconds.
Du bestehst auf der Variante mit attach? :'(
Der Fehler jetzt ist aber ein ganz anderer:
Zitatsmtp-mail.outlook.com:25
Ich weiß es nicht aber kann einfach sein, das Port 25 nicht geht. Lass den Port weg und lasse TLS auf auto.
Welches debian System fährst Du?
Teste also bitte erstmal ob alles auf Kommandozeile im debian System läuft bevor Du mit FHEM weitermachst!
Ich werde meinen Artikel (http://heinz-otto.blogspot.de/2015/02/email-senden-von-fhem-und-raspberrypi.html)mal noch etwas erweitern, nur der Link ins Wiki ist offenbar zu unsicher. :-X
Gruß otto
ja, ich hatte mehrere Kombinationen von TLS und Ports probiert. aber nichts geht.
Auf Pi2: Rasbian
Zitat von: maddhin am 24 September 2016, 11:35:50
ja, ich hatte mehrere Kombinationen von TLS und Ports probiert. aber nichts geht.
Auf Pi2: Rasbian
Och Mann :-X Jessie oder Wheezy?
Jessie - alles auf dem aktuellsten Stand (habe ich heute gemacht...)
Versuche es jetzt mal mit einem anderen Mail-Account. Vielleicht ist Outlook.com das Problem...
Outlook com muss gehen
-s 'smtp-mail.outlook.com'
-o tls=auto
Kein Port...
Gerade getestet!
Version sendEmail ? also einfach mal sendEmail ohne alles eingeben.
Version Perl perl -v eingeben
also immerhin ein Fortschritt: ein 1und1 Account geht!!!
Wir kommen dem Problem also näher. Werde jetzt noch mal einen anderes Outlook.com Postfach probieren...
Naja dann 8)
Nimm die 99_myUtils Routine die ich vorhin gepostet habe und die Aufrufe in der Form
{ DebianMail('<name@domain.tld>','Info vom FHEM System','Das EMail Modul funktioniert');;}
Ich schaue mir das mit dem attach und dem Wiki nochmal in Ruhe an.
Gruß Otto
ja, werde das jetzt alles wieder zusammenbasteln...
Aber das Problem mit Outlook.com besteht weiter. Auch ein anderer Account funkioniert nicht. Das ist nervig.
Werde weiterprobieren und melde mich, wenn es mit Outlook funktioniert oder ich mit den Anhängen dann nicht weiterkomme;)
Lieben Dank für die schnelle Hilfe und nen schönen Samstag!
Hm, obwohl ich in der Konsole eine
Sep 24 18:01:55 fhem sendEmail[1473]: Email was sent successfully!
bekomme, bekomme ich keine Emails... ::)
Werde weitersuchen oder ggf. mal die MIME::Lite Sache versuchen (sobald ich weiß wie das dann genau funktioniert) :'(
Spam Ordner durchsucht? 8)
Also ich habe gerade ein frisches Jessie genommen und folgendes getan:
sudo apt-get update
sudo apt-get install sendEmail libio-socket-ssl-perl libnet-ssleay-perl perl
dann
sendEmail -f 'xx@live.de' -t 'xx@xx.de' -u 'Hallo Welt' -m 'Das ist ein Test' -s 'smtp-mail.outlook.com' -xu '<accountname>' -xp '<Passwort>' -o tls=auto
Und schwubs habe ich ne Email. Einfacher geht es kaum ...
Gruß Otto
Hallo Otto,
danke für Deinen Einsatz - ich habe ja nicht gesagt, dass es generell nicht funktioniert;) Nur bei mir halt nicht...
Aber gute Neuigkeiten: in der Konsole funkioniert es mittlerweile!! Man höre und staune, ich hatte Empfänger und Sender bzw -f (from) und -t (to) vertauscht!! :-X Mea culpa.
Falls jemand mitliest, der das Wiki ändern kann: bitte das Beispiel noch etwas klarer schreiben. Dass -f 'fhemsystem@meinedomain.tld' = Absender und -t 'ich@meinedomain.tld' = Empfänger ist, ist nicht sofort klar.
Aber das war klar mein Fehler :'(, weil im Thread https://forum.fhem.de/index.php/topic,16470.0/all.html (https://forum.fhem.de/index.php/topic,16470.0/all.html) (Ergänzung zum Thema E-Mail auf dem Raspbery Pi senden) zwar klar steht, dass -f from und -t to ist aber ich dann ohne zu denken dem hier gefolgt bin:
Zitat
Wenn's mit Fhem nicht klappt
Sollte es beim Aufruf der Funktion in Fhem ein Problem geben, empfiehlt es sich zuerst eine E-Mail direkt von der Raspberry Konsole zu senden. Im folgenden Beispiel werden dazu die Zugangsdaten durch die eigenen Angaben ersetzt und als "EINE" Zeile an der Konsole eingegeben:
sendEmail -f 'Ziel@Adresse.de' -t 'absender@account.de' -u 'Betreffzeile' -m 'Test-Nachricht'
-s 'E-Mail-Anbieter' -xu 'kontoname@account.de' -xp 'passwort' -o tls=no
Zitat Ende
Den Post sollte man mal ändern... ;)
So, lange Rede, in der Konsole geht es aber in FHEM immernoch nicht. Könntest Du mal die 99_myUtils.pm überfliegen, ob Du da einen Fehler siehst?
##############################################
# $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.
### Notifications über Prowl auf dem RPi versenden ###
sub prowl
{
my $subject = $_[0];
my $event = $_[1];
my $priority = $_[2];
my $ret = "";
$ret .= system("wget -q -O /dev/null 'http://api.prowlapp.com/publicapi/add?apikey=XXX&application=FHEM&event=$event&priority=$priority&description=$subject'");
$ret =~ s,[r
]*,,g;
Log 1, "prowl returned: $ret";
}
######## DebianMail Mail auf dem RPi versenden ############
sub DebianMail
{
my $rcpt = shift;
my $subject = shift;
my $ret = "";
my $sender = "123\@123.com";
my $konto = "123\@123.com";
my $passwrd = "XXX";
my $provider = "smtp.1und1.de";
Log 1, "sendEmail RCP: $rcpt";
Log 1, "sendEmail Subject: $subject";;
$ret .= qx(sendEmail -f '$sender' -t '$rcpt' -u '$subject' -m '$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;
Ich versuche die Email mit
{DebianMail('abc@def.com','Test');;}
abzuschicken. Als Anwort kommt immer "138" und sowas im Log, aber keine Fehlermeldung (und keine Email)
2016.09.24 23:44:30 1: sendEmail RCP: abc@def.com
2016.09.24 23:44:30 1: sendEmail Subject: Test
Vielen Dank!
Heureka!
Ich weiß nicht woran es lag, aber ich habe mal ein Script für die Konsole gemacht ("DebianMail.pl" aus https://forum.fhem.de/index.php/topic,16470.0/all.html (https://forum.fhem.de/index.php/topic,16470.0/all.html)) - nur copy & paste und nachdem ich die Log 1 rausgenommen habe, etc. funktionierte es...
Habe alles aus Notepad++ wieder in die 99_myUtils.pm kopiert und die "print" Sachen entfernt.
Und siehe da: es funktioniert!
Und: mit dem "leerem Anhang" gibt es auch keine Fehlermeldung im Log mehr!!
Problem gelöst, obwohl eigentlich nichts geändert wurde. War wohl ein c&p / Format-Problem. Lehre: ggf. zuerst in einen ordentlichen Editor kopieren...
Danke, Otto!
Mann oh Mann, da hast Du ja in Fehlerkiste gegriffen.
Um das Wiki kümmere ich mich - aber nicht mehr heute.
Das mit dem kopieren wird immer wieder gern genommen. Besonders aus dem Windows Editor direkt in die Unixdatei (cr lf anstatt nur lf) gibt "interressante Effekte"
Wichtig ist, dass Du weitergekommen bist.
Gruß Otto
Ja, wenn Fehler, dann richtig :o
Auf die Anhänge komme ich vielleicht nochmal zu sprechen, wenn ich denn irgendwann mal dahin komme - sendEmail war ja nur ein Schritt um endlich IPCAM Bilder von SmartVisu via Email zu schicken...
Habe heute festgestellt, dass sendEmail Pushover außer Gefecht gesetzt hat... Also erstmal das wieder irgendwie reparieren... :'(
Ich habe das Wiki (http://www.fhemwiki.de/wiki/E-Mail_senden#Raspberry_Pi)etwas korrigiert und erweitert. Es hatte sich ein relativ kleiner "Fehler" eingeschlichen.
Gruß Otto