FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Marci am 23 November 2015, 22:11:42

Titel: [PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: Marci am 23 November 2015, 22:11:42
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.
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: justme1968 am 24 November 2015, 10:54:57
hab die do_notify auswertung wieder eingebaut und es eingecheckt.

gruss
  andre
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: PsychoD am 24 November 2015, 12:26:49
Witziger Zufall - wollte gerade um genau das bitte, da sehe ich dass es bereits geschehen ist! :) DANKE!
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: Marci am 24 November 2015, 16:24:40
Auch von mir: Vielen Dank!
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: PsychoD am 24 November 2015, 18:16:23
Jetzt muss es nur noch ins update reinkommen  :)
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: justme1968 am 24 November 2015, 18:17:48
morgen früh
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: Benni am 24 November 2015, 18:32:12
Sehr schön!

Das habe ich neulich auch schon mal vermißt.

Danke!
Funktioniert!  8)
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: Marci am 26 November 2015, 20:00:02
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?
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: justme1968 am 27 November 2015, 10:02:57
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
Titel: [PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: Benni am 27 November 2015, 10:22:53
Ja, auf jeden Fall die E-Mail Adresse.
Den Namen könnte man ja optional noch in einem weiteren Reading bereitstellen.
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: Marci am 27 November 2015, 17:38:41
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.
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag 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. 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
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: Marci am 27 November 2015, 23:38:33
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
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: justme1968 am 28 November 2015, 00:05:00
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
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: Marci am 28 November 2015, 01:16:30
Stimmt, da steht ja noch etwas. Hab mich nur auf das Regex konzentriert. ;D
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: justme1968 am 28 November 2015, 11:08:23
heisst das es funktioniert so und ich kann es einchecken ?

gruss
  andre
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: Marci am 28 November 2015, 12:29:05
Ich wusste nicht, dass du auf einen Test wartest, sorry. Ich habe es jetzt getestet und es funktioniert, wie erwartet, einwandfrei.
Titel: Antw:[PATCH] - 32_mailcheck.pm - Bitte um Aufnahme der letzten From-Adr. als Reading
Beitrag von: justme1968 am 28 November 2015, 13:50:21
hab es eingecheckt.

gruss
  andre