Mail: Bewege flagged Emails in Ordner XY

Es ist schon erstaunlich, dass es keine Regel in Apple Mail zu geben scheint, mit der man markierte (diese kleine rote Flage) Emails automatisch in einen anderen Ordner verschieben kann… hm Vielleicht weil die Regeln in der Regel nur auf neue Emails angewendet werden, die von Natur aus nicht markiert sind…
Nun, dieses Skript springt sofort auf markierte E-Mails an und verschiebt diese in definierbaren Ordner. In den Einstellungen die am Anfang des Skriptes gemacht werden können, kann der Account-Name, die zu durchsuchenden Ordner (Plural!) und der Zielordner angegeben werden. Um auch verschachtelte Ordner als Quelle oder Ziel angeben zu können, werden diese “Pfade” als Liste eingegeben… Erläuterung im Quelltext…
Ein netter Zusatz ist die Abfrage, ob Mail überhaupt läuft. So wird ein unfreiwilliger Start von Mail durch das Skript (z.B. via crontab) verhindert.

--10.12.2011 hubionmac.com
--Beweg Emails die markiert sind in einen anderen Ordner
-- In den Prefs können als Quelle mehrere Ordner angegeben werden
-- Unterordner werden in Form einer Liste angegeben z.B. um den Ordner Bla im Ordner Fasel anzugeben -> {"Fasel","Bla"}
--Beim Ziel-Ordner kann wahlweise angegeben werden, ob es sich um einen lokal oder ggf. um einen IMAP-Ordner des jeweiligen Accounts handelt

set theprefs to {¬
  {AccountName:"hubionmac.com", SourceFolders:{{"INBOX"}, {"Archive", "Kleiner Test"}}, DestinationFolder:{"Sammel", "Lager"}, DestinationFolderIsLocal:false}, ¬
  {AccountName:"gmx.net", SourceFolders:{{"INBOX"}, {"bla", "blafasel"}}, DestinationFolder:{"Sammel", "Lager"}, DestinationFolderIsLocal:false} ¬
    }
--prüfer erst mal ob Mail läuft… denn extra gestartet werden soll es deswegen mal nicht
tell application "System Events"
  set MailIsRunning to (count of (every process whose bundle identifier is "com.apple.mail")) > 0
end tell
end
if MailIsRunning then
  tell application "Mail"
    repeat with todo in theprefs
      set AccountName to AccountName of todo
      set SourceFolders to SourceFolders of todo
      set DestinationFolder to DestinationFolder of todo
      set islocal to DestinationFolderIsLocal of todo
      set TheDestinationFolder to my getFolderReference(AccountName, DestinationFolder, islocal)
      repeat with SourceFolder in SourceFolders
        set TheSourceFolder to my getFolderReference(AccountName, SourceFolder, false)
        -- get the mails that are interesting
        set themails to (every message of TheSourceFolder whose flagged status is true)
        
        --movethemails
        repeat with themail in themails
          move themail to TheDestinationFolder
        end repeat
      end repeat
    end repeat
  end tell
end if

on getFolderReference(AccountName, DestinationFolder, isAlwayslocal)
  tell application "Mail"
    set TheDestinationFolder to ""
    set islocal to (get account type of account AccountName is pop)
    if isAlwayslocal = true then set islocal to true
    repeat with FolderName in DestinationFolder
      if islocal then
        if FolderName as string ≠ "INBOX" then
          if TheDestinationFolder = "" then
            set TheDestinationFolder to mailbox FolderName
          else
            set TheDestinationFolder to mailbox FolderName of TheDestinationFolder
          end if
        else
          set TheDestinationFolder to mailbox FolderName of account AccountName
        end if
      else
        if TheDestinationFolder = "" then
          set TheDestinationFolder to mailbox FolderName of account AccountName
        else
          set TheDestinationFolder to mailbox FolderName of TheDestinationFolder
        end if
      end if
    end repeat
    return TheDestinationFolder
  end tell
end getFolderReference

									

Um das Skript immer mal wieder ablaufen zu lassen, kann man z.B. den crontab nutzen. Dazu am einfachsten via CronniX einen solchen für den aktuellen Nutzer einrichten und das Script mit dem Befehl osascript /Pfad/zur/.scpt-Datei alle x-Minuten laufen lassen. Wie so ein Intervall einzurichten ist, wird sehr gut in der Cronnix-Hilfe erläutert. (was lange währt wird endlich programmiert Thorkillar :-) )