-
-
Save ttscoff/3728277 to your computer and use it in GitHub Desktop.
(* | |
Speed up Mail.app by vacuuming the Envelope Index | |
Code from: http://www.hawkwings.net/2007/03/03/scripts-to-automate-the-mailapp-envelope-speed-trick/ | |
Originally by "pmbuko" with modifications by Romulo | |
Updated by Brett Terpstra 2012 | |
Updated by Mathias Törnblom 2015 to support V3 in El Capitan and still keep backwards compability | |
Updated by @lbutlr for V5 and Container folder in High Sierra and use du | |
*) | |
tell application "Mail" to quit | |
set os_version to do shell script "sw_vers -productVersion" | |
set mail_version to "V2" | |
considering numeric strings | |
if "10.10" ≤ os_version then set mail_version to "~/Library/Mail/V3/Maildata/Envelope\\ Index" | |
if "10.12" < os_version then set mail_version to "~/Library/Mail/V4/Maildata/Envelope\\ Index" | |
if "10.13" ≤ os_version then set mail_version to "~/Library/Containers/com.apple.mail/Data/Library/Mail/V5/Maildata/Envelope\\ Index" | |
end considering | |
set sizeBefore to do shell script "du -h " & mail_version & "| awk {'print $1'}" | |
do shell script "/usr/bin/sqlite3 " & mail_version & " vacuum" | |
set sizeAfter to do shell script "du -h " & mail_version & "| awk {'print $1'}" | |
display dialog ("Mail index before: " & sizeBefore & return & "Mail index after: " & sizeAfter & return & return & "Enjoy the new speed!") | |
tell application "Mail" to activate |
It seems the script does not work on Mac OS 10.14 Mojave, but I don't understand why.
I added the line if "10.14" ≤ os_version then set mail_version to "~/Library/Containers/com.apple.mail/Data/Library/Mail/V6/MailData/Envelope\\ Index"
but running the script gives the error :
Error: unable to open database \"/Users/MyName/Library/Containers/com.apple.mail/Data/Library/Mail/V6/MailData/Envelope Index\": unable to open database file" number 1
However, the path seems correct.
Setting "~/Library/Mail/V6/Maildata/Envelope\\ Index"
instead of "/Users/MyName/Library/Containers/com.apple.mail/Data/Library/Mail/V6/MailData/Envelope Index\"
gives the same error.
I'm seeing the same issue on Mojave. I haven't found a solution yet.
This happens because of security measures. Open System Preferences -> Security & Privacy -> Privacy tab and grant "Full Disk Access" to Terminal.app or the automator, where ever you run the applescript.
Dont forget to revoke permissions after you finished reorganizing the index.
The method of @Lapsus work for me on Mojave macOS version
The updated code should be (up to macOS 13 Ventura):
(*
Speed up Mail.app by vacuuming the Envelope Index
Code from: http://www.hawkwings.net/2007/03/03/scripts-to-automate-the-mailapp-envelope-speed-trick/
Originally by "pmbuko" with modifications by Romulo
Updated by Brett Terpstra 2012
Updated by Mathias Törnblom 2015 to support V3 in El Capitan and still keep backwards compability
Updated by @lbutlr for V5 and Container folder in High Sierra and use du
https://gist.github.com/ttscoff/3728277
*)
tell application "Mail" to quit
set os_version to do shell script "sw_vers -productVersion"
set mail_version to "~/Library/Mail/V2/Maildata/Envelope\\ Index"
considering numeric strings
if "10.10" ≤ os_version then set mail_version to "~/Library/Mail/V3/Maildata/Envelope\\ Index"
if "10.12" < os_version then set mail_version to "~/Library/Mail/V4/Maildata/Envelope\\ Index"
if "10.13" ≤ os_version then set mail_version to "~/Library/Containers/com.apple.mail/Data/Library/Mail/V5/Maildata/Envelope\\ Index"
if "10.14" ≤ os_version then set mail_version to "~/Library/Containers/com.apple.mail/Data/Library/Mail/V6/MailData/Envelope\\ Index"
if "10.15" ≤ os_version then set mail_version to "~/Library/Containers/com.apple.mail/Data/Library/Mail/V7/MailData/Envelope\\ Index"
if "11" ≤ os_version then set mail_version to "~/Library/Containers/com.apple.mail/Data/Library/Mail/V8/MailData/Envelope\\ Index"
if "12" ≤ os_version then set mail_version to "~/Library/Containers/com.apple.mail/Data/Library/Mail/V9/MailData/Envelope\\ Index"
if "13" ≤ os_version then set mail_version to "~/Library/Containers/com.apple.mail/Data/Library/Mail/V10/MailData/Envelope\\ Index"
end considering
set sizeBefore to do shell script "du -h " & mail_version & "| awk {'print $1'}"
do shell script "/usr/bin/sqlite3 " & mail_version & " vacuum"
set sizeAfter to do shell script "du -h " & mail_version & "| awk {'print $1'}"
display dialog ("Mail index before: " & sizeBefore & return & "Mail index after: " & sizeAfter & return & return & "Enjoy the new speed!")
tell application "Mail" to activate
This script is not compatible with oldest version (before 10.10). To allow this, you need to change the line
set mail_version to "V2"
byset mail_version to "~/Library/Mail/V2/Maildata/Envelope\\ Index"