1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Unsere jährliche Weihnachts-Banner-Aktion hat begonnen! Wir freuen uns auf viele, viele kreative Vorschläge.
    Mehr dazu könnt Ihr hier nachlesen: Weihnachtsbanner 2016

    Information ausblenden

RegEx Mailfilter-Regel via Automator?

Dieses Thema im Forum "AppleScript" wurde erstellt von stk, 15.03.08.

  1. stk

    stk Grünapfel

    Dabei seit:
    05.01.04
    Beiträge:
    7.141
    Moin,

    ich würde gerne etwas mehr mit meinem eMails machen und diese anhand von bestimmten Inhalten weiterverarbeiten. Nun bietet Mail selbst zwar keine regulären Ausdrücke an, aber via Automator könnte ich auf die entsprechenden Funktionen zurückgreifen, die mir BBEdit oder die Shell (perl) bietet.

    Allerdings stelle ich mich einmal mehr beim Einsatz von Automator meters dappig an :oops:. So etwa soll's werden:
    [​IMG]

    Also: alle Mails ausfiltern, die als tägliche Statusmail von meiner Fritz!Box kommen. Darin die Zeile identifizieren, die mit »2« anfangen (das sind die verpassten Anrufe) und das Ergebnis per Growl ausgeben (oder als ToDo-Liste in iCal eintragen, neue Mail draus generieren, Dialogfenster auf den Schirm knallen, … egal was - Hauptsache ich krieg's mit ;))

    Wie auf dem Screenshot zu sehen ist, tue ich mich schon schwer das Ergebnis des RegEx weiterzuverarbeiten. Wie wird das übergeben? Und funktioniert das dann auch als Aufruf via »AppleScript ausführen« in den Mailfilterregeln?

    Gruß Stefan
     
  2. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    Hi Stefan!
    Ich bezweifle, dass BBEdit überhaupt erst ein Ergebniss erhält. Dazu müsstest Du nämlich den Text der Email übergeben. Also die Aktion
    • E-Mails kombinieren
    der Aktion Extract Lines voranstellen.

    Ja, aber die Growl-Aktion kann damit nichts anfangen.
    Also ist die Idee, dir eine Email mit der extrahierten Zeile als Inhalt zu schicken, schon besser.
    Dazu müsstest Du aber wohl TextEdit bemühen, sprich die Aktion
    • Inhalt des TextEdit Dokuments festlegen
    der Aktion Extract Lines anhängen und dann • Neue E-Mail und • E-Mail senden

    Naja, Du müsstest den Automator Workflow mit AppleScript ausführen lassen. Am einfachsten ist es, den Workflow als App zu speichern und ein AS zu erstellen a la
    tell app "XY" to open
    …Nur in dieser Form ist das --mit Verlaub-- irgendwie unsinnig. Diese Mail-Regel würde immer wieder alle vorhandenen PushService-Emails abfragen und nicht nur die aktuelle.

    Du merkst schon, das ist nicht der optimale Weg, den Du da gehst… aber es ist machbar :)
    Besser wäre ein passendes Script zu schreiben. Eventuell schreibt da ja noch jemand etwas dazu.

    Gruss
     
  3. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Wie wäre es statt einer Automator-Lösung mit einer Regel in Mail.app der folgenden Bauart?

    [​IMG]

    Bei "Skriptname" ein AppleScript, so ähnlich wie folgendes, einfügen:

    Code:
    on perform mail action with messages selectedMessages for rule theRule
      tell application "Mail"
        repeat with thisMessage in selectedMessages
          set thisContent to content of thisMessage
          set filteredContent to do shell script "echo " &
            quoted form of thisContent &
            "|grep '^2\b'"
          
          (* hier jetzt den Inhalt von filteredContent weiterverarbeiten *)
    
        end repeat
      end tell
    end perform mail action
    
     
  4. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    Na bitte! :-D
    Fehlt nur noch der Teil mit der Growl-Benachrichtigung.
    Dazu gibt es hier Beispielscripte: Klick
     
    quarx gefällt das.
  5. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    Und?Wie sieht jetzt deine Lösung aus?
    Lass uns teilhaben!
    Und ausserdem … keine Rückmeldung … jetzt auch von dir???

    Na dann Prost!
     
  6. stk

    stk Grünapfel

    Dabei seit:
    05.01.04
    Beiträge:
    7.141
    Moin,

    sorry, hatte noch ein paar andere Sachen auf dem Schreibtisch und so ganz auf Anhieb lief's halt nicht. Blöde, wenn einem dann die Zeit zum Nachfummeln fehlt o_O.

    Also aktueller Stand: Im Prinzip ist's schon fast das, was ich haben wollte. Allerdings fliegt mir das »quoted form of thisContent« um die Ohren, weil natürlich blöderweise im Text von thisContent Anführungszeichen stecken o_O. Ebenso muß ich noch eine Fehlerbehandlung einbauen, was passiert, wenn mal ein verpasster Anruf dabei ist.

    Da der Aufruf auch nicht von Anfang an funktionierte (da mußte noch »using terms from application "Mail"« an den Anfang und natürlich der passende Schliesser dazu) bin ich noch etwas auf die Suche gegangen um bei macosxhints.com das hier zu finden:

    http://www.macosxhints.com/article.php?story=2008012419354669

    Zum einen steckt da die Growl-Benachrichtigung drin und - sehr nett auch - ein Nachschlagen im Adressbuch um das passende Bild - hier des Mailschreibers, entsprechend dann des Anrufers, wenn man die Telefonnummer nachblätteren läßt - mit in die Nachricht einzublenden.

    Ein weiterer Fehler wurde geworfen als ich versuchte noch den nachfolgenden Blank von der führenden »2« der Zeile in den RegEx reinzunehmen. Das »\b« wollte AS partout nicht verarbeiten. Ich denke aber, nach allem, was ich bisher an Statusmails gesehen habe, dass ich das Blank ebenso gut weglassen kann. »^2« sollte als Suchbegriff erstmal ausreichend sein.

    Last but not least muß ich für diese Benachrichtigung noch mein Standard-Growl-Theme »MusicVideo« abändern und besser die Bubbles sticky machen, sonst geht die Benachrichtigung den Bach runter wenn die des nächtens (die FritzBox sendet immer um Mitternacht) auf den Bildschirm geschmissen werden. Viel zu tun also noch :oops:.

    So sieht das Ganze im Moment aus:

    Code:
    using terms from application "Mail"
    	on perform mail action with messages newMessages for rule theRule
    		repeat with newMessage in newMessages
    			set thisContent to content of thisMessage
    			set filteredContent to do shell script "echo " & quoted form of thisContent & " | grep '^2'"
    			
    			(* hier jetzt den Inhalt von filteredContent weiterverarbeiten *)
    			display dialog "Verpaßte Anrufe von:
    		" & filteredContent buttons {"OK"} default button 1
    		end repeat
    	end perform mail action with messages
    end using terms from
    
    Ergibt dann beispielsweise eine Meldung wie im Anhang. Auch da ist noch etwas Feinschliff dran zu betreiben, so daß eben nur die Rufnummer überbliebt und wie oben schon erwähnt ggf. das Bildchen dazu kommt… Aber erstmal muß ich das Ding mit den Anführungszeichen im Ausgangstext gelöst bekommen o_O.

    Gruß Stefan
     

    Anhänge:

  7. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Stimmt, das "using terms from" gehört dazu. Kommt davon, wenn man seine Tipps nicht austestet. :innocent:
    Was kommt denn da für eine Fehlermeldung bei Dir? Nach Apple soll man beim Übergeben von Anführungszeichen enthaltendem Text an die Shell auf jeden Fall "quoted form of" benutzen. Oder gibt es Probleme mit dem durch die Shell zurückgegebenen Text?
     
  8. stk

    stk Grünapfel

    Dabei seit:
    05.01.04
    Beiträge:
    7.141
    Moin,

    nope - ich hab gar keine Rückgabe. Ich hab den kompletten Text der eMail einfach mal hart in die Variable eingesetzt und hatte dann schon beim direkten Aufruf einen Syntax-Fehler zurückgemeldet bekommen, weil der Inhalt der Variable ja quasi am ersten Anführungszeichen im Mailtext endet und danach für AS sinnloser Kram dranhängt. So schaut der betreffende Abschnitt aus:

    Code:
    Anrufliste
    ----------
    In der Anrufliste werden alle Telefonate erfasst, die mit FRITZ!Box am 18.03.2008 geführt wurden. Bitte beachten Sie: Diese Anrufliste kann von der exakten Abrechnung Ihrer Telefonieanbieter abweichen.
               "1" eingehende Anrufe    "2" eingehende Anrufe in Abwesenheit    "3" ausgehende Anrufe
    
    3 18.03.08 16:28    Name , Rufnummer xxxxx, Nebenstelle FON S0, Eigene Rufnummer xxxxx, Dauer (hh:mm) 0:07
    3 18.03.08 15:00    Name , Rufnummer xxxxx, Nebenstelle FON S0, Eigene Rufnummer xxxxx, Dauer (hh:mm) 0:02
    …
    
    Die Erklärungszeile sorgt für den Prassel. Und die erste Rufnummer in der Zeile ist eigentlich das was ich brauche. Müßte in RegEx also so etwas sein:

    Code:
    ^2.*?Rufnummer\b(.*?),.*?\r
    korrekt? Den Inhalt der Klammer - \1 - wäre dann mein Rufnummerergebnis, welche ich als Suche ans Adressbuch übergeben könnte, resp. anzeigen lasse. »Name« ist ein Wert der aus dem Telefonbuch der FritzBox käme, da sich das aber noch nicht komfortabel (Import von .csv, .ldif, .vcd-Dateien) pflegen läßt ist der Eintrag i.d.R. immer generisch.

    Die zweite Rufnummer könnte man dann ggf. noch auswerten um anzugeben, wen der Anrufer denn zu erreichen wünschte, aber das ist eigentlich eher wurscht.

    Gruß Stefan
     
  9. quarx

    quarx Hadelner Sommerprinz

    Dabei seit:
    17.04.05
    Beiträge:
    8.541
    Man könnte die 5 Erklärungszeilen bei Bedarf auch einfach ignorieren lassen, indem man die Ausgabe im Shell-Befehl vor dem grep erst durch ein
    Code:
    sed '1,5d'
    durch-pipe-t.

    Edit: Die erste Rufnummer könnte man in der Shell mit
    Code:
    sed 's/\(.*\)Rufnummer //;s/,\(.*\)//'
    herausschnippeln. Dann müsstest Du insgesamt ein
    Code:
    grep '^2' | sed 's/\(.*\)Rufnummer //;s/,\(.*\)//'
    verwenden. Da führen wahrscheinlich viele Wege zum Ziel.
     
    #9 quarx, 19.03.08
    Zuletzt bearbeitet: 19.03.08
  10. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    Die "" im Text müssen ja maskiert werden.
    Da hier ja eh schon regex benutzt wird, ist das wohl damit auch am einfachsten zu lösen -- wenn man es denn kann-- Theoretisch wäre mir das klar, auch dank des Exkurses von Skeeve hier. Praktisch stehe ich da aber auf wackligen Beinen.
    Naja, es geht auch mit "reinem" AppleScript.
    Das ist jetzt ungetestet, sollte aber gehen:

    Code:
    using terms from application "Mail"
    	on perform mail action with messages newMessages for rule theRule
    		repeat with newMessage in newMessages
    			set thisContent to content of thisMessage
    			
    			set srchList to {"\""}
    			set replList to {"\""}
    			
    			set replList to every text item of replList
    			set AppleScript's text item delimiters to srchList
    			set the temp to every text item of thisContent
    			set AppleScript's text item delimiters to replList
    			set thisContent to temp as string
    			
    			set filteredContent to do shell script "echo " & quoted form of thisContent & " | grep '^2'"
    			
    			(* hier jetzt den Inhalt von filteredContent weiterverarbeiten *)
    			display dialog "Verpaßte Anrufe von:
    		" & filteredContent buttons {"OK"} default button 1
    			set AppleScript's text item delimiters to ""
    		end repeat
    	end perform mail action with messages
    end using terms from
    Die Grundlagen meines Scripteinschubes stammen übrigens von dieser (genialen) Site: Klick

    Gruss
     
    #10 space, 20.03.08
    Zuletzt bearbeitet: 28.03.08
  11. space

    space Neuer Berner Rosenapfel

    Dabei seit:
    02.12.05
    Beiträge:
    1.950
    Und um Growl ins Spiel zu bringen:
    Wenn Du das Example Script von der verlinkten Site ausführst, werden ja zwei "Notifications" registriert (Test Notification, Another Test Notification)
    Die verwendeten Namen in dem Skript kann man ja ändern … aber um es nicht zu verwirrend zu machen, habe ich die vorgeschlagenen mal übernommen.

    In deinem Script könntest Du dann die Zeilen

    Code:
    display dialog "Verpaßte Anrufe von:
    		" & filteredContent buttons {"OK"} default button 1
    ersetzen durch
    Code:
    tell application "GrowlHelperApp"
    	notify with name "Test Notification" title "Verpasste Anrufe" icon of application "Mail" description filteredContent application name "Growl AppleScript Sample" sticky "Yes"
    end tell
    Grüsse
    Space
     

Diese Seite empfehlen