Apple Mail - List Mailboxes
Summary: Opens a TextEdit window showing the internal AppleScript names of all your mailboxes.
Requires: SpamSieve, Apple Mail
Install Location: ~/Library/Scripts/Applications/Mail
Last Modified: 2019-10-02
Description
Some scripts such as Apple Mail - SaneBox, Apple Mail - Remote Training, and Apple Mail - Server Junk Mailbox require you to know Mail’s internal name for a mailbox, which may be different from the one that it displays in the user interface. This script logs all your account and mailbox names to a new window in TextEdit so that you can find the name that you need to enter in the script.
Installation Instructions · Download in Compiled Format · Download in Text Format
Script
on run
tell application "Mail"
set _string to my appendAccounts(accounts, 0, "")
set _string to my appendOnMyMac(_string)
end tell
my displayString(_string)
end run
on appendAccounts(_accounts, _level, _string)
tell application "Mail"
set _result to _string
repeat with _account in _accounts
set _result to my appendLine(_account's name, 0, _result)
set _result to my appendMailboxes(my topLevelMailboxesOfAccount(_account), 1, _result)
end repeat
return _result
end tell
end appendAccounts
on appendOnMyMac(_string)
set _string to my appendLine("On My Mac", 0, _string)
set _mailboxes to my onMyMacMailboxes()
set _string to my appendMailboxes(_mailboxes, 1, _string)
return _string
end appendOnMyMac
on onMyMacMailboxes()
tell application "Mail"
set _result to {}
repeat with _mailbox in mailboxes
set _container to _mailbox's container
try
get container of _container -- Child mailbox
on error
copy _mailbox to end of _result -- Top-level mailbox
end try
end repeat
return _result
end tell
end onMyMacMailboxes
on topLevelMailboxesOfAccount(_account)
tell application "Mail"
set _result to {}
set _mailboxes to _account's mailboxes
repeat with _mailbox in _mailboxes
set _container to _mailbox's container
if class of _container is class of _account then -- Comparing without "class" doesn't work
set _result to _result & {_mailbox}
end if
end repeat
return _result
end tell
end topLevelMailboxesOfAccount
on appendMailboxes(_mailboxes, _level, _string)
tell application "Mail"
set _result to _string
repeat with _mailbox in _mailboxes
set _result to my appendLine(_mailbox's name, _level, _result)
set _result to my appendMailboxes(_mailbox's mailboxes, _level + 1, _result)
end repeat
return _result
end tell
end appendMailboxes
on appendLine(_line, _level, _string)
return _string & my prefixForLevel(_level) & _line & return
end appendLine
on prefixForLevel(_level)
set _indent to " "
set _result to ""
repeat _level times
set _result to _result & _indent
end repeat
return _result
end prefixForLevel
on displayString(_string)
do shell script "echo " & _string's quoted form & " | open -ef"
end displayString