Read the Introduction if you are new to MailMate (or if you have not read it before). Please remember that MailMate is shareware and that future development depends on your support. If MailMate is not the email client of your dreams then it would be greatly appreciated if you took the time to write a short note about your dreams to mm-feedback@freron.com.
If you bought MailMate in the Mac App Store and you would like to have a regular license key then write an email with your request using “Help ▸ Send Feedback…” within MailMate. It is important you do it with the Mac App Store version of MailMate.
multipart/mixed
MIME messages.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.
winmail.dat
filesTNEF (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.
\
and "
in the IMAP code.${from.name.first}
could fail in certain contexts.=
character. These were displayed on iOS. (Quoted printable is mainly used for signed messages. In general, MailMate tries to avoid the use of quoted printable.)Content-Transfer-Encoding
header is the same as the charset of the message (the origin of these emails are unknown). Falls back to 7bit encoding instead in this special case.mailto:
handling when sending a message with attachments (via AppleScript).mailto:
with trust.mailto:
URL scheme.mailto:
URL scheme (thanks to Mathias Holm for the original script).searchAllMessages:
and mailboxSearch:
selectors (available for custom key bindings).cid:
URL with no value.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.
mailto:
with attachments (via AppleScript).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.
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 (⌘,).
html2text.py
with libxml2
.MmIgnoreDeliveryAddresses
) to ignore delivery addresses when deriving the identity to be used for a reply. Removed the MmAlwaysTrustDeliveryHeaders
hidden preference.* BYE \[UNAVAILABLE\]
for a login attempt.AESendMessage
to send AppleScript events. This affected users of SpamSieve. Every message sent to SpamSieve would hang and then time out (after 2 minutes) making MailMate seem extremely slow.sundown
(Markdown converter) to no longer auto-enumerate numbered lists since that does not work well for the plain text part of emails.text/calendar
within multipart/alternative
) now works correctly, that is, the calendar item is attached to the forwarded message. (This is a workaround for a bug in other email clients.)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.
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.
selectWithFilter:
to be used for key bindings. It can be thought of as a generalization of selectAll:
and deselectAll:
since it can be used to select any set of messages matching a filter. See the manual page about custom key bindings for more information.public.utf-name
.showContextMenu:
).cid:
) in HTML messages can now be dragged.Message-ID
headers now allows spaces in the domain part since such headers are generated by some buggy software.Message-ID
created for new messages. Replaced by mailmate-app.com
if it does not validate.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:
mailto
URL scheme to be used via AppleScriptIt 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).
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:
Message-ID
s. Also fixed a more general potential message duplication problem when appending.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.
cid:
references are handled. It should now work better with non-unique or malformed Content-ID
headers. In practice, certain HTML messages with embedded images are now shown correctly even though they contain bad Content-ID
headers.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.)
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).
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" );
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.
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.
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:
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.
sundown
). It is now better at handling changes in quote-level although this is non-standard Markdown behavior. Also fixed handling of quoted code blocks which would often fail when indented code blocks were in use.text/calendar
body part when it is part of multipart/alternative
(created by buggy software). It is now shown as an attachment when viewing the text/plain
or text/html
body part.X-Original-To
-like headers when creating new messages if they come before any Received
headers (this matches how replies work).X-Original-To
and X-Delivered-To
headers are ignored if they come after any Received
headers.X-Original-To
header was not useful. Now it works if the real address is only found in the for
part of a Received
header. These parts of Received
headers are now scanned for known addresses.MmMailboxDefaultCountKey
. Set it to none
to disable counting by default.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.
maximum_value_for_header
function. It has been solved by always breaking cycles when threading messages.text/enriched
attachments which are really msword documents (generated by a buggy email client).message/rfc822
as content type in the root body part.address (name <address>)
.mailto:
URL scheme when used to launch MailMate.imap.mail.me.com
) when importing accounts from Apple Mail.Received
headers are skipped (essentially a workaround for headers generated by a Gmail migration).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.
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 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).
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
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).
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.
from
is replaced by recipient
.insertFormatString:
has been added as an alternative to insertText:
for key bindings. Mainly to allow one to do something like "x" = ( "reply:", "insertFormatString:", "Hi ${from.name.first},\n\n");
.message:
URL.upskirt
, with the latest revision from github. Note that its name has now changed to sundown
.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.
text/html
body part.multipart/alternative
MIME body part (most often produced by buggy email clients).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”.
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.
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.
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.
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.
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.
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.
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"
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.
Two new options have been added to Preferences/General (based on frequent requests):
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
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:
/Special
.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.
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
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.
The following is a detailed list of all other changes since the latest public release:
-_
and alphanumeric characters without quoting.raw
).clang
instead of gcc
. May or may not improve performance (no benchmarks done), but it certainly improves development speed.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.)
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.
Fixed issues with IMAP authentication methods (AUTH=PLAIN and AUTH=CRAM-MD5).
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.
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
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.
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).
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.
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).
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.
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:
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).
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.
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.
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:
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.
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:
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:
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:
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.
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.
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).
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: