Automatically mark messages as read in Trash
How can I mark all deleted messages as read in Apple Mail of Mac OS X?
Mac OS X (10.7)
How can I mark all deleted messages as read in Apple Mail of Mac OS X?
Mac OS X (10.7)
I have found out a suitable answer to my own question. Here is what works for me.
1. Make a script to mark all items in trash as read
- Open Script Editor
- Copy next text in the editor
on run {}
tell application "Mail"
set read status of every message of mailbox "Deleted Items" of account "MyAccount" to true
end tell
end run
- Change "Deleted Items" into the name of your trash folder (keep the quotes). If you don't know the exact name, check below under PS1.
- Change "MyAccount" into the name of your account (keep the quotes). If you don't know the exact name, check below under PS2.
- Test by making sure that you have at least one unread mail in Trash, press run in Script Editor and verify that all mails in Trash are now marked read
- Save the file as a script file (extension scpt) in a location where it does not bother you.
2. Make a launch daemon to schedule the execution of the script
- Open Text Editor
- Copy next text in the editor
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.markdeleteditemsasread</string>
<key>ProgramArguments</key>
<array>
<string>osascWooooWript</string>
<string>/Users/username/MarkDeletedItemsAsRead.scpt</string>
</array>
<key>StartInterval</key>
<integer>180</integer>
</dict>
</plist>
- Delete WooooW from the above text (I had to include it to be able to post this here).
- Change the label value (which is currently com.apple.markdeleteditemsasread). If you own a website, it is a good idea to refer to your domain (instead of apple.com).
- Change the script location to where you have saved the script (which is currently /Users/usrename/MarkDeletedItemsAsRead.scpt)
- Change the interval if desired (it is now set to 180 seconds, which is 3 minutes)
- Save the file to a temporary location. Use the label as name (not sure if this is required, but I guess it is a good practice) and plist as extension (in my case the file name will be: com.apple.markdeleteditemsasread.plist ).
3. Activate the launch deamon
- Open Terminal
- Copy the plist file to /Library/LaunchDaemons, for example:
sudo cp /Users/username/com.apple.markdeleteditemsasread.plist /Library/LaunchDaemons/
- Change the permission properties of the file as follows (makes it a file owned by your admin user that cannot be changed by other users):
sudo chown root:wheel /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
sudo chmod o-w /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- Launch the deamon (see PS3 to find out how to test if it works):
sudo launchctl load /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- Optional: Delete the original plist file if it works (I advise to keep it for a while though for testing, see PS3 below)
- Do not delete the plist file in /Library/LaunchDaemons
- Do not delete the scpt file
Good luck!
Jan Claes
PS1 If you don't know the exact name of your trash folder:
- comment the set-intstruction in your script (by preceding the line with two dashes)
- select an email in your trash (in the Mail app)
- put the command "selection" (without quotes) within the tell-block
- press run
- the name is after mailbox
- your script will look like this
on run {}
tell application "Mail"
--set read status of every message of mailbox "Deleted Items" of account "MyAccount" to true
selectionend tell
end run
- and the output will look like this
{messageid 45452 of mailbox "Trash" of accountid "E7533424-41C1-4AC2-66D6-344C0DB8C2AC" of application "Mail"}
PS2 If you don't know your account name:
- go to Mail
- go to settings (Cmd-,)
- go to Accounts
- check name in overview on the left
PS3 How to test your daemon:
- mark at least one file in Trash as unread
- change the time interval in the original plist file (in my case in /Users/username/MarkDeletedItemsAsRead.scpt) to 10 seconds (instead of 180)
- unload the daemon
sudo launchctl unload /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- replace the plist file with the altered one and reset the permissions
sudo cp /Users/username/com.apple.markdeleteditemsasread.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
sudo chmod o-w /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- load the daemon
sudo launchctl load /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- wait for ten seconds
- verify that the mail is marked read
- don't forget to repeat these steps to set the timer again to 180 seconds!
I have found out a suitable answer to my own question. Here is what works for me.
1. Make a script to mark all items in trash as read
- Open Script Editor
- Copy next text in the editor
on run {}
tell application "Mail"
set read status of every message of mailbox "Deleted Items" of account "MyAccount" to true
end tell
end run
- Change "Deleted Items" into the name of your trash folder (keep the quotes). If you don't know the exact name, check below under PS1.
- Change "MyAccount" into the name of your account (keep the quotes). If you don't know the exact name, check below under PS2.
- Test by making sure that you have at least one unread mail in Trash, press run in Script Editor and verify that all mails in Trash are now marked read
- Save the file as a script file (extension scpt) in a location where it does not bother you.
2. Make a launch daemon to schedule the execution of the script
- Open Text Editor
- Copy next text in the editor
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.markdeleteditemsasread</string>
<key>ProgramArguments</key>
<array>
<string>osascWooooWript</string>
<string>/Users/username/MarkDeletedItemsAsRead.scpt</string>
</array>
<key>StartInterval</key>
<integer>180</integer>
</dict>
</plist>
- Delete WooooW from the above text (I had to include it to be able to post this here).
- Change the label value (which is currently com.apple.markdeleteditemsasread). If you own a website, it is a good idea to refer to your domain (instead of apple.com).
- Change the script location to where you have saved the script (which is currently /Users/usrename/MarkDeletedItemsAsRead.scpt)
- Change the interval if desired (it is now set to 180 seconds, which is 3 minutes)
- Save the file to a temporary location. Use the label as name (not sure if this is required, but I guess it is a good practice) and plist as extension (in my case the file name will be: com.apple.markdeleteditemsasread.plist ).
3. Activate the launch deamon
- Open Terminal
- Copy the plist file to /Library/LaunchDaemons, for example:
sudo cp /Users/username/com.apple.markdeleteditemsasread.plist /Library/LaunchDaemons/
- Change the permission properties of the file as follows (makes it a file owned by your admin user that cannot be changed by other users):
sudo chown root:wheel /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
sudo chmod o-w /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- Launch the deamon (see PS3 to find out how to test if it works):
sudo launchctl load /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- Optional: Delete the original plist file if it works (I advise to keep it for a while though for testing, see PS3 below)
- Do not delete the plist file in /Library/LaunchDaemons
- Do not delete the scpt file
Good luck!
Jan Claes
PS1 If you don't know the exact name of your trash folder:
- comment the set-intstruction in your script (by preceding the line with two dashes)
- select an email in your trash (in the Mail app)
- put the command "selection" (without quotes) within the tell-block
- press run
- the name is after mailbox
- your script will look like this
on run {}
tell application "Mail"
--set read status of every message of mailbox "Deleted Items" of account "MyAccount" to true
selectionend tell
end run
- and the output will look like this
{messageid 45452 of mailbox "Trash" of accountid "E7533424-41C1-4AC2-66D6-344C0DB8C2AC" of application "Mail"}
PS2 If you don't know your account name:
- go to Mail
- go to settings (Cmd-,)
- go to Accounts
- check name in overview on the left
PS3 How to test your daemon:
- mark at least one file in Trash as unread
- change the time interval in the original plist file (in my case in /Users/username/MarkDeletedItemsAsRead.scpt) to 10 seconds (instead of 180)
- unload the daemon
sudo launchctl unload /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- replace the plist file with the altered one and reset the permissions
sudo cp /Users/username/com.apple.markdeleteditemsasread.plist /Library/LaunchDaemons/
sudo chown root:wheel /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
sudo chmod o-w /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- load the daemon
sudo launchctl load /Library/LaunchDaemons/com.apple.markdeleteditemsasread.plist
- wait for ten seconds
- verify that the mail is marked read
- don't forget to repeat these steps to set the timer again to 180 seconds!
Thanks John.
Actually I was referring to automatically mark all mails in the Trash folder as read (to get rid of the annoying bubble displaying the number of unread messages). I posted the question simply to be able to post the answer here for others to discover, but I got delayed because my reply was blocked (see note about deleting WoooW in my answer) ;-)
Select all of them (Edit > Select All) then Message > Mark as Read.
Automatically mark messages as read in Trash