If you use Apple's Mail app on your Mac, you've probably had times when the application slows down. Messages in mailboxes are slow to appear; searches take longer than usual to perform. This can happen when Mail's mailboxes (or folders, if you prefer) accumulate thousands of messages — which is all the more likely if you're among the majority of the human population and you don't discard old email.
The best thing you can do is be ruthless with old email. Once you're finished with a message, move it to the trash and then empty the trash every so often. Try to think about it this way. We all receive tons of junk mail in our physical mailboxes — advertising circulars from the local supermarket, catalogs, credit card applications. If you don't save any of that stuff, why would you hold on to old email, particularly when it takes less effort to press the delete key than it does to carry paper-based mail to the recycle bin?
Still, some of us accumulate email that is valuable and merits keeping. That's fine, too, but over time it still may slow the Mail app down.
Lucky for all of us, there's a solution to the slowdown.
Scripting to the Rescue
There's a built-in tool on your Mac called vacuum that you can use to clean up the database that stores all of your emails. The vacuum command copies the contents of your mail database to a temporary file and rebuilds it so that it uses less space on your disk. The vacuum command eliminates gaps, defragments the data, and cleans up the database file structure.
Normally, the vacuum command is accessible only through the Mac's command-line interface using an app such as Terminal. But thanks to the wonder of Automator, an app that ships with your Mac, you can create a simple three-step script that will run the vacuum tool. And you don't have to know how to write a script, use the command line, or even understand how the vacuum tool works.
Here's how to do it.
First Things First
Apple has been improving the security of macOS every year. One of Apple's more recent security features is called Full Disk Access, introduced with macOS 10.14 Mojave. Normally applications do not have the ability to access all the files on your Mac, including data from other apps. Enabling Full Disk access for an application grants that app the ability to fiddle with data from other apps.
To make this Automator script work properly with macOS Mojave or macOS Catalina, you'll need to enable Full Disk Access for Automator. Here's how:
- From the Apple menu, choose System Preferences.
- Click Security & Privacy.
- Click Privacy.
- If the preference pane is locked, click the lock to make changes. When prompted, enter the user name and password you use to log in to your Mac.
- Click Full DIsk Access.
- In the list that appears on the right side of the Privacy window, check the box for Automator.
- Click the lock to prevent further changes.
Open the Automator app which is located in your Mac's Applications folder. Its icon looks like a robot refugee from Earth, circa 2805.
- In the Finder, choose Go.
- Click on Applications.
- In the Applications window that appears, locate the Automator app and double-click it to open it.
- In the window that appears, click New Document.
- In the sheet that appears, click Workflow.
- Click Choose.An empty Automator document will open. To build our Automator script, we will drag actions from the left side of the window to the right side. As a first step, we want to quit the Mail app if it is open to make sure Mail's database does not change while we are cleaning it up.
- In the search field type the word quit.
- Drag and drop the action named Quit Application to the right side of the window.
- From the pop-up menu in the Quit Application action, choose Mail.
- Clear the search field above the list of actions and type the word run.
- Drag and drop the action named Run Shell Script beneath the Quit Application action.
- In the empty field in the middle of the Run Shell Script action, copy and paste the command below that corresponds to the version of macOS that is running on your Mac. Don't forget the semi-colon at the end of the line.
- For Snow Leopard (10.6): sqlite3 ~/Library/Mail/Envelope Index vacuum;
- For Lion (10.7), Mountain Lion (10.8), Mavericks (10.9), or Yosemite (10.10): sqlite3 ~/Library/Mail/V2/MailData/Envelope\ Index vacuum;
- For El Capitan (10.11): sqlite3 ~/Library/Mail/V3/MailData/Envelope\ Index vacuum;
- For Sierra (10.12): sqlite3 ~/Library/Mail/V4/MailData/Envelope\ Index vacuum;
- For High Sierra (10.13): sqlite3 ~/Library/Mail/V5/MailData/Envelope\ Index vacuum;
- For Mojave (10.14): sqlite3 ~/Library/Mail/V6/MailData/Envelope\ Index vacuum;
- For Catalina (10.15): sqlite3 ~/Library/Mail/V7/MailData/Envelope\ Index vacuum;
- Clear the search field above the list of actions and type the word launch.
- Drag and drop the action named Launch Application to the right side of the window beneath the Run Shell Script action.
- From the pop-up menu in the Launch Application action, choose Mail. The script is now complete, but you'll need to save it.
- Click on File in the Menu bar.
- Choose Save.
- In the sheet that appears, give your workflow a name, and pick a place to save your new Automator script.
To run your new workflow, just open it with Automator and click the Run button in the upper right corner of the script's window. If Mail is running, it will quit, the script will run, and Mail will re-open with a rebuilt database behind the scenes which should lead to improved performance.
Hoover it Up!
Has this easy-to-make Automator action helped with your Mail slowdowns? Let us know in the comments below.
Mike Matthews is a writer at iMore.com. He has used Apple products all the way back to the Apple II+. He appreciates no longer having to launch apps by loading them from a cassette tape recorder.
I get a Permission denied error when the shell script runs on /Users/dweeks/Library/Mail/V5/Maildata/Envelope Index
I get the same error as well. :(
Nicely written article, especially for those of us who have just been dipping our toes into Automator!
Under Mojave 10.14.6 I get an error message:
Error: unable to open database "/Users/bab/Library/Mail/V6/MailData/Envelope Index": unable to open database file
Ensure you give Terminal app Full Disk Access ... System Preferences -> Security & Privacy -> Privacy tab.
Hey kidTruant, I am still getting an error after granting Terminal app access: /Users/liz/Library/Mail/V6/MailData/Envelope Index: Permission denied I am running Mojave too. Any help given would be much appreciated.
Get the best of iMore in in your inbox, every day!
Thank you for signing up to iMore. You will receive a verification email shortly.
There was a problem. Please refresh the page and try again.