In Mail.app, what does Synchronize actually do? How is it different than "Get New Mail?"
Mail talks to the mail server to show you messages. Only IMAP accounts can be synchronized as that is a formal way for the server and the mail client on your mac to double check all messages to make sure everything is in sync between the two.
Get mail focuses on the Inbox and relies on the Mail app having a "correct" view matching the data on the mail server.
Synchronize allows for noise/errors/lost messages, incorrect statuses and other real life bumps and errors. It basically double counts and double checks each and every message to make sure things are 100% correct. Synchronize also checks all folders recursively to get everything accounted for - not just the subset of folders that are marked as having new mail.
Even more "deep cleaning" would be if you told mail to rebuild the account or the mailbox. That means that the local storage that mail uses on your mac has problems getting mail or synchronizing. It's the last step before deleting the account and starting over to download things cleanly from the server.
In a nutshell - synchronize should normally do nothing - but it will fill in any gaps as needed. (of course it will get new mail as part of a total synchronization - but it's going to be a lot slower and use more resources on the mac than just asking for new mail)
Edit: Synchronize should not be something you do every time you Mail. It's to force Mail to update the conf/folders of you IMAP account. Like if there's a network and it's not syncing anymore. But usually, when moving, deleting, etc. Mail is already taking care of updating where it needs to be updated.
Synchronize is also useful to get two (or more) machines back in sync. If I make folder or configuration changes on one Mac, I will run Synchronize on the other Mac to make the second Mac aware of the changes.
I've also found that Synchronize has solved an occasional problem I've had where a message appears on one machine but not the other.
Loic Wolff -- Get Mail will only fetch for new mail in the Inbox.
Negrino -- I've also found that Synchronize has solved an occasional problem I've had where a message appears on one machine but not the other.
This combination of answers is probably the best for explaining why you would care about Get Mail vs Synchronize in Mail.app
It comes into play when you've got an IMAP account on your iphone (or other mobile device) and in your Mail.app (as one example).
If you skim a few emails on your phone, IMAP will mark them as read, then when you go to your Macbook or Mac that is asleep and has Mail.app running, and you open the lid or take the Mac out of sleep mode and hit Get Mail, it's only going to get "New" (unread) messages, not the ones you skimmed on your mobile device. So this means NOT new to the MAC, new to the IMAP account user. Your mac was asleep when the mail came in and was marked as read, so it's going to skip those. So, it'll look like messages are missing. The quickest way to end this frustration, is if you've let your mac go into sleep mode, do a quick cmd-q and reopen Mail, which will force a sync and get all "new" messages including ones you've read on your phone.
bmike/negrino said all the rest.
It also comes in handy when using applescript to move mail from one mail box to another or when deleting mail.
As an example, if you write an Applescript program to delete the mail in your SPAM folder, that will seem to work fine. On your Mac, the deleted messages no longer appear in the Spam folder, but do appear in the trash folder.
But if you run that applescript a second time, it will think that the deleted messages are still in the Spam folder and will process them again.
This is because the list of messages in the trash on the server and the list of messages in the trash on the Mac are out of sync. You have to add this
to the end of your script to get the IMAP server and your Mac back in sync.