MailMate and Tagging


I’ve been considering a general “Why I love MailMate” post for some time now, but it keeps seeming like an overwhelming project. So instead, I’m going to focus on one small part. I’ve talked a bit about Bundles a couple of times before, so for now, let’s talk about one of my favorite topics: tagging.

First, as an introduction to MailMate, my favorite email client on the Mac, I’ll refer to this paragraph that I love from MailMate’s about page:

MailMate is not the most widespread, the cheapest, or the greatest looking email client, but I also have no aspiration to MailMate ever being any of these. Instead, MailMate aspires to be the most powerful, the most flexible, the most efficient, the most standards compliant, and the most secure email client.

Among MailMate’s many features, it allows messages to be tagged with any words you want, just like any tagging system. You get to determine what these tags represent, how they’re applied, and how to use them to create your own workflow.

To edit tags on a message, use the Message->Tag submenu. This offers you a list of all your existing tags, as well as an Edit Tags option that will open the tag bar in the message window. This can more easily be triggered using a shortcut key, which in my bindings (and I believe the default, at least with Gmail bindings) is just typing “t” with any message selected in the viewer. You can also add toolbar buttons for tags using Message->Tag->Display in Toolbar.

Tags as Flags

One nice feature of MailMate tags is that you can assign unicode characters and emoji to represent any tag, then instead of having a full tags column in the message list, you can just have the icons show, allowing them to function as “flags” on the messages. Icons are assigned from Preferences, in the Tags pane. Once you have icons assigned to your common tags, you can look under the View->Columns menu and you’ll see two options for tags columns in the viewer, one that’s just Tags (the full words) and one that’s Tags with an icon next to it (just the icons).

These icons also make any tags you add to your toolbar look nicer, just showing an icon button instead of a full tag name.

Most of my tags are for filing purposes, such as “expense” (which gets a dollar sign) or “nvultra” (which gets a unicode 𝗻 character). I’ll get to how I make those useful in a minute.

Tags and Labels

If you use Gmail, you know that it doesn’t use folders, but rather “labels” which serve as a form of tagging and modify the groups that messages are viewed in the same way a smart folder for a tag would. It allows you to have messages in multiple “folders” at once, and easily modify where a message shows up.

In MailMate, from the same Tags preference pane where icons are added, you can map tags to Gmail labels. This allows your tagging system to be relevant from other Gmail-based clients as well.

If you recall MailTags, you might know that it stored tags as X-Headers in the message source, allowing tags to be sent with messages. MailMate can create IMAP keywords for sent messages, also mapped in this preference pane. These label/keywords mappings have the same results as MailTags’ X-Header technique, allowing round-tripping of tags (though I haven’t experimented with the IMAP labels much as it doesn’t really apply in my current workflow).

Tags and Mailboxes

MailMate’s Smart Folders deserve their own post, but suffice to say that they’re among the most flexible I’ve worked with. A big part of my workflow is my “Pseudo Inbox Zero” setup, which I will describe briefly because that’s kind of a weird thing to say.

I don’t use my various accounts’ Inbox folders, but rather a single @INBOX smart folder. It essentially contains only unread messages (matching certain criteria) and flagged messages. Once a message is read, if I don’t flag it, it disappears. I have several other boxes that gather unimportant messages, messages that are automatically filed using other tools, and messages that Gmail makes redundant with its own label system. These smart mailboxes are used as a negative criteria in @INBOX, so that if a message appears in one of them (conveniently gathered under a mailbox folder called @NOT), they don’t show up in @INBOX.

Side note, I use Spark as my mail client on iOS and its Smart Inbox follows the same philosophy.

In combination with SaneBox, this system makes it easy for me to keep my inbox empty. Once I’ve taken care of unread messages, I can — when time allows — go through and do a better job of filing or acting on the flagged messages, then unflagging them. One additional criteria I have in the Smart Mailbox is a “reply” tag, reserved for messages that need a response (soon) but that I just don’t have the energy for at the moment I’m reading them. So I hit my keyboard shortcut (see next section) to mark them as “reply.” They don’t disappear with the rest of my messages, but they’re also not flagged. For me, using flags to mark important messages the same way I mark messages requiring a more specific action, regardless of their importance, dilutes the meaning of flagging. That and the fact that tags are more semantic are the main reasons I prefer them to a bunch of colored flags.

The criteria in the @INBOX folder includes a grouping that says “messages tagged reply AND NOT replied.” Once a “reply” message’s headers include Replied, the message then disappears from my @INBOX. I’ve recently evolved this to have an @REPLY folder that’s included as an ANY option in @INBOX. This allows me to have one of the four badges on my MailMate dock icon show me the number of un-replied messages I have waiting.

Tags and the Keyboard

Another topic that deserves its own post is MailMate keybindings. MailMate allows you to build your own Keybindings dictionary that mirrors the DefaultKeybindings.dict format used for system-wide keybindings. The default options include a Gmail setup that gives you the single-key navigation that Gmail employs. I’ve extended that to put all of my primary functions on to single key or key sequence shortcuts. For example, comma and period navigate my list: typing comma marks the current message as read and moves to the next message (shift comma, i.e. <, moves to previous message), and period simply toggles read/unread state, allowing j and k to handle navigation.

Part of the frustration I’ve run into with my pseudo inbox zero setup is that occasionally I’ll be reading a message, switch away to get a link or something, and when I switch back the message has disappeared because it was automatically marked as read because it was selected for long enough, and IMAP had updated in the meantime. So I’ve taken to including a simple @done tag in the setup. Any post less than 2 days old and not marked @done stays in my @INBOX, and then I added marking @done to the comma/period navigation mentioned above. If I intentionally navigate to the next message, it’s marked as @done at the same time it’s marked as read, but anything I’ve let sit long enough to mark as read (I have messages toggle read after 10 seconds) but haven’t intentionally done anything with still remains in my inbox. This is all made possible with keybindings.

Below is a chunk from my keybindings file, located in ~/Library/Application Support/MailMate/Resources/Keybindings/Gmail2.plist. You can get started by copying one of the default dictionaries from /Applications/ with a new name. Viewing those default dictionaries will give you a solid idea of how to set them up and what’s possible. To use a new keybindings file in MailMate, open Preferences->General, and under Custom Key Bindings check the “Enable” box and enter the name of your bindings file (sans the .plist).

A keybindings file should contain a parent set of curly brackets, the contents of which are comprised of key/value lines terminated by a semicolon. The “key” represents the key/combination that triggers the value, which is a parenthesized list of selectors to execute. If the value is instead a set of curly brackets comprising more key/value lines, it creates a key sequence. The shortcuts below use a key sequence of “m” followed by single characters to tag messages. So to tag something as an expense, I just type “mx”.

	// Combo keys for tagging
	"m" = {
		"r" = ( "toggleTag:", "respond" );
		"x" = ( "toggleTag:", "expense" );
		"s" = ( "toggleTag:", "systematic" );
		"o" = ( "toggleTag:", "overtired" );
		"m" = ( "toggleTag:", "marked" );
		"b" = ( "toggleTag:", "sponsors" );
		"c" = ( "toggleTag:", "clients" );

There are a lot more tricks you can do with the keybindings, but that’s another post. If you’re curious, peruse the default dictionaries for enlightenment.

So this post either turned you on to MailMate, or completely scared you away. I suppose if you found it scary, then MailMate would probably be a horrible option for you. Call this a litmus test… If you are interested, though, check out MailMate for a 30-day trial, and consider buying a full copy to help development continue.