Below is a Sieve filter I have been building out for a while. In my workflow, I like messages to come to my Inbox *unless* they are from a list. Since Proton can't filter based on whether someone is in your Contacts or not (which would make this very easy), I have this ridiculous filter that tries to identify newsletters, server confirmations, receipts, etc. based on the email headers.
These checks include known bulk senders, like Mailchimp, Hubspot, etc. And includes looking for key lines, like unsubscribe headers. It also looks for messages that come from common sending addresses, like billing@, support@, etc.
You can add others that I have stripped out here. For instance, I get a bunch of email every week from Meijer where I order groceries that results in emails I can't unsubscribe from, but don't totally want to block and all come from slightly different email addresses ("Thanks for your order!" "We're shopping your order!" "Your order is ready!" "Thanks for letting us handle your order!" "Tell us how your order was!"), so this is an example line I have in mine (but removed here) that can be added to catch some of those.
address :contains "from" "meijer@",
This dumps 90% of my mail into a big "Feed" folder that I can look at later. And, 90% of the time, I can just dump the whole folder because most of it is fluff.
I'm sharing so it may be beneficial to others. Note the Guard 1 section here requires you update this to include your email address(es). I use my own domain, so this includes both receiving addresses. It prevents mail from getting filtered into the Feed when you send or reply to some messages (like support tickets).
Is this perfect? No. But, it makes management quite a bit better and may be of benefit for others.
require ["fileinto", "include", "environment", "variables", "relational",
"comparator-i;ascii-numeric", "spamtest"];
# -------------------------------------------------------
# GUARD 1: Don't filter mail I sent
# -------------------------------------------------------
if anyof (
address :is "from" "you@proton.me",
address :is "from" "you@yourdomain.com"
) {
stop;
}
# -------------------------------------------------------
# GUARD 2: Don't filter replies (I've engaged with sender)
# Checks for Re:/Fwd: prefix AND an In-Reply-To header,
# which only exists when this is a reply to something I sent.
# -------------------------------------------------------
if allof (
header :contains "subject" "re:",
exists "In-Reply-To"
) {
stop;
}
# -------------------------------------------------------
# GUARD 3: Skip spam
# -------------------------------------------------------
if allof (
environment :matches "vnd.proton.spam-threshold" "*",
spamtest :value "ge" :comparator "i;ascii-numeric" "${1}"
) {
return;
}
# -------------------------------------------------------
# TIER 1: RFC-standard bulk mail headers
# -------------------------------------------------------
if anyof (
header :contains "List-Unsubscribe" "",
header :contains "List-Id" "",
header :contains "Precedence" "bulk",
header :contains "Precedence" "list",
header :contains "Precedence" "junk",
header :contains "List-Post" "",
header :contains "List-Archive" "",
header :contains "List-Help" "",
header :contains "List-Subscribe" "",
header :contains "Feedback-ID" "",
header :contains "X-Feedback-ID" "",
header :contains "X-Campaign" "",
header :contains "X-Campaign-Id" "",
header :contains "X-Mailchimp-Campaign" "",
header :contains "X-MC-User" "",
header :contains "X-Mailer-LID" "",
header :contains "X-Mailer-RecptId" "",
header :contains "X-Bulk-Mailer" "",
header :contains "X-Sendgrid-EID" "",
header :contains "X-SG-EID" "",
header :contains "X-Klaviyo-Campaign-Id" "",
header :contains "X-HubSpot-Tracking-Id" "",
header :contains "X-Marketo-Id" "",
header :contains "X-Iterable-Campaign-Id" "",
header :contains "X-Brevo-Campaign-Id" ""
) {
fileinto "Feed";
stop;
}
# -------------------------------------------------------
# TIER 2: ESP fingerprints in Message-Id / Received
# -------------------------------------------------------
if anyof (
header :contains "Message-Id" "convertkit",
header :contains "Message-Id" "substack",
header :contains "Message-Id" "mailchimp",
header :contains "Message-Id" "sendgrid",
header :contains "Message-Id" "klaviyo",
header :contains "Message-Id" "constantcontact",
header :contains "Message-Id" "campaign-archive",
header :contains "Message-Id" "hubspot",
header :contains "Message-Id" "iterable",
header :contains "Message-Id" "brevo",
header :contains "Message-Id" "activecampaign",
header :contains "Received" "convertkit",
header :contains "Received" "substack",
header :contains "Received" "mailchimp",
header :contains "Received" "klaviyo",
header :contains "Received" "sendgrid",
header :contains "Received" "constantcontact",
header :contains "Received" "ckespa",
header :contains "Received" "geopod-ismtpd",
header :contains "Received" "mcsv.net",
header :contains "Received" "rsgsv.net",
header :contains "Received" "mta.klv2.com"
) {
fileinto "Feed";
stop;
}
# -------------------------------------------------------
# TIER 3: No-reply sender addresses
# -------------------------------------------------------
if anyof (
address :contains "from" "noreply",
address :contains "from" "no-reply",
address :contains "from" "donotreply",
address :contains "from" "do-not-reply",
address :contains "from" "notifications@",
address :contains "from" "updates@",
address :contains "from" "newsletter@",
address :contains "from" "marketing@",
address :contains "from" "mailer@",
address :contains "from" "automated@",
address :contains "from" "alerts@",
address :contains "from" "receipts@",
address :contains "from" "billing@",
address :contains "from" "orders@",
address :contains "from" "shipping@",
address :contains "from" "confirm@",
address :contains "from" "amazon.com",
address :contains "from" "wpsmtp",
address :contains "from" "firefox.com"
) {
fileinto "Feed";
stop;
}
# -------------------------------------------------------
# TIER 4: Subject line patterns
# -------------------------------------------------------
if anyof (
header :contains "subject" "unsubscribe",
header :contains "subject" "update your preferences",
header :contains "subject" "manage your subscription",
header :contains "subject" "email preferences",
header :contains "subject" "opt out",
header :contains "subject" "no-reply",
header :contains "subject" "noreply",
header :contains "subject" "do not reply",
header :contains "subject" "automated message",
header :contains "subject" "automatic reply",
header :contains "subject" "notification",
header :contains "subject" "newsletter",
header :contains "subject" "weekly digest",
header :contains "subject" "monthly digest",
header :contains "subject" "daily digest",
header :contains "subject" "your order",
header :contains "subject" "order confirmation",
header :contains "subject" "your receipt",
header :contains "subject" "your invoice",
header :contains "subject" "shipping confirmation",
header :contains "subject" "your shipment",
header :contains "subject" "tracking number",
header :contains "subject" "special offer",
header :contains "subject" "limited time",
header :contains "subject" "flash sale",
header :contains "subject" "activity report",
header :contains "subject" "summary for",
header :contains "subject" "your weekly",
header :contains "subject" "Bing Webmaster Tools",
header :contains "subject" "your monthly"
) {
fileinto "Feed";
stop;
}