[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading

Begonnen von Marci, 23 November 2015, 22:11:42

Vorheriges Thema - Nächstes Thema

Marci

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

justme1968

hab die do_notify auswertung wieder eingebaut und es eingecheckt.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

PsychoD

Witziger Zufall - wollte gerade um genau das bitte, da sehe ich dass es bereits geschehen ist! :) DANKE!


PsychoD


justme1968

hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Benni

Sehr schön!

Das habe ich neulich auch schon mal vermißt.

Danke!
Funktioniert!  8)

Marci

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?

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Benni

Ja, auf jeden Fall die E-Mail Adresse.
Den Namen könnte man ja optional noch in einem weiteren Reading bereitstellen.

Marci

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.

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Marci

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

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Marci

Stimmt, da steht ja noch etwas. Hab mich nur auf das Regex konzentriert. ;D