send email: PERL WARNING: Use of uninitialized value $attach in concatenation (.

Begonnen von maddhin, 24 September 2016, 09:46:58

Vorheriges Thema - Nächstes Thema

maddhin

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.



MadMax-FHEM

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

bzw. selber im Forum suchen... ;-)

Gruß, Joachim

EDIT: aber dass fhem bei sowas "kaputt" geht/gehen soll (ist ja "nur" eine WARNING) ist eigenartig...
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Otto123

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
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

maddhin

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?

Otto123

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";
}
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

MadMax-FHEM

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...

FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

maddhin

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...


Otto123

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
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

maddhin

@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?

Otto123

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.

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

maddhin

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.

Otto123

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 mal noch etwas erweitern, nur der Link ins Wiki ist offenbar zu unsicher.  :-X

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

maddhin


ja, ich hatte mehrere Kombinationen von TLS und Ports probiert. aber nichts geht.

Auf Pi2: Rasbian

Otto123

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?
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

maddhin

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...