ProtonMail allows users to define Sieve filters for filtering e-mail messages. It has proven to be an killer feature when paired with message expiration.

For example, the following filter applies a label to e-mails from the Buildroot mailing list. Messages that I’m included in are flagged, while all other messages are archived and expire after three days. Also, I’m typically only interested in new patches so I mark all other messages as seen.

if anyof (address :domain ["to", "cc"] "buildroot.org",
          address :is ["to", "cc"] "[email protected]",
          address :is ["to", "cc"] "[email protected]")
{
  fileinto "buildroot";
  if address :domain ["from", "to", "cc"] "philipmolloy.com"
  {
    addflag "\\Flagged";
  } else {
    if not header :matches "subject" ["*[Buildroot] [PATCH]*", 
                                      "*[Buildroot] [PATCH 1*"]
    {
      addflag "\\Seen";
    }
    fileinto "Archive";
    expire "day" "3";
  }
}

The only drawback of the expiration feature is that it is not possible to revoke an expiration once it has been applied.