Sorting my emails
I started subscribing to a few mailing lists, and since that meant I might actually be using my email for something, I thought it'd be good to figure out a way to filter my emails into different folders so they don't get too gross and cluttered. After looking around I found imapfilter, which turned out to be very easy to use. You can write a lua script that'll scan through your emails and do things to them like deleting them or moving them to different folders. I wrote a few utility functions and made a nice-loooking configuration script with it:
function convert(map)
local res = {}
for mbox, contents in pairs(map) do
if type(mbox) == "string" then
for index, pattern in ipairs(contents) do
res[pattern] = mbox
end
for k, v in pairs(convert(contents)) do
res[k] = mbox .. "/" .. v
end
end
end
return res
end
function filter_by_originator(account, map)
map = convert(map)
for origin, mailbox in pairs(map) do
results = account.INBOX:match_field("from", origin) +
account.INBOX:match_field("sender", origin) +
account.INBOX:match_field("reply-to", origin)
results:move_messages(account[mailbox])
end
end
function do_luna(account)
filter_by_originator(account, {
junk = {
"News@InsideApple.Apple.com",
"no-reply@email.patreon.com",
"no-reply@mail.goodreads.com",
"no-reply@substack.com",
"no-reply@twitch.tv",
"noreply@updates.itch.io",
"team@info.digitalocean.com",
},
pr = {
"NoReply.ODD@dhl.com",
"account@twitch.tv",
"appleid@id.apple.com",
"bingo@patreon.com",
"donotreply_odd@dhl.com",
"expiry@letsencrypt.org",
"no-reply@patreon.com",
"noreply@bandcamp.com",
"noreply@github.com",
"renewals@namecheap.com",
"support@buyee.jp",
"support@digitalocean.com",
"support@itch.io",
"support@namecheap.com",
"support@porkbun.com",
},
info = {
"gitlab@gitlab.freedesktop.org",
"no-reply@disroot.org",
},
news = {
"erininthemorn@substack.com",
},
lists = {
lua = { ".*@lists.lua.org" },
hare_users = { ".*hare-users@lists.sr.ht" },
hare_announce = { ".*hare-announce@lists.sr.ht" },
}
})
end
do_luna(IMAP {
server = "disroot.org",
username = "lunacb",
password = ":3",
port = 993,
ssl = "auto",
})