Revision 5960 (Wednesday, March 22, 2023)

Revision 5959 (Monday, March 20, 2023)

Revision 5958 (Monday, March 20, 2023)

Revision 5957 (Friday, March 17, 2023)

Revision 5956 (Thursday, March 16, 2023)

Revision 5955 (Wednesday, March 15, 2023)

Revision 5954 (Thursday, March 9, 2023)

Revision 5953 (Thursday, March 9, 2023)

Revision 5952 (Wednesday, March 8, 2023)

Revision 5951 (Monday, March 6, 2023)

Revision 5950 (Friday, March 3, 2023)

Revision 5949 (Wednesday, March 1, 2023)

Revision 5948 (Tuesday, February 28, 2023)

Revision 5947 (Tuesday, February 28, 2023)

Revision 5946 (Saturday, February 25, 2023)

Revision 5945 (Friday, February 24, 2023)

Revision 5944 (Thursday, February 23, 2023)

Revision 5943 (Wednesday, February 22, 2023)

The third item below is very important. It involves a lot of changes which comes with the usual risk of also introducing some bugs, but it should also help making some core features of MailMate much more robust than they were before. In particular, very complex layouts with multiple selections should work much better now. Previously, such layouts could trigger issues which were very hard to debug. Going forward, these changes will also make it easier to fix other long-standing issues.

Revision 5942 (Sunday, February 5, 2023)

Revision 5941 (Friday, February 3, 2023)

Revision 5940 (Thursday, February 2, 2023)

Revision 5939 (Sunday, January 29, 2023)

Revision 5937 (Thursday, January 26, 2023) — BETA

This is a beta release. All test release notes since the latest beta release (r5918, September 2022) are reorganized/rewritten in the following. The release notes of each of the intermediate test releases are still available in the release notes of revision 5936.

If you upgraded directly from the current public release (r5672) then you can also review the notes for the previous 3 beta releases (further below).

The main aim of the first item below has been to make MailMate behave in a robust predictable way when handling a large number of server connnections, in particular, when handling a large number of accounts. This was a major task, but it does not involve a lot of new functionality. It’s worth noting that MailMate is now actively trying to prioritize persistent connections based on “historic” activity (this is only important if the total limit on the number of connections is exceeded). The (intended) robustness of the new code means that MailMate should be able to work correctly even if limiting the total number of connections to just 1 (although not recommended).

Revision 5918 (Tuesday, September 20, 2022) — BETA

If needed, the release notes of each of the intermediate test releases are still available in the release notes of revision 5917.

Revision 5895 (Wednesday, May 4, 2022) — BETA

If needed, the release notes of each of the intermediate test releases are still available in the release notes of revision 5894.

Revision 5852 (Tuesday, December 7, 2021) — BETA

This is a beta release. All test release notes since the latest public release (r5673, September 2020) are reorganized/rewritten in the following subsections. Consider it a work-in-progress of the release notes needed when the next public release is ready.

Message View

Displaying the content of an email is an important feature of an email client, but it’s also a suprisingly complex feature. Since the first release of MailMate, this feature has been implemented using an HTML view known as WebView provided by Apple. If an email wasn’t already received in the HTML format then MailMate would generate HTML to be displayed. Attachments would also be displayed using HTML and if viewing multiple emails then they would be concatenated including the headers. Given simple emails this was a simple process, but there were also numerous difficult or even impossible problems to solve with this approach. Sooner or later, it had to be replaced with a different approach.

The new approach has resulted in a completely new message view which does not only fix a lot of long standing bugs, it also includes a lot of new features — and it will allow even more of those in the future. Here’s a list of changes relative to the old message view:

Image/resource blocking

By default, the WKWebView class is configured to block all external resources using a so-called WKContentRuleList (macOS 10.13+). Only resource references explicitly recognized by MailMate can be downloaded if allowed, e.g., img src references. MailMate then rewrites these references to use a custom URL scheme handled by its own WKURLSchemeHandler. This makes it possible to implement much more detailed control of image blocking.

Known issue: Some rarely used image reference styles are not yet recognized by MailMate and will therefore not be displayed or listed as a reference at all.

Details View (Banners)

An HTML view is also used to display any information related to the currently displayed message (or part of a message). Some of these include buttons with actions such as allowing images to be downloaded. Compared to the old message view, there is usually much more information available when expanding details.

Find

The old message view used third party code to provide highlighted search results in the message view, but this was based on the WebView class and not the WKWebView. The new message view has its own custom code based on JavaScript. The “Find” (⌘F) interface itself has also been re-implemented.

Headers View

The headers view is currently also based on a WKWebView.

Known issue: Configurability of displayed headers is still very limited.

Attachments View

Previously, (non-inlined) attachments were shown using HTML which did not offer much information or functionality. The new attachments view is much more flexible and will also be easier to improve in the future. The same view is used in the Composer window and some of the following only applies to this use of the view:

Composer only functionality:

Composer

The composer, in general, has also gone through massive changes. Functionality hasn’t changed much, but it is (or at least has the potential to be) more robust and responsive than the old composer. (Some parts of the old composer suffered under some early bad design decisions which made it hard to improve/fix other parts of the composer.)

Message generation

Low level, a draft is now handled differently/explicitly and this makes it easier for the composer to handle the various states of a draft. A very long standing issue in MailMate has been that any structural change to a message (MIME structure) would force a message to be saved since all message parts needed to exist in the internal database. For example, emphasizing a word using Markdown would trigger the message to be saved clearing the “edited” state of the composer window. This is no longer the case.

Other changes include:

Headers Editor

Text Editor

Again, a lot has been reimplemented and it will be easier to maintain/improve in the future.

S/MIME and OpenPGP

Partly as a side effect of some of the changes above, the S/MIME and OpenPGP handling has also gone through a lot of changes. There’s still a lot to improve, but here’s a list of some of implemented changes:

Known issue: Some earlier test releases were able to clearly display which parts of a message were decrypted and/or verified. This feature will eventually return.

Known issue: More could and should happen asynchronously since neither OpenPGP or S/MIME actions are always fast to complete.

Coding/Building related changes

Other

Known issue: The interface for importing accounts breaks with almost every macOS release and it will be removed. Some work has been done on a new connection “wizard” for setting up accounts (using both autoconfig and SRV records). This should hopefully lead to an easier setup process.

Changes/Fixes

All kinds of, more or less, boring changes/fixes which are mainly here when/if searching for some particular issue.

Various workarounds:

For debugging purposes, the variable MmParseMessagesFromIndex can be used to force MailMate to load, parse, and decode all messages in its database (on startup).

Revision 5673 (Thursday, September 3, 2020)

Revision 5672 (Friday, August 28, 2020) — Version 1.13.2

Revision 5671 (Thursday, December 5, 2019)

Revision 5670 (Thursday, December 5, 2019) — Version 1.13.1

This is a maintenance release which includes various important fixes for Catalina.

Revision 5655 (Monday, September 30, 2019) — Version 1.13

This version of MailMate adds support for macOS 10.15 (Catalina) and removes support for macOS 10.8–10.9. In other words, MailMate now requires macOS 10.10.

There are no major new features in this release of MailMate, but there have been some major internal changes to MailMate in preparation for some future changes/features.

The following is a list of changes since the most recent public release (r5635).

Revision 5635 (Monday, May 27, 2019)

Note: Look out for any messages not correctly handled by rules since the public release earlier today. Sorry about the inconvenience!

Revision 5634 (Monday, May 27, 2019) — Version 1.12.5

This is the first public release of MailMate with a so-called “hardened runtime”. It is also the first release “notarized” by Apple. In short, this means that this and every future release of MailMate has been scanned by Apple before being released (this includes beta/test releases). Apple documentation currently states they they scan for malicious content and code-signing issues.

Note that the next public release of MailMate will probably not support macOS 10.8 and 10.9. This should affect very few users (less than 0.5%).

The following are all changes since the most recent public release (1.12.4):

Revision 5594 (Tuesday, January 22, 2019) — Version 1.12.4

Revision 5579 (Wednesday, December 12, 2018) — Version 1.12.3

Revision 5568 (Friday, November 23, 2018)

Revision 5567 (Thursday, November 22, 2018) — Version 1.12.2

Revision 5552 (Saturday, November 3, 2018) — Version 1.12.1

The following are all changes since the most recent public release (1.12). A lot is related to Mojave dark mode, but there are also many other improvements.

Revision 5523 (Monday, September 10, 2018) — Version 1.12

The following are all changes since the most recent public release (1.11.3, July 10th).

Revision 5509 (Tuesday, July 10, 2018)

The following is a list of some minor corrections to the recent 1.11.3 release. See further below.

Revision 5507 (Thursday, July 5, 2018) — Version 1.11.3

The following are all changes since the most recent public release (1.11.2). Further below, you can also find a list of changes made for making MailMate work better on Mojave.

The following is list of changes for working better with macOS Mojave. There are still many things to improve, but it should be usable for anyone already working on Mojave:

Revision 5479 (Tuesday, April 24, 2018) — Version 1.11.2

The following are all changes since the most recent public release (1.11.1):

Revision 5471 (Monday, April 9, 2018) — Version 1.11.1

The following are all changes since the most recent public release (1.11):

Revision 5462 (Monday, March 12, 2018) — Version 1.11

These are all changes since the latest public release (r5443, December 12th).

Revision 5443 (Tuesday, December 12, 2017) — Version 1.10

These are all changes since the latest public release (October 11th, r5425):

The bump to version 1.10 (instead of 1.9.8) is motivated by the fact that there has been a lot of improvements to MailMate since version 1.9 was released in March 2015, but the version numbers have not reflected this. It would have been nice to bump it to 2.0, but MailMate is just not ready for that yet.

Revision 5425 (Wednesday, October 11, 2017)

These are all changes since the latest public release. Several of them are related to High Sierra.

Revision 5419 (Friday, September 22, 2017) — Version 1.9.7

It has been a long time since the latest public release of MailMate (r5347, February 17), but this does not mean that nothing has happened. You can find the detailed release notes further below in the Beta 1–3 descriptions.

The following is a shorter (slightly rewritten) list of some of the most notable highlights:

Revision 5418 (Thursday, September 21, 2017) — Version 1.9.7 Beta 3

The following are all changes since the Beta 2 release (r5412):

Revision 5412 (Monday, September 4, 2017) — Version 1.9.7 Beta 2

Mostly fixes and minor changes and new features. Also see the Beta 1 release notes further below since it was never properly released as a beta.

If you are on MacOS High Sierra (10.13) then please report any issues you might have seen.

Revision 5383 (Wednesday, June 21, 2017) — Version 1.9.7 Beta 1

Cleaned up release notes. The following are all changes since the latest public release in February (1.9.6r5347):

Revision 5347 (Friday, February 17, 2017)

These are the changes since the latest public release (r5344, February 8).

Revision 5344 (Wednesday, February 8, 2017)

These are all the changes since the latest public release (r5319).

Revision 5319 (Wednesday, December 21, 2016)

Revision 5318 (Saturday, December 17, 2016)

The following are all changes since the latest public release (r5310). It should also fix some issues reported concerning authentication of Gmail accounts. If you still have issues with Gmail then let me know via “Help ▸ Send Feedback”.

The new features below are experimental and currently only work with the following hidden preference enabled:

defaults write com.freron.MailMate MmTwoPointOhFeaturesEnabled -bool YES

There’s an unresolved issue when using the above with Gmail accounts. The original message ends up in the “[Gmail]/All Mail” folder. It’s currently unclear why this happens and how to work around it.

Revision 5310 (Tuesday, November 29, 2016)

The first item on the list below affected most users with SMTP/IMAP servers not using standard ports like 25, 587, 143, and 993. Sorry about the inconvenience.

Revision 5307 (Tuesday, November 22, 2016) — Version 1.9.6

The following includes all changes since the latest public release (r5263).

Revision 5263 (Thursday, September 15, 2016) — Version 1.9.5

This is a major update even though the version bump is minor. The following is a list of all changes since the latest public release (1.9.4, March 15th).

There are numerous HTML/Markdown related changes. Most of the new options are documented in the Preferences documentation (“Help ▸ MailMate Help” menu item):

Other changes:

Revision 5234 (Tuesday, March 15, 2016) — Version 1.9.4

This public release includes a lot of small improvements and bug fixes. The most interesting changes are various new hidden preferences, including MmSMTPAlternativeEnabled and MmSMTPUTF8Enabled. More information in the manual and in the release notes for the beta releases provided further below.

Additional changes after the latest beta release:

Revision 5232 (Thursday, March 10, 2016) — Version 1.9.4 Beta 3

The following are all changes since the latest beta release (r5226, February 20th).

A hidden preference has been introduced for BusyContacts users. It affects the behavior of the “Show” and “Add” menu items for email addresses in the headers view.

defaults write com.freron.MailMate MmDefaultAddressBook -string com.busymac.busycontacts

Revision 5226 (Saturday, February 20, 2016) — Version 1.9.4 Beta 2

The following are all changes since the latest beta release (r5213, February 2nd).

Revision 5213 (Monday, February 1, 2016) — Version 1.9.4 Beta 1

The following are all changes since the latest public release (r5187, November 26th).

Revision 5187 (Thursday, November 26, 2015) — Version 1.9.3

This public release is mainly focused on bug fixes and stability issues. The most notable new features are manual ordering of IMAP accounts/mailboxes and OAuth2 support for Gmail and Outlook accounts. Note that OAuth2 is enabled by default. If you have any issues then please report them and note that you can disable OAuth2 in the IMAP account settings.

See below for all the changes since the latest public release (r5141, September 29).

Revision 5184 (Monday, November 23, 2015) — Version 1.9.3 Beta 3

These are all changes since beta 2 (r5180).

Revision 5180 (Thursday, November 19, 2015) — Version 1.9.3 Beta 2

The following are all changes since the latest beta (r5164). The previous beta had a bug for Gmail which could result in some mailboxes not being synchronized until after MailMate was relaunched. An older issue has also been fixed: Scripts (and MailMate) could hang on El Capitan, for example, when displaying plain text emails.

Revision 5164 (Tuesday, November 3, 2015) — Version 1.9.3 Beta 1

MailMate now supports the use of OAuth2 to authenicate Gmail and Outlook accounts (more precisely, it’s XOAUTH2 for IMAP/SMTP). It is enabled by default and it affects existing Gmail/Outlook accounts. If you have any issues then you can edit the IMAP account settings and explicitly disable the use of OAuth2. Don’t forget to report any issues.

Other changes and fixes since the latest public release (r5141):

Revision 5141 (Tuesday, September 29, 2015) — Version 1.9.2

This public release is the first release compatible with El Capitan. An especially noteworthy new feature is the inclusion of a Spotlight importer. This can be enabled in the General preferences pane and it’ll allow users to search MailMate emails using Spotlight. It’ll also allow searching email files saved elsewhere. The Spotlight support also means better integration with BusyCal thanks to the nice people at BusyMac.

MailMate now also includes a “Share” extension which should provide better integration with various other applications.

See below for all the changes since the latest public release (r5084, April 2).

Revision 5140 (Tuesday, September 29, 2015) — Version 1.9.2 Beta 2

These are all the changes since the latest beta release (r5107, July 13).

Note: The support for IMAP MOVE has been tested with Gmail and FastMail. For some servers this is more efficient and it might not trigger quota issues which would be triggered by COPY+EXPUNGE. It is also likely that this fixes a whole range of possible issues with Gmail since Gmail does not work well with the standard COPY+EXPUNGE method.

Revision 5107 (Monday, July 13, 2015) — Version 1.9.2 Beta 1

This is the first beta of MailMate which should work on El Capitan. The following are all changes since the latest public release (r5084):

Revision 5084 (Thursday, April 2, 2015) — Version 1.9.1

This release provides some important fixes and a few minor changes:

Revision 5078 (Tuesday, March 24, 2015) — Version 1.9

This is the first official release of MailMate since version 1.8 (r4576). The long delay (5 months) between official releases is mainly because of major changes involved in the migration from 32 bit to 64 bit. The good news is that MailMate should now be faster, leaner, and more robust than ever before.

It is important to note that all existing experimental 2.0 features (previously enabled in the General preferences pane) have been made official features of version 1.9. This includes bundles, rules, and the toolbar search field.

The following is a recap of the most interesting changes since the release of version 1.8. Some very detailed notes can be found further below for all beta releases between r4576 and r5077.

Revision 5076 (Sunday, March 22, 2015) — Version 1.9 Beta (64 Bit)

Changes since the latest beta release (r5066).

Revision 5066 (Monday, February 23, 2015) — Version 1.9 Beta (64 Bit)

Changes since r5060. Make sure to read the release notes for r5055/r5060 as well if you haven’t done so already.

Revision 5060 (Wednesday, February 18, 2015) — Version 1.9 Beta (64 Bit)

Changes since r5055. Make sure to read the release notes for that as well.

Correspondent/Identity

A new concept has been added to the handling of message headers. MailMate now allows some (hardcoded) transformations of header values as part of the “specifier” system. For example, instead of “Recipient ▸ Address”, one can do “Recipient ≫ Correspondent ▸ Address”. This filters the recipients of the recipient headers (to, cc, bcc) such that no addresses known to be user identities are included. The opposite is also allowed: “Recipient ≫ Identity ▸ Address”. Most importantly, this feature can be used for a “Correspondent” message list column (“Any Address ≫ Correspondent”). This column lists the first address found which is not a user identity. It can also be quite useful for the Submailboxes feature in the mailbox editor.

Revision 5055 (Tuesday, February 10, 2015) — Version 1.9 Beta (64 Bit)

The following are all changes since the last public 64 bit beta (r5035). Details for some of the features are provided below the list.

Note that since r5035, several new bundles have been introduced and others have been improved. See the Bundles preferences pane (⌘,). New bundles for BBEdit, DEVONThink Pro, Due, and EagleFiler. The Todoist bundle, the Calendar bundle, and more have been improved.

Toolbar Search (Experimental)

A search field has finally been re-introduced (very early versions of MailMate had it too) to the toolbar of the main window. If you don’t see it then right-click the toolbar to “Customize Toolbar…” and drag it into the toolbar (or drag the default set). If you don’t want it then drag it out of the toolbar.

By default, a search is equivalent to a search in “Common Headers and Body”, but it also supports a few special one-letter modifiers. Furthermore, “and” and “or” are supported. If neither is used then it’s interpreted as an implicit “and”. Here is an example:

foo f smith t (smith or joe)

This means:

Message contains “foo” and From contains “smith” and (To contains “smith” or “joe”)

(To be precise, “Message” means “Common Headers and Body” and “To” means “Recipients”.)

Here are the current modifiers:

f	From
s	Subject
t	To (Recipients)
b	Body text (unquoted body text)
q	Quoted text
m	Message (Common Headers or Body)

Searching is initiated when hitting “Enter”. Holding down ⌥ makes MailMate stay in the current mailbox. The menu of the toolbar search field allows setting the default search mailbox. (If “Current Mailbox” is selected then holding down ⌥ makes MailMate search “All Messages”.)

A default “header” can be specified for the toolbar search field (MmDefaultSearchScope). There is no GUI for this feature yet. It is configured in the Terminal like this:

defaults write com.freron.MailMate MmDefaultSearchScope -string "subject"

You can also search explicit headers like this:

delivered-to:joe x-mailer.name:mailmate

The search “language” is transformed to a MailMate query using an external script. Eventually, you’ll be allowed to create your own search language.

Hide Quoted Text (Experimental)

It’s now possible to make MailMate collapse quoted text beyond some quoting level. Instead a line with “Show/Hide quoted text” appears. Navigation is possible using the tab and space keys.

Here is an example of using the currently hidden preference:

defaults write com.freron.MailMate MmShowQuotedTextLimit -integer 2

This should hide quote levels of level 3 or more. For testing it might be better with a lower value to see it in action more often. This currently also works for HTML messages, but there might be undesired side effects. Feedback is welcome.

Improved “Submailboxes” Feature

Previously, using the “Submailboxes” feature of MailMate did not work well with headers with multiple values. In particular, recipient headers and tags. This has now been improved such that a message can appear in multiple submailboxes if it has multiple values.

By default, a mailbox for Tags is now included, but it’ll only appear automatically for new users. You can create it manually by creating a smart mailbox with a “Tags exists” condition and then enable “Submailboxes” with the “Tags” header.

Revision 5035 (Wednesday, January 7, 2015) — 64 Bit Beta

Note that this release requires you to open the new Bundles preferences pane and explicitly enable the bundles you need (bundles/commands are one of the experimental 2.0 features enabled in the General preferences pane).

Changes since the previous public 64 bit beta (r5025):

Revision 5025 (Thursday, December 4, 2014)

This is the first official 64 bit release of MailMate. It includes numerous optimizations compared to the 32 bit builds and should be both faster and use less memory.

Thanks for helping me test the 64 bit release. Make sure you do the following:

The following are all changes since the latest 32 bit release:

Revision 4587 (Friday, October 24, 2014)

Revision 4583 (Wednesday, October 22, 2014)

To enable OAuth 2.0 for Gmail you need to enable this hidden preference:

defaults write com.freron.MailMate MmXOAUTH2Enabled -bool YES

After relaunching, a browser window is opened automatically (this needs to be changed). This can be very confusing if you have multiple Gmail accounts. Copy the code from the browser to the MailMate requester and then everything should work as before.

I’m very interested in users accessing non-Gmail servers with XOAUTH2.

Revision 4576 (Wednesday, October 15, 2014) — Version 1.8

The list of changes since version 1.7.2 (r3905) is very long and all the details can be seen below in the release notes for 1.8 Beta 1–7. Version 1.8 is best described as a major maintenance release including numerous bug fixes, stability improvements, and minor feature enhancements. The following are some of the most interesting new features:

Revision 4575 (Tuesday, October 14, 2014) — 1.8 Beta 7

The following are all the changes since r4451 (1.8 Beta 6).

Revision 4551 (Friday, October 3, 2014) — 1.8 Beta 6

The following are all the changes since r4469 (1.8 Beta 5).

Revision 4474 (Thursday, August 21, 2014)

Another special intermediate 64 bit test version. Note that shortcuts for bundle commands do not work in the 64 bit test versions.

Revision 4469 (Sunday, September 7, 2014) — 1.8 Beta 5

The following are all the changes since r4415 (1.8 Beta 4). Note that, despite the naming, Beta 3 and 4 were never released as betas and therefore you may want to read their release notes as well (further below).

Revision 4415 (Friday, August 8, 2014) — 1.8 Beta 4

The following are all the changes since r4374 (1.8 Beta 3).

Revision 4374 (Thursday, July 3, 2014) — 1.8 Beta 3

The following are all the changes since r4214 (1.8 Beta 2).

New

Changed

Fixed

Revision 4214 (Friday, May 2, 2014) — 1.8 Beta 2

The following are all the changes since r4025 (1.8 Beta 1).

New

Changed

Fixed

Revision 4025 (Friday, February 14, 2014) — 1.8 Beta 1

The following are all the changes since r3905 (1.7.2).

New

Changed

Fixed

Revision 3905 (Tuesday, December 17, 2013) — Version 1.7.2

It’s been a busy month because of the successful crowd funding campaign. Thanks to all who made contributions and/or helped to spread the word. This update primarily includes various low level changes and fixes, but it also includes some new bundles for those of you with the experimental 2.0 features enabled (see the General preferences pane).

Calendar Bundles

Experimental bundles added for Calendar (iCal), BusyCal, and Fantastical. The latter two are based on bundles provided by Torsten ‘Teggy’ Grust (thanks!). The Calendar bundle defaults to the use of a calendar named “Work”. For now, you can change this using the defaults command in the Terminal:

defaults write com.freron.MailMate MmDefaultCalendarName -string "MyCalendar"

If you select text in the displayed email then this is used for the creation of the event. Otherwise, MailMate tries to automatically find a suitable date in the message.

Task Manager Bundles

Three new bundles have been added to match the functionality of the OmniFocus/Reminders bundles. The new bundles provide integration with Evernote, Things, and The Hit List.

SmartyPants

Experimental SmartyPants support has been implemented. It only works for HTML and HTML is generated even if only needed for SmartyPants. Quoted text is ignored by the converter. The SmartyPants conversion skips any occurrences of "-- ".

Enable this feature as follows:

defaults write com.freron.MailMate MmSmartyPantsEnabled -bool YES

Other

Most of the following is only of interest to bundle creators.

Revision 3836 (Sunday, November 10, 2013) — Version 1.7.1

Don’t miss the 1.7 release notes if you haven’t read them yet.

Revision 3790 (Thursday, October 17, 2013) — Version 1.7

The lists of new features, changes, and fixes are long, and you are likely to find something of interest, but you may be even more interested in the section below the list. It describes some of the future features of MailMate and how you can try some of them right now.

Read more about the following in the “Hidden Preferences” manual page:

Changes and fixes:

A glimpse of the future: Rules, Scripts, and Gmail labels

MailMate has come a long way since its initial release, but there is still much to do. Two of the most often requested features are rules and scripts and important progress has been made in these areas. Even though these features are not complete I would like more users to use and test them. Don’t expect everything to work as expected, but please report any issues you have by email or on the mailing list.

Use the following command in the Terminal to enable the features:

defaults write com.freron.MailMate MmTwoPointOhFeaturesEnabled -bool YES

Update: This can now be done using a checkmark in the General preferences pane.

Restart MailMate and the Mailbox Editor of all mailboxes should include a “Rules” pane. It should then be possible to filter messages and then “Move/Copy to Mailbox”, “Set/Remove Tag”, “Play Sound”, and/or “Run Script”.

Also notice a new “Command” menu in the main menu of MailMate. By default, it contains two commands for adding messages to OmniFocus and it contains a simple command for opening a Lighthouse ticket (the issue tracking service for MailMate) when viewing a notification email from Lighthouse. How to make your own commands is, for now, undocumented, but you are welcome to ask questions on the mailing list. It is more powerful than the current examples show.

Somewhat unrelated to the above, the Terminal command above also enables a new experimental feature for Gmail. Gmail supports both standard IMAP keywords and their own label system. Unfortunately, the latter does not work well with standards compliant IMAP email clients if the user applies multiple labels to a single message (it is then fetched/stored multiple times by most email clients).

MailMate now offers a solution to this problem where (some) Gmail labels are treated as if they were IMAP keywords. This plays well with the existing support for tags in MailMate. It works as follows: A new column in the Tags preferences pane allows you to assign a Gmail label to each tag. If you assign it then MailMate is automatically going to ignore that label when it’s reported by the server as an IMAP mailbox. Instead MailMate pretends the message has the corresponding IMAP keyword enabled.

Update: This is now the default behavior for new Gmail accounts.

Important points:

Revision 3549 (Friday, July 5, 2013) — Version 1.6

The following lists the considerable number of new features, changes, and fixes since the most recent public release of MailMate (April 9th, r3323). Some of the important changes are listed in their own subsections below, but it’s also worth looking through the “Other changes” subsection. You’ll find a gem or two in there as well.

This version of MailMate is largely based on user reports/requests and I’d like to thank everyone for their positive and constructive feedback. Also thanks to all the license buyers and, in particular, thanks to the users sponsoring some extra work hours to be spent on MailMate. You are now listed in the About window of MailMate.

Send Later

A “Send Later” feature has been implemented. It is enabled in the Headers popup in the Composer. A simple text field allows one to write time expressions such as “tomorrow at noon” or “friday at 10”. The text is red as long as the expression cannot be interpreted. The supported expressions cannot be documented since it is based on Apples API for locating date/time-related expressions in text. In addition to this, MailMate looks for simple relative time expressions such as “2 hours 10 minutes” with support for years, months, weeks, days, minutes, and seconds. Shorthand is also supported, for example, “2h 10m” or “2h10m”. If MailMate cannot parse the expression and the user tries to send the message then a sheet is shown which allows the user to correct the problem or set an exact time. The date header of the message reflects the “send later” date (which may be sooner than the message is sent if MailMate has been offline).

Two new message outline columns are available for showing when a message is scheduled to be sent (“Pending Submission”). One of them is relative to the current time and is enabled by default for the Drafts mailbox. Finally, when reviewing messages in the Drafts folder, you can now use “Send Now” or “Cancel Send and Edit” on any messages pending to be sent.

The work hours needed for the “Send Later” feature were partly sponsored by Self-Reliant Film.

New mailbox editor

The Mailbox Editor has been redesigned. This is work in progress. The editor now handles a set of panes. For now, this only works for smart mailboxes, but it is planned to work for any kind of mailbox with a varying set of panes (depending on the type).

A new Submailboxes pane is available. This has settings for:

You can, for example, automatically display submailboxes dividing messages into subsets based on year, sender, mailing list, or any other (part of a) message header. The best way to see its potential is to simply play around with the feature.

Improved mailto: scheme

Improved handling of mailto URLs. It is now possible to specify a from argument. It should just be an email address and MailMate will take care of finding the corresponding identity. It works with all identity settings including address patterns. If an unknown address is given then MailMate falls back to the default account.

Improvements also include:

Tips view

Added a new view providing quick tips about some of the less obvious features of MailMate. It is currently shown at the bottom of the mailbox viewer and the composer (it’ll be extended to the mailbox editor as well). The view can easily be dismissed by clicking an “Ok” button, but you can also tell it to never appear again. The General preferences pane includes a new setting for specifying when tips should appear. By default it is “Once a Day”.

IMAP

Content-Transfer-Encoding: x-uuencode

MailMate now supports the non-standard transfer encoding named x-uuencode. If you have had problems with “corrupt” attachments in the past then this might fix it. The encoding seems to be generated by Eudora (maybe as an option or only by some versions), but in general it seems to be quite rare. Most email clients use base64 encoding as specified in the MIME standard. Nevertheless, some users may have a lot of these messages in their email archives.

Note that MailMate does not (and cannot) generate messages with the x-uuencode encoding (and this is not going to change).

TNEF (winmail.dat)

MailMate now includes out-of-the-box support for extracting files from TNEF attachments (often named winmail.dat). You do not need to install anything to make this work.

Note that TNEF is a proprietary non-standard format. The sender should be notified about this and encouraged to use a different attachment format.

Experimental support for requesting DSNs

Experimental support for requesting DSNs (delivery status notifications) as specified in RFC 3461 has been implemented. MailMate supports RET and NOTIFY although I’m not sure how widespread RET is used in practice. Note that the Gmail SMTP server supports neither.

To try this out, quit MailMate, and then edit this file:

~/Library/Application Support/MailMate/Submission.plist

For each SMTP server for which you would like to enable this feature, you can add one or both of the following:

requestDSN = "SUCCESS,FAILURE,DELAY"; // Any combination of values is accepted. You can also specify NEVER instead to never receive DSNs.
reportDSN = "FULL"; // Either FULL for the full message or HDRS for receiving headers only.

Note: How well this works depends on the SMTP servers between sender and receiver. Feedback is welcome.

Other changes

Other fixes

Revision 3323 (Tuesday, April 9, 2013)

The following critical bugs were fixed shortly after the 1.5.4 release.

Revision 3316 (Thursday, April 9, 2013) — Version 1.5.4

Revision 3271 (Thursday, March 14, 2013) — Version 1.5.3

This is primarily a bug fix release. The only new feature is a hidden preference to customize the “On … John Appleseed wrote:”. This can be done as follows:

defaults write com.freron.MailMate MmReplyWroteString -string 'On %e %b %Y, at %k:%M, ${from.name:${from.address}} wrote:'

The above is the the same as the default. The placeholders for date and time are the same as described in the manual page for the strftime function. The following describes this function in the Terminal:

man strftime

Bug fixes

Revision 3255 (Monday, February 4, 2013)

Revision 3239 (Wednesday, January 30, 2013)

New mailbox search option

Added “None” as an alternative option for matching on mailboxes (in addition to “Any” and “All”). This enables one to easily construct searches like “All messages in mailbox A, but none of the messages in mailbox B or C.”.

New mailbox related selectors for custom key bindings

New selectors for custom key bindings to be able to change tags on all messages of the currently displayed mailbox (or search result). Here is an example marking messages as read/unread:

"1" = ( "mailboxToggleTag:", "\\Seen" );
"2" = ( "mailboxSetTag:", "\\Seen" );
"3" = ( "mailboxRemoveTag:", "\\Seen" );

Also added a new selector to expunge (permanenly delete) any messages marked as \Deleted in the currently displayed mailbox (or search result). This can be used to make MailMate behave like a traditional IMAP email client. Here is an example:

"D" = "expungeDeletedMessages:";

To make that work well then you also need to display \Deleted messages for all mailboxes. Until a better solution has been implemented then you can do as follows:

defaults write com.freron.MailMate MmShowDeletedMessages -bool YES

Feedback is welcome.

Note that the manual pages have been updated to include a list of all available keybinding selectors (in the appendix).

Other changes

Revision 3218 (Monday, January 21, 2013) — Version 1.5.2

Added sendAndArchiveParent: and sendAndMoveParentToMailbox: selectors which can be used for custom key bindings. Also added an optional “Send and Archive” button for the composer toolbar. It is not displayed by default. Note that when doing “Send and Archive”, the archived parent is automatically marked as read (if not read already).

Added a new submenu to the Mailbox menu named “Synchronization Schedule”. It allows the user to explictly configure how often each mailbox is synchronized, including a “Connected” item which means that the mailbox is treated like the INBOX, that is, IMAP IDLE is used. It only makes sense to have at most 3 “Connected” mailboxes since there is not yet a GUI to increase the number of simultaneous connections (it can be configured manually though).

It is now possible to add custom headers to the composer using a hidden preference. For example, the following can be used to add a priority header to outgoing messages:

defaults write com.freron.MailMate MmAdditionalComposerHeaders "( { headerName = 'X-Priority'; type = 'plain'; } )"

Give the header a value of 1 and it’ll get a “high” priority.

Experimental handling of winmail.dat files

TNEF (Transport Neutral Encapsulation Format) is a proprietary attachment format which is generated by some Microsoft products. The resulting files are often named winmail.dat. This version of MailMate can automatically extract the files within TNEF attachments using the tnef command line tool, but this is not (yet) distributed with MailMate and you should consider it a very experimental feature. If you have MacPorts installed then you can get tnef as follows:

sudo port install tnef

Then launch MailMate and try to open a message with a TNEF attachment (MIME type must be application/ms-tnef). It has only been tested on a few emails. Feedback is welcome, in particular if you have messages for which it fails to work correctly.

IMAP

Various Fixes

Revision 3157 (Wednesday, December 19, 2012)

Revision 3142 (Friday, December 14, 2012)

Revision 3139 (Wednesday, December 12, 2012) – Version 1.5.1

Tagging

This is the first version of MailMate with a user interface for tagging. Details can be found in the manual, but you can easily try it out by simply hitting t in the message viewer. Also note the new “Tags” preferences pane.

The implementation of tags in MailMate is based on IMAP keywords.

Other changes

This release also includes a workaround for a problem under 10.7.5 which would make MailMate and the authorization interface to the keychain hang when changing the trust settings of a server certificate. The problem is related to code signing.

Revision 3095 (Thursday, November 8, 2012) — Version 1.5

This section covers all changes since version 1.4.3 of MailMate which was released as a public beta in July. It is followed by a section describing the changes since the latest public release which was version 1.4.2 (r2818/r2819).

Note that the certificate used for code signing has changed since version 1.4.2 and you are going to be asked about allowing MailMate to access passwords in the keychain. This should only happen once for each password.

Version 1.5 is the first version of MailMate with support for OpenPGP and S/MIME. To be able to view/verify and/or compose messages using S/MIME or OpenPGP you need to enable it in the Security preferences pane (⌘,).

Various features/changes

IMAP

Bug fixes

Debug

Three new debug variables have been added to make it easier to solve various problems:

defaults write com.freron.MailMate MmDebugSecurity -bool YES
defaults write com.freron.MailMate MmDebugSend -bool YES
defaults write com.freron.MailMate MmDebugAddressBook -bool YES

The first one may be of interest for anyone trying out the new support for S/MIME and OpenPGP. The others are mainly introduced to track down problems reported by a few users.

Revision 2980 (Thursday, July 26, 2012) — Version 1.4.3

This version of MailMate was only released as a public beta. The following covers all changes between versions 1.4.2 and 1.4.3.

Various features/changes

Optimizations

Multiple aspects of MailMate have been optimized. This should be noticeable for most users, in particular users with a large number of messages and/or mailboxes. Optimizations include:

Completion of recipient names/addresses

Extended mailto URL scheme to be used via AppleScript

It is now possible to create new messages in MailMate with attachments using AppleScript. It is also possible to send these messages without bring MailMate to the front.

For a long time, MailMate has supported the mailto URL scheme. For example, the following link creates a message with recipient, subject, and default body text:

mailto:me@example.com?subject=Test&body=Body%20text

It can be used within HTML pages as a link, but it can also be called directly, for example, using the open command in the Terminal:

open "mailto:me@example.com?subject=Test&body=Body%20text"

Using the open command it is also possible to specify the application to be used when creating the message:

open -a MailMate "mailto:me@example.com?subject=Test&body=Body%20text"

Otherwise, the default email application is used (this can be configured in the General preferences pane in Apple Mail or MailMate).

MailMate now extends the mailto syntax to include some additional special parameters. These are attachment-url and send-now. For security reasons they are ignored except if the URL is provided via AppleScript. It can be done as follows using a single line in the Terminal:

osascript -e 'open location "mailto:me@example.com?subject=Test&body=Body%20text&attachment-url=file:///full/path/to/file.txt&send-now=yes" with trust'

Note the important with trust part of the AppleScript command. This is needed to make sure MailMate does not ignore the special parameters.

In practice, all of this means that MailMate can now be integrated with applications which need to send messages with attachments. Examples for iCal and BusyCal are provided, but it is currently a bit tricky to use them since integration requires the developers of the applications to add scripts for MailMate (and don’t ever expect that to happen for iCal). For now, the scripts can be enabled as described below using the Terminal (assuming all applications are in /Applications).

iCal:

mv /Applications/iCal.app/Contents/Resources/Scripts/Mail.scpt /Applications/iCal.app/Contents/Resources/Scripts/MailBackup.scpt
ln -s /Applications/MailMate.app/Contents/SharedSupport/Other/iCal/Mail.scpt /Applications/iCal.app/Contents/Resources/Scripts/

UPDATE: The above does not work on Mountain Lion since Apple no longer uses the Mail.scpt file. It is unknown whether or not a workaround exists.

BusyCal:

mv /Applications/BusyCal.app/Contents/Resources/Scripts/MailAttachmentScript.scpt /Applications/BusyCal.app/Contents/Resources/Scripts/MailAttachmentScriptBackup.scpt
ln -s /Applications/MailMate.app/Contents/SharedSupport/Other/BusyCal/MailAttachmentScript.scpt /Applications/BusyCal.app/Contents/Resources/Scripts/

UPDATE: The above does not work for BusyCal 2.0. It might work if the script is placed in the following location (not tested): /Volumes/Mountain\ Lion/Users/benny/Library/Application\ Scripts/com.busymac.busycal2/com.freron.MailMate.scpt

Note that updating iCal/BusyCal or moving MailMate is going to break the symbolic links created above.

An example script for LaunchBar (nightlies) is also included. It should be used with the “Preferences ▸ Actions ▸ Options ▸ Create Emails with” preferences item. The script is located here: MailMate.app/Contents/SharedSupport/Other/Launchbar/SentHandlers.scpt. LaunchBar should then allow you to create an email with any selected files attached (selected in the Finder).

IMAP

It is now possible to manipulate the use of namespaces for each IMAP account. This is important for some users, especially those needing to specify what is known as an IMAP prefix in most email clients (most often this is not necessary). The feature is described in the chapter about “Hidden Preferences” in the manual.

Gmails IMAP server does not report changes to IMAP keywords/flags including its read state (when watching for changes in the INBOX). As an experimental workaround, MailMate can now be told to regularly check for keyword changes. You can try it by running the following command in the terminal:

defaults write com.freron.MailMate MmEnableKeywordsCheckInIDLEForGmail -bool YES

Other IMAP related changes are:

Experimental dual mode

Introduced a new layout class to handle multiple modes in a window. This is used to provide a dual-mode layout in which one can switch between list mode and message mode. To control it, a key binding is needed for nextMode:. To enable this layout, you need to do the following:

mkdir -p ~/Library/Application\ Support/MailMate/Resources/Layouts/Mailboxes/
cp /Applications/MailMate.app/Contents/Resources/Layouts/Mailboxes/dualMode.plist ~/Library/Application\ Support/MailMate/Resources/Layouts/Mailboxes/

And then edit dualMode.plist by removing the enabled = 0 line.

Bug fixes

Revision 2818 (Tuesday, March 27, 2012) — Version 1.4.2

Version 1.4.1 of MailMate unfortunately introduced a performance bug which under certain circumstances can make MailMate practically unusable (high CPU and disk usage). The problem is particularly bad with large mail stores. Thanks to the users helping identify and solve this issue. It is strongly recommended to update to version 1.4.2. (Note that version 1.4.2 works on Mac OS X Leopard as well.)

From address derivation for email aliases

Derivation of the From address for replies has been changed. Until now it has been based on a heuristic using the X-Original-To header and other similar headers, but examples from users have shown that this approach does not work well in general. As a replacement for the heuristic, an optional account setting named “Address Pattern” has been introduced. It is disabled by default. The value for this option must be a regular expression which describes the format of any aliases for the account. Read more about this in the account settings chapter in the Help Book (a help button has also been added to the account settings window).

Change focus using key bindings

Introduced makeFirstResponder: for key bindings. This can be used to bind a key to directly activate a view. The identifiers for the views can be found in the layout files, but here are the most likely use cases:

"o" = ( "makeFirstResponder:", "mainOutline" );
"m" = ( "makeFirstResponder:", "messageView" );
"M" = ( "makeFirstResponder:", "mailboxesOutline" );

Other changes

Revision 2802 (Wednesday, March 21, 2012)

IMPORTANT: This is the last release of MailMate which supports Mac OS X Leopard (10.5). This affects roughly 2% of the current user base (even less if including Mac App Store users) which is about the same as the number of Mac OS X Mountain Lion users (10.8). This revision of MailMate disables the automatic software update when running MailMate on Leopard.

Revision 2801 (Thursday, March 15, 2012) — Version 1.4.1

Customizable swipe gestures

Trackpad gestures are now supported by MailMate. It has been implemented with customization in mind as described in the following. The 4 standard swipe directions, left, right, up, and down, are transformed into key down events with the unicode characters \U2193, \U2190, \U2192, and \U2191 (→ ← ↑ ↓). It is a bit of a hack, but it allows great flexibility with respect to what can now be done with gestures. By default, standard key bindings have been extended as follows:

"→"      = "nextMessage:";
"←"      = "previousMessage:";
"↑"      = "previousThread:";
"↓"      = "nextThread:";
"^→"      = "nextUnreadMessage:";
"^←"      = "previousUnreadMessage:";
"^↑"      = "previousUnreadThread:";
"^↓"      = "nextUnreadThread:";

The defaults may be changed (feedback is welcome), but in any case you can change it yourself using a custom set of key bindings. Swipe to archive, switch mailbox, delete messages, or whatever you like. As indicated by the defaults, it is possible to combine swipes with the use of modifier keys.

Other new keybindings

Based on a user request, the following actions are now available for binding keys to expand/collapse messages or threads in the messages outline (when organizing by thread):

expand:
collapse:
expandThread:
collapseThread:

In addition to toggleTag:, it is now also possible to explicitly set or remove tags:

setTag:
removeTag:

Improvements

Most importantly, a number of optimizations should result in faster startup time, smoother scrolling in the messages outline, and faster display of messages, in particular, for large message stores.

New hidden preferences

The following three boolean hidden preferences values are now available:

MmMoveSentRepliesToMailboxOfRepliedMessage
MmAddressCompletionMailbox
MmNonPrivateNamespacesEnabled

The first one is self-explanatory, the second one can be used to control which messages are used for completion of email addresses in the composer, and the last one can be used to enable experimental support for non-private IMAP namespaces. Feedback is welcome, but none of these features should be considered complete.

Fixes

Revision 2651 (Saturday, December 17, 2011) — Version 1.4

Until this version of MailMate, during startup the user has been notified of any previous crashes and then offered the opportunity to submit them to Freron Software. This has been a very useful feature and crashes are now quite rare in general due to the fixes which have followed the crash reports sent. The feature still exists, but it has been simplified. The Preferences (⌘,) has a new setting where MailMate can be told to automatically send crash reports quietly. This is disabled by default, but you are automatically asked (once) to enable it if a crash report is found.

Reorganized and extended preferences

The Preferences (⌘,) window has been reworked and now contains 7 panes. Previously hidden preferences have been given a GUI and other preferences have been improved. “Software Update” has moved from the MailMate menu to its own pane and it has more detailed settings. In particular, you can configure it to automatically download beta versions of MailMate.

Markdown support

Markdown support is now available and you can enable it in “Preferences ▸ Composer”. The composer window is then going to include a Markdown-related menu in the status bar. You can read more about it in the Help Book, but essentially it means that you can write your messages in Markdown style and then MailMate is going to generate an HTML body part as an alternative to the plain text (Markdown) body part. Note that the composer has an alternative layout which makes it easier to experiment with this feature (see “View ▸ Layouts” when using the composer).

IMAP/SMTP

For new users, IMAP server subscriptions states are now ignored by default. This can be changed in the “Edit Subscriptions…” interface. For existing users (that is, existing databases) the default is still to respect server subscriptions.

The quest continues to support as many IMAP servers as possible. Some servers are more challenging (euphemism for buggy) than others, and some times servers reveal bugs in MailMate. The following are all of the IMAP related changes:

When sending a message fails then a “Try Later” option is now available. It’ll retry after 15 minutes and then present the requester again (if it fails again). Each time the retry delay is doubled. When quitting, MailMate notifies the user if any messages are on hold.

If sending while offline then messages are automatically queued for sending when going online again. The state of individual messages can be seen in the Drafts mailbox. Using hidden options it is also possible to delay sending any messages (the delay is measured in seconds):

defaults write com.freron.MailMate MmSendMessageDelayEnabled -bool YES
defaults write com.freron.MailMate MmSendMessageDelay -integer 60

Database rebuilding

MailMate now automatically offers to rebuild the database if an inconsistency is detected. The user is asked to choose between basing the rebuild on already downloaded messages or basing the rebuild on redownloading all messages. When based on downloaded messages, MailMate tries to maintain the usage history of signatures.

This is a major new feature even though you may never see it. The previous solution was to output an error to the system log and then simply terminate MailMate. It was not very user-friendly and it was difficult to recover manually.

Part of the implementation of this feature means that the UIDs of IMAP messages are now stored in file attributes. Also, moving messages between mailboxes is now done much more efficiently than it was before (on the local disk).

Other new features

Navigation keys have been for thread navigation (in the Messages menu for now). The corresponding selectors are next/previousThread: and next/PreviousUnreadThread: and they can be used for custom keybindings if needed. The default keys mirrors the keys for next/previous(Unread)Message: with the addition of the control key (⌃).

The From address of a message is now customizable. A “Customize…” menu item has been added to the From-menu. This opens a simple sheet with a text field. The text field features automatic completion based on previously sent messages. Note that the From menu is not shown if only 1 identity is known (configured in accounts), but this is likely not an issue for users wanting to customize the From header.

Another new selector is scrollPageDownOrNextUnreadMessage: which can currently only be used by assigning a key using custom key bindings. The idea is to assign it to the space key to make it behave a bit differently with respect to finding the next message (standard key binding simply looks for the next message and not the next unread message).

Two algorithms now exist for the dynamic signatures system. It can be configured using the Terminal as follows:

defaults write com.freron.MailMateSimple MmDynamicSignatureMethod -string standard

The three possible values are none (to disable it), standard (the default), and messageType. The last one bases its signature guess on whether the message is new or is a reply. This is for users who typically write an initial message with a large signature and then subsequently use a small signature.

Fixes

Revision 2491 (Sunday, September 25, 2011)

In addition to a range of fixes/improvements, this release also includes some important steps towards improving integration with other applications. Some of it is still in an experimental state, but you can read more about it further below. It might even be fun to play with.

Various fixes/improvements

Also added debug code to more easily get a log from a failing server connection. When an error window is shown with the options of “Take Account/Mailbox Offline” or “Retry” then you can hold down ⇧ to produce a log of a retry attempt. The file is saved to the Desktop with a name with the following pattern: “MailMate_server_mailbox.txt”.

Integration with other applications

Safari has menu items which can be used to easily mail pages or links. These menu items now also work for MailMate with the caveat that MailMate attaches page content (since the composer supports plain text only).

Also new is that MailMate supports the following in the Services menu: “New Email With Attachment” and “New Email With Selection”.

It is also possible to obtain a special MailMate menu item in the PDF menu of the printing dialog (this works in any application). This can be done by making an alias to MailMate in the following folder:

~/Library/PDF Services/

After making the alias, the name of the alias can be changed to, e.g., “Mail PDF with MailMate.app”.

Finally, MailMate now also handle the following URL schemes: mid, cid, and message. Note that they can be “assigned” to MailMate by using the email application chooser in the (General) Preferences. Whether you need to do this depends on which email applications you have used in the past, e.g., “Apple Mail” only supports (and introduced) the message URL scheme.

Also added a menu item for “Copy as Link” using the message URL format. This URL scheme is an undocumented Apple feature, but this is going to work better if switching between Apple Mail and MailMate. An alternative could be the mid URL format which is standardized. This might be optional in the future.

A RESTful interface

In order to try out the following very experimental feature, you need to enable it before launching MailMate:

defaults write com.freron.MailMate MmHTTPServerEnabled -bool YES

Now you can test it by entering the following URL in your favorite web browser:

http://localhost:54321

The only thing displayed is a link to the following:

http://localhost:54321/messages

This should show you a list of all messages in MailMate. You can click on any message, but don’t click on junk messages since external references (images mostly) are most likely not blocked in the browser. The link to message number 1 (if it exists) would then be:

http://localhost:54321/messages/1

You can also see the message number of any message in MailMate by enabling the “Msg ID” column in the messages outline. In the special mailbox “All Body Parts” you can also see the message number of any body part.

The default Content-Type depends on the HTTP Accept header. In a browser, text/html is likely returned for any messages or body parts of type text/*, message/rfc822, or multipart/*. Other body parts are returned as they are defined in the MIME body part headers, for example, a body part of type image/png is returned as image/png (decoded to its binary form). When using curl from the command line then the default output is text/plain for body parts where this return type is supported. This is nicely decoded canonical (utf-8 encoded) text.

The returned data can be changed by explicitly stating the accepted type(s). For example, using curl from the command line, you can retrieve a raw message as follows:

curl -H'Accept: message/rfc822' http://localhost:54321/messages/1

Or you can retrieve the HTML formatted message used in the browser:

curl -H'Accept: text/html' http://localhost:54321/messages/1

You can also reference header values as follows:

http://localhost:54321/messages/1/headers/x-mailer

In this case the result would be a json array like ["MailMate r2460"] if the message had been written in the latest (registered) revision of MailMate. The following is an example of how to use a specifier to only get the MailMate part of the header:

http://localhost:54321/messages/1/headers/x-mailer/name

You can also try the above in a browser where the following URL can be used to see a list of all headers in a message:

http://localhost:54321/messages/1/headers

Note that message/rfc822 is also supported for the URL above.

All of this is work in progress and should be considered a “proof of concept”. The main goal is to use this as an interface for retrieving information about messages in MailMate from scripts in any language.

For now, MailMate still lacks a way to run commands on selected messages and therefore the above is not yet very useful in practice, but you are encouraged to play with it and maybe even provide some feedback.

Revision 2419 (Wednesday, August 24, 2011) — Version 1.3.1

Custom key bindings

The custom key bindings feature is now exposed in the GUI. It can be enabled in “Preferences ▸ General” and a comma-separated list of custom key bindings files can be entered. For now, only a Gmail key bindings file is distributed with MailMate. A help button in the preferences leads to a help book chapter which describes how you can create your own shortcuts, for example, to go to specific mailboxes, move messages, or to toggle IMAP keywords/tags.

Note: If you have used this feature while it was not exposed in the GUI then you still need to go to the preferences and enable it.

Hidden preferences

Over time, numerous hidden preferences have been described in the release notes. A new chapter in the help book lists all of them. Some of them are eventually going to have GUI counter parts, some will stay hidden, and some will be removed again. Look through the list to see if it contains one or more useful features for you. Feedback is welcome.

“Guessing” standard mailboxes

Introduced strategy for guessing standard mailbox names, for example, MailMate automatically figures out to use a mailbox named “Trash” for deleted messages instead of creating a new mailbox named “Deleted Messages”. This is a heuristic approach since there is no standard for getting this information from IMAP servers except for the non-standard XLIST extension used by Google (and maybe others have adopted it). This extension is also supported by MailMate.

Other changes

Link crashes (Default Folder X)

Some users have reported crashes when clicking on links in emails on Lion. If you experience this problem then it is very likely that you need to update the Default Folder X application. This problem also seems to not be limited to MailMate, but may occur for other applications as well.

Revision 2359 (Saturday, August 6, 2011)

Added temporary solution for adding a bcc header by default to all outgoing messages. Write the following in the Terminal if you need this:

defaults write com.freron.MailMate MmDefaultBccHeader -string me@example.com

Added experimental prefs value MmAllMessagesFilter to make searches faster. It can be used to reduce the number of messages included in the “All Messages” mailbox. All messages are still available via the IMAP sources/mailboxes:

defaults write com.freron.MailMate MmAllMessagesFilter -string "#date > 1 years ago"

Revision 2341 (Wednesday, August 3, 2011) — Version 1.3

With this release MailMate now officially supports Mac OS X 10.7 (Lion). Lion related changes are described in the following subsection. The release notes for this release are extensive, but you should note the subsections further below describing some new experimental features, in particular, a new flexible system for custom key bindings (providing Gmail-like keyboard shortcuts) and the first small steps toward support for OpenPGP.

Lion related features and fixes

New features and improvements

Two new options have been added to Preferences/General (based on frequent requests):

  1. An option to change the default behavior of double-clicking a message. It can now be set to open the message instead of searching for related messages.
  2. An option to use a bold font style for unread messages.

There is also a new hidden boolean option. When enabled, any message viewer or composer window is taken to the front when the dock icon is clicked. Normal behavior is to always open a mailbox viewer if none exists:

defaults write com.freron.MailMate MmShowAnyViewerOnDockIconClick -bool yes

Custom keybindings

A new system is in place to provide custom key bindings for common tasks. As an example MailMate includes many of the key bindings used by Gmail. There is no GUI option yet, but this feature should be stable. To enable it, run the following from the Terminal:

defaults write com.freron.MailMate MmCustomKeyBindingsName -string "Gmail"

The key bindings are defined in the files located in:

MailMate.app/Contents/Resources/KeyBindings/

It is possible to create a new key bindings file and place it in:

~/Library/Application Support/MailMate/Resources/KeyBindings/

The Gmail key bindings file can be used as a starting point for new files. It includes most of what is possible to do. Each key-combination (or series of key-combinations) can be bound to one or more actions. Each action is defined by a so-called selector.

Some selectors accept an additional argument. These are insertText:, goToMailbox:, moveToMailbox:, and toggleTag:. The goToMailbox: and moveToMailbox: selectors work both with and without an argument. Alternatively, goToMailbox: can take the unique id of any mailbox as an argument (see Mailboxes.plist) and moveToMailbox: can take one of the following as an argument:

  1. A standard mailbox name such as inbox, archive, drafts, sent, junk, and trash.
  2. A mailbox path without an account such as /Special.
  3. A full path for a mailbox within an account such as imap://you@imap.example.com/Special

The following example would bind the key g to move a message to a mailbox named Special within the account the message is currently located:

g = ( "moveToMailbox:", "/Special");

Here is an example of using key bindings to tag messages. It also illustrates the use of nested key bindings:

"t" = {
	"s" = ( "toggleTag:", "Special" );
};

In this example, entering ts toggles a tag named Special. It should be possible to define a column showing the state of such a tag and it is possible to match on it when searching or creating smart mailboxes. Other than that the tag is “invisible” for now. Note that the tag is given directly to the IMAP server and thus you should use ASCII and no special characters including no use of space.

Basic experimental OpenPGP support

The first step has been taken towards support for OpenGPG. So far, there is only support for decrypting and verifying ASCII armored text parts (inlined signatures/encrypted text). It should not be considered stable, but you can help by trying it out anyways.

MailMate is currently hardcoded to use /usr/local/bin/gpg2 which you need to install if you do not already have it. The GPGTools installer is recommended (or just MacGPG2 and optionally GPG Keychain Access).

To enable this feature in MailMate you need to paste the following in the Terminal:

defaults write com.freron.MailMate MmEnableOpenPGP -bool yes

Experimental “IMAP window”

Since MailMate is an offline email client it requires a lot of disk space if you have a large collection of emails. As an experimental feature MailMate now offers to only fetch a subset of messages based on their age. It is currently controlled with an application wide preferences value:

defaults write com.freron.MailMate MmIMAPWindowInDays -int 365

This should limit MailMate to only fetch messages with a date within the latest year (technically, it is based on the so-called INTERNALDATE of the message on the server).

MailMate does not dynamically adapt to changes to these settings yet. It only has an effect when initially synchronizing an account. (Internally, MailMate supports controlling this window at both account and mailbox level, but this currently requires manual editing of state files.)

Any feedback on this feature is welcome, but use it with care. It is experimental.

Other changes and fixes

The following is a detailed list of all other changes since the latest public release:

When using the following debug variable, a log file is dumped to /tmp/mailmate_imap_subscriptions.log if an error occurs while fetching mailboxes to be displayed for “Edit Subscriptions”.

defaults write com.freron.MailMate LoggingEnabled -bool YES

(It also enables logging for the Activity Viewer even when the Activity Viewer is closed.)

Revision 2204 (Monday, June 13, 2011)

Revision 2191 (Wednesday, June 8, 2011)

Improved Markdown support (still experimental)

MailMate now ships with a Markdown converter. It is named upskirt and it was originally created for GitHub. A blog post will soon be posted which describes the Markdown experiment in more detail.

An alternative composer window has also been included by default. It contains a message view to make it easy to preview the current draft by simply saving it. See the “View ▸ Layouts” menu or just hit ⌘2 in the composer.

The default CSS has been improved to work better with the output from upskirt. This includes a simple look for tables.

Other changes

Revision 2175 (Thursday, June 2, 2011)

Fixed issues with IMAP authentication methods (AUTH=PLAIN and AUTH=CRAM-MD5).

Revision 2169 (Thursday, June 2, 2011) — Version 1.2

Special note: Goggle has changed the default set of mailboxes provided via IMAP. It is strongly recommended to go into the Labels part of the Gmail web settings and make sure the following mailboxes are marked as “Show in IMAP”: Sent Mail, Drafts, Spam, and Trash.

New look for attachments

A transition has started to provide a more table-like display of non-inlined attachments with 1 row for each attachment. Note that:

Inlined PDFs are shown using the img HTML tag (thus avoiding PDF plugins). Note that you can always Quick Look attachments (⌘Y). If you never want to inline PDFs then you can do the following in the Terminal (temporary solution until a general system is in place):

defaults write com.freron.MailMate MmNeverInlinePDF -bool YES

Updated stylesheet for the messages view

As part of the attachment changes, the HTML generated has been simplified and the default CSS file has been updated/extended. If you have created a local stylesheet variant you may need to update it. If you have experience with CSS then you are encouraged to take a look at the default stylesheet:

/Applications/MailMate.app/Contents/Resources/MmMessagesWebView/stylesheet.css

You can extend the stylesheet by creating a file in the following location:

~/Library/Application Support/MailMate/Resources/MmMessagesWebView/stylesheet.css

You can see the HTML generated for a message by using “View ▸ Show HTML Source” (⌃⌘U) within MailMate.

Experimental: Markdown for writing emails

The following enables an extra option in the composer which allows you to tell MailMate that you are writing your message using Markdown:

defaults write com.freron.MailMate MmAllowMarkupLanguages -bool YES

The motivation for this idea is going to be described in a blog post, but in short, if Markdown is chosen then markup=markdown is appended to the Content-Type of the text body part of the message. This can be ignored by the receiving email application or it can be used to convert the Markdown text to HTML before displaying it. Currently, the only email client to do so is of course MailMate and currently it only works if MailMate finds markdown or upskirt in the default path (a Markdown to HTML command is currently not distributed with MailMate).

Various new features

If available the IMAP XLIST command is now used (supported by Gmail) to get the standard mailboxes. This should make MailMate work better (by default) when used with localized variants of Gmail. It may also affect your current setup if mailbox types had not been explicitly assigned.

Delivery headers

Changed the detection of delivery headers (such as X-Original-To) such that it no longer requires the existence of an identity with the same domain in an email address as found in the delivery header. If this is a problem for some users then please report it (more real life examples would be useful since this is basically a heuristic). The new behavior can currently be disabled using:

defaults write com.freron.MailMate MmAlwaysTrustDeliveryHeaders -bool NO

MailMate is now also better at guessing an appropriate from address for, e.g., mailing list messages (essentially doing the same as when replying to messages).

New debug variables

Debug variable for scripts:

defaults write com.freron.MailMate MmDebugScripts -bool YES

Debug variable for logging communication between SpamSieve and MailMate:

defaults write com.freron.MailMate DebugSpamDetection -bool YES

If you have had problems with accounts getting stuck in a “disconnected” state then you can help debug the problem doing as follows:

defaults write com.freron.MailMate MmDebugReachability -bool YES

This is going to log data which can be found in Console.app when the problem occurs.

Details, detail, details

This is an example of how you can change the font of the headers view (intermediate solution since the headers are planned to be moved to the messages view):

defaults write com.freron.MailMate MmHeadersViewFontName -string "LucidaGrande"
defaults write com.freron.MailMate MmHeadersViewFontSize -float 16

Other details:

Revision 2089 (Wednesday, May 4, 2011) — Version 1.1.2

Improved mailbox search

It is now possible to save the default mailbox search conditions. Setup the search you would like by default (likely with empty text fields) and then select “Edit ▸ Find ▸ Use as Default Search”. Note that (as always) empty text field values are ignored when doing a mailbox search (as opposed to the smart mailbox editor). This is not new, but it is useful to know if setting up multiple conditions in the default search.

Also, when adding rows in the rule editor the new row is based on the row for which + was clicked (or the closest following simple row if a compound row is clicked).

Improved completion of addresses in the composer

Other changes

Fixed a bug related to the junk state of messages. When deleting a message in Junk it was wrongly marked as not junk. A bad side-effect of this is that SpamSieve was also notified that it was not junk. If you have been affected by this bug then you should consider resetting the corpus in SpamSieve. Thanks to Erik for reporting this problem (ticket #124).

Empty email address groups are now ignored when sending via SMTP. This can be used to, for example, send to “Undislosed Recipients:;” without getting an error. For convenience you can create an empty Address Book group with “Undisclosed recipients:;” as a name (or some other name, but remember to include “:;”).

Added support for the SMTP authorization method named LOGIN. This is an alternative to PLAIN which is already supported by MailMate, but some SMTP servers only support LOGIN. These methods are almost identical, but LOGIN requires more round trips to the server than PLAIN. If you have had problems with MailMate continually asking for a password for some SMTP servers then this might be a solution.

Revision 2038 (Friday, April 8, 2011) — Version 1.1.1

Autosave

When composing a message, a copy is autosaved every 30 seconds (but only if changes exist). When launching MailMate, any autosaved messages are detected and the user is asked to either discard or import. This should never result in more than 2 versions of a draft: The autosaved version and the most recently explicitly saved version.

Other changes

Revision 2003 (Friday, March 25, 2011) — Version 1.1

MailMate for everybody

Several improvements allow MailMate to work with most (if not all) IMAP servers. Send some feedback if you have an IMAP account which does not work with MailMate.

The most important improvements are:

Image blocking improved

The default in MailMate is now to always block external references, but the user has detailed control of the behavior using some new preferences (currently under General). The most important setting is “Block external references for messages in …” which allows the user to define a mailbox containing the messages for which blocking should be enabled. The default is “All Messages”, but it could be any smart mailbox, for example, a smart mailbox excluding messages which have been identified as being safe. This could be based on headers inserted by server-side spam detection software (like “X-Spam-Score” or “X-Spam-Flag”).

For convenience, the preferences also include a checkbox for “Load external references for messages marked Not Junk” (this could also be done using a smart mailbox as described above). This is especially useful when combined with a new SpamSieve option which allows you to automatically mark messages as Not Junk if they have a low spam score.

Go to the General preferences and play with these new settings and send some feedback if it somehow cannot handle your preferred use of image blocking.

Note that blocking is always enabled for messages in “Junk” or “Deleted Messages”. It is also always enabled for attached messages (occurs when using something like “Forward as Attachment…” has been used to construct an email). This allows one to safely receive forwarded spam.

Composer related changes

When completing addresses, MailMate now looks in all Address Book sources. Technical note: This is done using a private API and therefore this feature may be removed again in future versions of MailMate. Feedback on both success and failure of this feature is welcome.

When pasting in the composer, text is preferred to images (pasting an image makes it an attachment). This was necessary since otherwise pasting text from some applications would instead result in the attachment of an image.

Also note:

Other changes

MailMate now enforces a 30-day trial period. It is measured as days of active use measured by the number of days on which messages have been sent. When the trial period has expired, you can still use MailMate, but you can only send 2 messages per launch.

Interesting minor changes:

Various (less interesting) fixes:

Revision 1951 (Saturday, March 5, 2011) — Version 1.0.2

The SpamSieve support can now be enabled in the preferences. This includes the choice of a mailbox in which SpamSieve should be used to check new messages. By default, this mailbox is the unified Inbox, but it could be any smart or real mailbox.

The handling of messages outline columns has been improved. Submailboxes automatically inherit the settings of parent mailboxes unless explicit changes are made and it is now possible to select the outline column (the column with a triangle) which is useful if the order of columns is changed.

Composer related changes:

IMAP related changes:

Other changes:

Revision 1928 (February 23, 2011) — Version 1.0.1

Reply All vs. Reply

Until now MailMate only had a single “Reply” button (and menu item). It worked as “Reply All” and the only way to make a private reply was by clearing the Cc header. This has now been improved, but even though a “Reply All” (⇧⌘R) menu item has been added, the intention is that it is not needed, because of the new behavior of “Reply”.

The feature is quite simple. When replying to a message with multiple recipients, MailMate displays a sheet to ask if one wants to reply to all or to reply to the author only. There are easy shortcuts for both alternatives (Return and Space).

Rationale: It is bad to reply to all if one really wanted to reply to a single person. But it is also bad (although not as critical) to forget to reply to all when that would have been appropriate. The solution here is to always ask when a message has multiple recipients. If you dislike this behavior, you can go to Preferences/General to make Reply work as in, for example, Apple Mail.

SpamSieve (experimental)

As you may have noticed, MailMate has no built-in junk-filtering. This is unlikely to change soon (if ever), but now there is support for SpamSieve, a shareware utility for identifying spam. It was, more or less, implemented today, so for now it is an experimental feature and can only be enabled via a hidden preference.

To enable it, copy/paste the following to the Terminal:

defaults write com.freron.MailMate SpamSieveEnabled -bool YES

Note that the preference above may be cleared by MailMate if it fails to find and launch SpamSieve.

The SpamSieve support works as follows.

You can use the “Junk/Not Junk” keywords to train SpamSieve. The SpamSieve score can be seen in a dedicated messages outline column. A planned feature is to allow the user to specify the mailbox for which SpamSieve should be used to check for spam. The default is the unified Inbox.

Memory leak in Activity Viewer

An important memory leak was found in the Activity Viewer. It was especially bad if the Activity Viewer was open during the initial synchronization of account(s).

Other

There is now a hidden option to enable alternating row colors in the messages outline:

defaults write com.freron.MailMate MmMessagesOutlineUsesAlternatingRowColors -bool YES

Minor changes and bug fixes: