(* Count Messages in All Mailboxes Copyright 2002-2012 Apple Inc. All rights reserved. You may incorporate this Apple sample code into your program(s) without restriction. This Apple sample code has been provided "AS IS" and the responsibility for its operation is yours. You are not permitted to redistribute this Apple sample code as "Apple sample code" after having made changes. If you're going to redistribute the code, we require that you make it clear that the code was descended from Apple sample code, but that you've made changes. *) (* This script goes through each mailbox, gets the total message count and the unread count, then displays the final output in a new email message. *) tell application "Mail" set localMailboxes to every mailbox if (count of localMailboxes) is greater than 0 then set messageCountDisplay to "Local mailboxes (On My Mac)" & return & my getMessageCountsForMailboxes(localMailboxes) else set messageCountDisplay to "" end if set everyAccount to every account repeat with eachAccount in everyAccount set accountMailboxes to every mailbox of eachAccount if (count of accountMailboxes) is greater than 0 then set messageCountDisplay to messageCountDisplay & return & "Mailboxes for Account: " & name of eachAccount & return & my getMessageCountsForMailboxes(accountMailboxes) end if end repeat set outputMessage to make new outgoing message with properties {content:messageCountDisplay, subject:"Message counts for all my mailboxes", visible:true} tell outputMessage set font to "Courier" set size to 12 end tell end tell on getMessageCountsForMailboxes(theMailboxes) -- (list of mailboxes) -- returns string set displayString to "" tell application "Mail" repeat with eachMailbox in theMailboxes set mailboxName to name of eachMailbox set messageCount to (count of (messages of eachMailbox)) as string set unreadCount to unread count of eachMailbox as string set displayString to displayString & " " & my padString(mailboxName, 40) & " " & messageCount & " (" & unreadCount & " unread)" & return end repeat end tell return displayString end getMessageCountsForMailboxes on padString(theString, fieldLength) -- (string, integer) -- returns string set stringLength to length of theString if stringLength is greater than fieldLength then set paddedString to (text from character 1 to character (fieldLength - 3) of theString) & "..." else -- stringLength is less than or equal to fieldLength set paddedString to theString set paddingLength to fieldLength - stringLength repeat paddingLength times set paddedString to paddedString & space end repeat end if return paddedString end padString