Ich bitte um Aufnahme der letzten From-Adresse als Reading. Begründung: Ähnlich wie im Wiki zum Jabber-Modul (http://www.fhemwiki.de/wiki/FHEM_spricht_jabber (http://www.fhemwiki.de/wiki/FHEM_spricht_jabber)), möchte ich auch Antworten zu Mails senden können. Der Patch befindet sich im Anhang. Ich habe das neue Reading auch unter dem Punkt "Readings" im Doku-Teil aufgenommen.
hab die do_notify auswertung wieder eingebaut und es eingecheckt.
gruss
andre
Witziger Zufall - wollte gerade um genau das bitte, da sehe ich dass es bereits geschehen ist! :) DANKE!
Auch von mir: Vielen Dank!
Jetzt muss es nur noch ins update reinkommen :)
morgen früh
Sehr schön!
Das habe ich neulich auch schon mal vermißt.
Danke!
Funktioniert! 8)
Ich habe jetzt festgestellt, dass es nur teilweise funktioniert. Es wird daran liegen, dass einige Mailanbieter (z.B. googlemail) im Webinterface das Format
"Name <irgendwas@irgendwo.de>"
als Absender verwenden. Durch das Regex am Anfang des Moduls wird allerdings gerade der wichtige Teil (also die Absender-Adresse) rausgefiltert. Mein Vorschlag: Entweder das Regex so ändern, dass es den wichtigen Teil übernimmt oder eine neue Variable, in der dieser Teil gespeichert wird. Dann ist auch die Frage, welches Reading gewünscht wird. Nur die Mailadresse oder der Name und die Mailadresse?
Vorschläge? Wünsche?
ich würde vorschlagen das so umzubauen das die e-mail adresse und nicht der name in $from steht.
also if( $from =~ m/<([^>]*)>/ ) {
$from = $1;
}
statt$from =~ s/<[^>]*>//g;
gruss
andre
Ja, auf jeden Fall die E-Mail Adresse.
Den Namen könnte man ja optional noch in einem weiteren Reading bereitstellen.
Genau das meinte ich. Entweder eine neue Variable+Reading oder die Adresse ins From. Ich brauche den Namen nicht.
Darf ich aber ein anderes Regex vorschlagen?
\b[\w\d.%+-]+@(?:[\w\d-]+\.)+[\w]{2,}\b
Denn lt. RFC sind die spitzen Klammern (<>) keine Pflicht.
die spitzen klammern sind nicht pflicht aber wenn zusätzlich zur eigentlichen adresse noch andere dinge stehen dann muss die adresse in den spitzen klammern stehen. mein vorschlag oben extrahiert den teil innerhalb der spitzen klammern falls sie da sind und wenn nicht wird alles genommen.
deine regex nimmt bei so etwas wie "jetzt@aergere.ich.dich <irgendwas@irgendwo.de>" den falschen teil. das ist natürlich ein konstruiertes beispiel und ich weiss nicht wie relevant das ist aber im prinzip könnte man damit einen falschen absender unterjubeln.
gruss
andre
Zitat von: justme1968 am 27 November 2015, 19:06:42
die spitzen klammern sind nicht pflicht aber wenn zusätzlich zur eigentlichen adresse noch andere dinge stehen dann muss die adresse in den spitzen klammern stehen.
Das stimmt!
Zitat von: justme1968 am 27 November 2015, 19:06:42
mein vorschlag oben extrahiert den teil innerhalb der spitzen klammern falls sie da sind und wenn nicht wird alles genommen.
Übersehe ich hier irgendetwas? Die spitzen Klammern im Regex sind ja nicht optional, sondern müssen matchen. Ein kleiner Test bestätigt das auch:
[root@beebox ~]# perl -e 'my $test = "\"Test\" <irgend.wer\@irgend.wo>";' -e '$test =~ m/<([^>]*)>/;' -e 'print "In: $test\nOut: $1\n";'
In: "Test" <irgend.wer@irgend.wo>
Out: irgend.wer@irgend.wo
[root@beebox ~]# perl -e 'my $test = "irgend.wer\@irgend.wo";' -e '$test =~ m/<([^>]*)>/;' -e 'print "In: $test\nOut: $1\n";'
In: irgend.wer@irgend.wo
Out:
Ohne spitze Klammern, keine Adresse.
Edit:Hier eine Alternative:
m/(?|.*<([^>]*)>|(.*))/
[root@beebox ~]# perl -e 'my $test = "\"Test\" <irgend.wer\@irgend.wo>";' -e '$test =~ m/(?|.*<([^>]*)>|(.*))/;' -e 'print "In: $test\nOut: $1\n";'
In: "Test" <irgend.wer@irgend.wo>
Out: irgend.wer@irgend.wo
[root@beebox ~]# perl -e 'my $test = "<irgend.wer\@irgend.wo>";' -e '$test =~ m/(?|.*<([^>]*)>|(.*))/;' -e 'print "In: $test\nOut: $1\n";'
In: <irgend.wer@irgend.wo>
Out: irgend.wer@irgend.wo
[root@beebox ~]# perl -e 'my $test = "irgend.wer\@irgend.wo";' -e '$test =~ m/(?|.*<([^>]*)>|(.*))/;' -e 'print "In: $test\nOut: $1\n";'
In: irgend.wer@irgend.wo
Out: irgend.wer@irgend.wo
ZitatÜbersehe ich hier irgendetwas?
ich glaube ja :): da steht noch ein if.
my $from = $client->get_header($resp, "From");
if( $from =~ m/<([^>]*)>/ ) {
$from = $1;
}
wenn die regex matched wird das was zwischen den spitzen klammern steht als als from verwendet. aber wenn sie nicht matched (d.h. es gibt keine spitzen klammern zwischen denen etwas steht) dann bleibt $from wie es ist und somit alles was hinter From: im mail header steht.
gruss
andre
Stimmt, da steht ja noch etwas. Hab mich nur auf das Regex konzentriert. ;D
heisst das es funktioniert so und ich kann es einchecken ?
gruss
andre
Ich wusste nicht, dass du auf einen Test wartest, sorry. Ich habe es jetzt getestet und es funktioniert, wie erwartet, einwandfrei.
hab es eingecheckt.
gruss
andre