4 minute read

Like most people I struggle to manage emails. One of my bigger issues is that if I need to follow-up on an email or refer back to it I tend to leave it marked as unread or I occasionally flag it. However that gives me no context at all about the tasks involved or why I might need to refer to it and no ability to say when it needs to be dealt with. I know that there are services and some email clients which allow you to kind of manage this but I use Thunderbird on Linux when I’m at my desk and I’m not prepared to give a third-party service access to all of my emails.

But I think I’ve finally fixed the problem and devised a way to handle things in a much better way and, whilst this is all very specific to my own setup and workflows, I thought it was still worth sharing.

Message-Id

All emails contain a header called Message-Id. This is a unique identifier which is assigned by the client application that sends the email or the first mail server to receive it.

I use Thunderbird as my main email client and there is an add-on called Copy Message ID which allows you to click a button and copy the Message-Id onto the clipboard. I have configured it to add a prefix of mid: too.

Within Thunderbird I can search for messages and I can customise how it works so it’s easy to add the “Message-Id” as an email header to search against. This makes it simple to find messages by their ID but it is also a bit manual and clunky.

Open In Thunderbird…

Thunderbird can be launched from the command-line and you can pass it a string with the prefix mid: and a Message-Id and Thunderbird will open the message for you.

thunderbird "mid:010201ff6..."

(this is why I have Copy Message ID add the mid: prefix)

This can be made even more convenient by having my computer treat mid: as a custom URI so that I can create a link which will call the same command.

This is achieved by creating a custom URI handler via xdg.

For me this is a NixOS Home-Manager configuration change:

xdg.mimeApps.defaultApplications = {
  "x-scheme-handler/mid" = "thunderbird.desktop";
};

This means that if I have a link on a web page which pointed to thunderbird "mid:010201ff6..." I could click on it and that email would be opened in Thunderbird.

Putting It All Together

I use text files to maintain a work log. These are simply a Markdown file for each month and I list things I need to do or remember in them.

A very basic example would be:

# July 2025

## 2025-07-05

- [ ] Write up notes about email management.
- [x] Send overdue invoice reminder to Acme Inc.
- [x] Order more paperclips.

## 2025-07-06

- [x] Fix my buggy code.
- [ ] Reply to John's email about the contract changes.
...

The last item on the list would usually be accompanied by an unread email sitting in my inbox which I would need to find and then reply to at some point in the future.

Now however I can add links to my emails in those notes:

## 2025-07-06

- [x] Fix my buggy code.
- [ ] Reply to [John's email](mid:dfc8c...) about the contract changes.
...

John’s email can be marked as read and filed in an appropriate folder and I don’t need to worry about it again. When I have done whatever work I need to do in order to complete this task I can just use the link to jump straight to the email and reply to it.

Neovim

I use Neovim for editing my notes and I have it configured so that markdown files have their conceallevel set to 2 so that the link URLs are hidden unless the line has the cursor on it. That takes care of keeping my notes easily readable.

Neovim can open links when you press g and then x and because mid: is recognised as a URI on my computer Neovim can open my Message-Id links.

You need to have the cursor somewhere within the link text for this to work and I am lazy so I have defined a keymap which saves me from worrying about where the cursor is:

vim.keymap.set("n", "<leader>gx", function()
    vim.api.nvim_feedkeys("0f(gx", "t", false)
end, { silent = tue, desc = "Open first link in line" })

Now, when I press the leader key and then g and then x the cursor moves to the start of the line, finds the first opening bracket and then ‘presses’ g and x for me. Essentially I can be anywhere on the line and the first link will be opened.

And now, at last, I have a simple way to refer back to emails and more easily integrate them into my daily workflows. And if I move on from Thunderbird or stop using Neovim it is all customisable enough that I am not locked into anything in any way.

Updated: