options.certificates = false options.create = true options.subscribe = true local accounts = dofile(os.getenv('HOME') .. '/.config/imapfilter/accounts.lua') for _, credentials in ipairs(accounts) do local password = os.getenv(credentials.password_env) assert(password and password ~= '', 'Set ' .. credentials.password_env .. ' in /var/secrets/imapfilter.env first') local account = IMAP { server = credentials.server, port = 993, ssl = 'auto', username = credentials.username, password = password, } local inbox = account.INBOX local needs_attention = inbox:contain_subject('suspicious activity') + (inbox:contain_subject('password') * inbox:contain_subject('reset')) + inbox:contain_subject('verification code') local notifications = (inbox:contain_from('noreply@wise.com') + inbox:contain_from('service@paypal.co.uk') + inbox:contain_from('noreply@steampowered.com') + inbox:contain_from('auto-confirm@info.thetrainline.com') + inbox:contain_subject('signed in') + inbox:contain_subject('new sign-in') + inbox:contain_subject('new sign in') + inbox:contain_subject('new login') + inbox:contain_subject('new device')) - needs_attention print(credentials.username .. ': ' .. #notifications .. ' messages match notification rules') assert(notifications:move_messages(account['notifications']), 'Failed to move notifications for ' .. credentials.username) local automated = (inbox:contain_field('List-ID', '') + inbox:contain_field('List-Unsubscribe', '') + inbox:contain_field('Precedence', ''):match_field('Precedence', [[(?i)^[ \t]*(?:bulk|list|junk)\b]]) + inbox:contain_from('no-reply@revolut.com')) - needs_attention print(credentials.username .. ': ' .. #automated .. ' messages match automated mail rules') assert(automated:move_messages(account['automated mail']), 'Failed to move mail for ' .. credentials.username) end