macOS-Tipp 63 – Apple Mail per AppleScript zurücksetzen

AppleSkript bietet — neben den Anwendungen Automator und Kurzbefehle — die Möglichkeit, Prozesse zu automatisieren. In diesem Tutorial möchte ich zeigen, wie mit einem Skript Apple Mail zurückgesetzt werden kann. Genauer gesagt werden die Index-Dateien

  • Envelope Index,
  • Envelope Index-shm und
  • Envelope Index-wal

entfernt.

Zum Zurücksetzen von Apple Mail hatte ich übrigens vor einiger Zeit bereits ein Tutorial geschrieben. Dabei wurde dieser Vorgang über das Terminal vorgenommen. Der hier gezeigte Weg ist insofern vorzugswürdig, als dass das erstellte Skript immer wieder aufgerufen werden kann. Das erspart die Eingabe von Shell-Anweisungen.

Für das Erstellen von Apple-Skripten hat Apple standardmäßig auf jedem Mac das Programm Skripteditor installiert, das sich im Verzeichnis

> Programme > Dienstprogramme

versteckt. Alternativ kann diese Anwendung auch über Spotlight, aufzurufen über die Tastenkombination command + Leertaste, gestartet werden. Gebt in das sich öffnende Suchfeld einfach „Skripteditor“ als Suchbegriff ein.

Nach dem Öffnen des Skripteditors ist die Option „Neues Dokument“ auszuwählen. Stellt sicher, dass sich im öffnenden Editor-Fenster, das die Bezeichnung „Ohne Titel“ trägt, „AppleScript“ (und nicht JavaScript) ausgewählt ist.

Skriptsprache im Skripteditor festlegen

Skript schreiben

In meinen Skripten beginne ich nicht sofort mit dem Code, sondern mit einigen Kommentarzeilen, die mit zwei Gedankenstrichen eingeleitet werden:

-- Delete the index files of Apple's mail app
-- Author: bodo
-- Version: 1.0
-- Date created: January 15th, 2022
-- Date modified: -

Dann geht es an den eigentlichen Code. Zunächst gilt es den Pfad zu den Index-Dateien festzulegen:

set index_file to (path to library folder from user domain as text) & "Mail:V9:MailData:Envelope Index"
set index_shm_file to (path to library folder from user domain as text) & "Mail:V9:MailData:Envelope Index-shm"
set index_wal_file to (path to library folder from user domain as text) & "Mail:V9:MailData:Envelope Index-wal"

Wir erreichen dies mit den Befehl set, gefolgt von einem Variablennamen. Mithilfe von set wird ein Wert einer Variable zugewiesen, so dass über diese Variable der Wert referenziert wird. Oder anders ausgedrückt: die Variable enthält den Wert.

Folgendes Beispiel soll dies verdeutlichen. Um meinen Namen einer Variable zuzuweisen, müsste ich in AppleSkript folgendes schreiben:

set my_name to "bodo"

Über die Variable „my_name“ könnte ich nun auf den Wert „bodo“ zugreifen. Dasselbe bewirken die ersten drei Zeilen des Skripts. Jeder Pfad zur jeweiligen Index-Datei wird einer Variablen zugewiesen.

Die Index-Dateien befinden sich unter macOS Monterey im Verzeichnis

/Users/<Benutzername>/Library/Mail/V9/MailData

Dieser Pfad kann jedoch nicht einfach einer Variable zugewiesen werden, ohne das es Probleme geben würde. Denn der Benutzername ist grundsätzlich auf jedem Mac verschieden. Der Pfad muss also dergestalt generalisiert werden, dass der Code auf jedem Mac funktioniert. Dies übernimmt die Zeile

(path to library folder from user domain as text)

Der erste Teil

path to library folder from

sollte selbsterklärend sein. Interessanter ist der Teil

from user domain

Damit wird erreicht, dass der Pfad des jeweils angemeldeten Benutzers verwendet wird. Auf meinem Mac würde dies „/Users/bodo/“ entsprechen.

Mit as text wird lediglich sichergestellt, dass der Pfad als Text genutzt wird. Damit haben wir jetzt den ersten Teil des Pfads zum Library-Verzeichnis:

"Users:<Benutzername>:Library"

Dieser Teil wird jetzt unter Verwendung von & mit dem Rest des Pfades verknüpft.

Auf zwei Dinge möchte ich hinweisen: Zum einen verwendet AppleSkript als Trennzeichen der Verzeichnisse einen Doppelpunkt (:) und kein Slash (/). Zum anderen funktioniert dieser Pfad nur unter der Version Monterey, da hier als Verzeichnisname „V9“ verwendet wird. Die Versionen davor haben die Bezeichnungen „V8“, „V7“, „V6“, usw. Wenn Ihr also nicht Monterey installiert habt, müsst Ihr „V9“ durch den bei Euch verwendeten Namen ersetzen. Um diesen Namen herauszufinden, verwendet Ihr bei geöffnetem Finder die Tastenkombination Shift + command + G. Im sich öffnenden Fenster gebt Ihr dann

/Users/bodo/Library/Mail

ein, wobei „bodo“ mit Eurem Benutzernamen ersetzt werden muss.

Zurück zum Code: Nachdem nun drei Variablen erstellt wurden, die jeweils den Pfad zum Verzeichnis „MailData“ enthalten, können abschließend die drei Index-Dateien gelöscht werden. Diese Aufgabe übernimmt der Finder, der über tell angesprochen werden kann:

tell application "Finder"
    …
end tell

Ein tell-Block muss mit end tell wieder geschlossen werden. Dazwischen steht der auszuführende Code. Der gesamte tell-Block sieht jetzt folgendermaßen aus:

tell application "Finder"
    delete file index_file
    delete file index_shm_file
    delete file index_wal_file
end tell

Skript testen

Jetzt ist es an der Zeit, den Code zu testen. Zum Ausführen steht uns oben rechts ein Play-Button zur Verfügung.

AppleSkript im Skripteditor ausfuehren

Stellt sicher, dass Apple Mail geschlossen ist. Klickt dann auf den Play-Button. Wenn alles funktioniert, sollte im Ergebnis-Fenster (unterhalb des Editorbereichs) eine Rückmeldung ähnlich der folgenden erscheinen:

document file "Envelope Index-wal" of item ".Trash" of folder "bodo" of folder "Users" of startup disk of application "Finder"

Und wenn Apple Mail gestartet wird, sollte dieses Fenster erscheinen:

Importfenster von Apple Mail

Mit einem Klick auf „Fortfahren“ wird der Mail-Index neu erstellt, was unter Umständen einige Zeit in Anspruch nehmen kann.

Skript speichern

Um unser Skript zukünftig bei Bedarf aufrufen zu können, müssen wir es speichern. Über

> Ablage > Sichern

oder command + S öffnet sich ein Fenster, das uns erlaubt einen Speicherort und einen Dateinamen festzulegen.

Es besteht die Möglichkeit, auf AppleSkripte über die Menüleiste zuzugreifen. Dies muss allerdings einmal eingerichtet werden. Öffnet dazu die Einstellungen über

> Skripteditor > Einstellungen

und setzt ein Häkchen bei „Skriptmenü in der Menüleiste anzeigen“.

Skripteditor zur macOS-Menueleiste hinzufuegen

In der Menüleiste erscheint ein Skripteditor-Symbol. Klickt es an und wählt

Skriptordner öffnen > Skriptordner des Benutzers öffnen

aus. Jetzt kann das erstellte Skript in den Skriptordner kopiert (oder verschoben) werden, was zur Folge hat, dass es von jetzt an über die Menüleiste durch einen Klick auf das Skript-Symbol ausgewählt werden kann.

Sollte Apple Mail zukünftig Probleme bereiten, seid Ihr nunmehr in der Lage, mithilfe des Skripts das Mail-Programm zurückzusetzen.