I use imapfilter to sort my email.

imapfilter is configured using lua, which both gives you infinite possibilities, but also no premade solutions.

Here’s a couple I came up with.

Sort GitHub projects into folders

GitHub sends all notifications from, but encodes the project name in the TO header.

So we fetch the TO field of every email, parse out the project name.

For some reason, I have at least one project where the project name is quoted, so we remove the quotes.

For perfomance reason, we then collect all emails by project and move them to a organisation/projectname folder struture.

function filter_github_email(box, target_account)
  messages = box:contain_from("")

  actions = {}
  for _, message in ipairs(messages) do
    mailbox, uid = table.unpack(message)
    to = box[uid]:fetch_field("TO")
    project = string.match(to, 'To: ([%S]+)')
    project_scrubbed = project:gsub('"', '')
    target_mailbox = "GitHub/" .. project_scrubbed

    if not actions[target_mailbox] then
      actions[target_mailbox] = Set {}
    table.insert(actions[target_mailbox], message)

  for mailbox, msgs in pairs(actions) do

filter_github_email(account.INBOX, account)