Applescript in Mail unter catalina

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Applescript in Mail unter catalina

    Hallo

    Weiß jemand ob Applescript unter Catalina in Mail probleme macht?

    ich hab seit längeren einen Mailfilter in Mail welcher mir bestimmte Attachments archiviert - wie das so ist mit automatisierten Sachen hab ich jetzt mitbekommen das seit Januar das script nicht mehr ausgeführt wird. Sprich die Attachments landen nicht mehr in meinem designierten Verzeichnis.

    Nach längerem erfolglosem rumprobieren:

    unter anderem hab ich Mail in den Sicherheitseinstellungen vollen Disk Zugriff gewehrt
    im script selbst rumgedoktert (den path mit "as «class furl»" zu erstellen)

    hab ich bemerkt, dass wenn ich die Mailregeln von Hand zum testen starte in der Menüleiste eine kleines Zahnrad aufblinkt - ich hab mal geschafft da drauf zu kommen und da steht nur ein "Script Failed" für jede einzelne Mail die das Script ausführen lässt…

    Bei meinen Versuchen hatte ich auch probiert mal etwas mitzuloggen aber entweder hat der "logger" aufruf nicht funktioniert oder das script als solche wird schon nicht ausgeführt. Zumindest tauchen in den Logs weder Fehlermeldungen noch meine Logausgaben auf…
    Ich bin nun auch nicht wirklich firm mit Applescript darum meine Frage ob sich da jemand mit auskennt :D

    Hier das kurze Ding von script (hat jahrelang klaglos funktioniert…)
    liegt im Application Scripts/com.apple.mail und wird in den Regeln von Mail einfach mit "Run Applescript" eingebunden

    Quellcode

    1. using terms from application "Mail"
    2. on perform mail action with messages theMessages for rule theRule
    3. repeat with theMessage in theMessages
    4. -- The folder to save the attachments in (must already exist)
    5. set homeFolder to (path to home folder) as rich text
    6. set attachmentsFolder to (homeFolder & "Documents:Telekom") as rich text
    7. -- Save in a sub-folder based on the name of the rule in Mail
    8. set subFolder to name of theRule as rich text
    9. tell application "Finder"
    10. if not (exists folder subFolder of folder attachmentsFolder) then
    11. make new folder at attachmentsFolder with properties {name:subFolder}
    12. end if
    13. end tell
    14. -- Get the date the message was sent
    15. set {year:y, month:m, day:d, hours:h, minutes:min} to theMessage's date sent
    16. set timeStamp to ("" & y & "-" & my pad(m as integer) & "-" & my pad(d) & "-" & my pad(h) & "-" & my pad(min))
    17. -- Save the attachment
    18. repeat with theAttachment in theMessage's mail attachments
    19. set originalName to name of theAttachment
    20. set savePath to attachmentsFolder & ":" & subFolder & ":" & timeStamp & " " & originalName
    21. try
    22. save theAttachment in file savePath
    23. end try
    24. end repeat
    25. end repeat
    26. end perform mail action with messages
    27. end using terms from
    28. -- Adds leading zeros to date components
    29. on pad(n)
    30. return text -2 thru -1 of ("00" & n)
    31. end pad
    Alles anzeigen
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • News zum Thema: hab das logging nun hinbekommen und weiß jetzt, dass das Script nun immerhin ausgeführt wird.

    Allerdings funktioniert irgend etwas Grundsätzliches nicht mehr.

    laut meines exzessiven loggings werden korrekt eine list an emails in "theMessages" für die Regel "theRule" übergeben

    wenn ich aber innerhalb der Schleife mir zb beispielhaft ein "subject" einer "message" loggen lassen möchte schlägt das fehl… ?(
    [edit] liefert schon ausserhalb der schleife nix mehr...

    my logToConsole(name of theRule as rich text) ----> liefert im log korrekt den Namen der Filterregel
    my logToConsole(count of allMessages) ----> liefert korrekt die Anzahl der gefilterten Mails
    my logToConsole(subject of some item of allMessages) ----> nix nil null....

    Quellcode

    1. using terms from application "Mail"
    2. on perform mail action with messages allMessages for rule theRule
    3. my logToConsole(name of theRule as rich text)
    4. my logToConsole(count of allMessages)
    5. my logToConsole(subject of some item of allMessages)
    6. repeat with theMessage in allMessages
    7. my logToConsole("inside the loop")
    8. my logToConsole(subject of theMessage)
    9. my logToConsole(sender of theMessage)
    10. -- The folder to save the attachments in (must already exist)
    11. set homeFolder to (path to home folder) as «class furl»
    12. my logToConsole(homeFolder)
    13. set attachmentsFolder to (homeFolder & "Documents:Telekom") as «class furl»
    14. -- Save in a sub-folder based on the name of the rule in Mail
    15. set subFolder to name of theRule as «class furl»
    16. -- tell application "Finder"
    17. -- if not (exists folder subFolder of folder attachmentsFolder) then
    18. -- make new folder at attachmentsFolder with properties {name:subFolder}
    19. -- end if
    20. -- end tell
    21. -- Get the date the message was sent
    22. set {year:y, month:m, day:d, hours:h, minutes:min} to theMessage's date sent
    23. set timeStamp to ("" & y & "-" & my pad(m as integer) & "-" & my pad(d) & "-" & my pad(h) & "-" & my pad(min))
    24. -- Save the attachment
    25. --my logToConsole(title of theMessage as rich text)
    26. repeat with theAttachment in theMessage's mail attachments
    27. set originalName to name of theAttachment
    28. set savePath to attachmentsFolder & ":" & subFolder & ":" & timeStamp & " " & originalName as «class furl»
    29. my logToConsole(savePath as rich text)
    30. try
    31. save theAttachment in file savePath
    32. end try
    33. end repeat
    34. end repeat
    35. end perform mail action with messages
    36. end using terms from
    37. -- Adds leading zeros to date components
    38. on pad(n)
    39. return text -2 thru -1 of ("00" & n)
    40. end pad
    41. on logToConsole(txt)
    42. do shell script "/usr/bin/logger \"Mail script:\" " & txt
    43. end logToConsole
    Alles anzeigen
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von chartus () aus folgendem Grund: aktuelle Version des scripts

  • So - auch wenn das Thema wohl doch eher weniger interessant ist - ich möchte nun "Lösen"...

    Nach eine paar Stunden Recherche und ewigen probieren und testen habe ich herausbekommen, dass das Ganze durch eine Race condition verursacht wird.

    Apple Mail startet (seit Catalina) alle Filteraktionen asynchron (vermutlich mit einem OperationQueue oder so)

    in meinem Mailfilter waren drei Aktionen aktiv:
    1. Verschiebe die Mail in die ArchiveMailbox
    2. Markier als "gelesen"
    3. Run Applescript -> mein Archivscript für die Attachments
    Bei der Ausführung der Regel ist es dann permanent passiert das dem Applescript sozusagen die Mails unter dem Hintern wegsortiert worden.
    Das dumme ist, das dieses Verhalten erst mit der Mailversion in Catalina aufgetreten ist und mir auch kein vernünftiger workaround einfallen mag wie ich das anderweitig hinbekomme - ausser das applescript so komplex zu gestallten das es auch die Mailboxen in 'Mail' verwaltet. Allerdings würde ich das gern vermeiden…

    so denn
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!