Why MailMate?

MailMate is the Mac email app I use. Its keyboard-first workflow and control over mail make it my pick for the best Mac mail app. That is a personal preference, not a benchmark. You can find the app at freron.com.

My mail is hosted separately from Google Calendar. MailMate receives Outlook meeting invitations, but Google never gets my mail. I wanted the invitation on my calendar without forwarding my inbox to Google.

The small bridge

A local Python process checks only new MailMate inbox files about every 60 seconds. It runs while my Mac is awake and MailMate is downloading mail. It reads MIME messages, finds ICS calendar parts, and imports the event into Google Calendar, keeping the event UID and organizer. For a new invitation, my attendee response stays needsAction: unanswered, not accepted.

I still decide Yes, Maybe or No in BusyCal. The bridge does not accept meetings or send replies for me. On an update or cancellation it uses the same UID to find the Google event; conditional updates using the event ETag avoid clobbering an existing response. No old inbox backfill.

How I run it

This is a small personal setup, not a packaged download. Install MailMate and a calendar app such as BusyCal, set up a self-owned Google desktop OAuth client with calendar access, authorize it locally, then run the Python bridge against MailMate’s local inbox while MailMate downloads new mail. Keep client credentials and the refresh token on your Mac, out of version control. A Google OAuth consent screen left in Testing can make refresh tokens expire after seven days.

The reusable source and setup instructions live in the mailmate-calendar-bridge folder of my private repository. Contact me if you want the source or help installing it; there is no public download link yet.

What I actually tested

Controlled live tests covered import, update and cancellation while keeping the same Google event ID. I separately sent an RSVP email after explicitly authorizing that test, and it was delivered. That is not an auto-accept feature.

Finally I sent a real invitation between my own accounts, let the scheduled poll import it, and confirmed the event appeared in BusyCal. Recurring, forwarded, delegated and malformed invitations still need manual handling and a notification. I have not verified Apple Calendar or Microsoft organizer processing, so I would not claim universal calendar parity.

Further reading

MailMate ↗

Google Calendar API ↗

Google OAuth 2.0 ↗