office: Rename mail module to office module
Reflecting the somewhat expanding scope of the module, renamed it to office. Still keeps the old files and setups but also got a new README file.
This commit is contained in:
parent
593628b81d
commit
03684ce29f
27 changed files with 28 additions and 15 deletions
15
office/.config/imapfilter/accounts.lua
Normal file
15
office/.config/imapfilter/accounts.lua
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
local accounts = {}
|
||||
|
||||
local status, gmailuser = pipe_from(
|
||||
'gpg2 --decrypt --no-tty --quiet --no-verbose --for-your-eyes-only --pinentry-mode ask ~/.local/share/pass/misc/aerc-gmail-app-password.gpg | grep username | cut -d: -f2')
|
||||
local status, gmailpass = pipe_from(
|
||||
'gpg2 --decrypt --no-tty --quiet --no-verbose --for-your-eyes-only --pinentry-mode ask ~/.local/share/pass/misc/aerc-gmail-app-password.gpg | head -n1')
|
||||
-- Setup an imap account called gmail
|
||||
accounts.gmail = IMAP {
|
||||
server = "imap.gmail.com",
|
||||
username = gmailuser,
|
||||
password = gmailpass,
|
||||
ssl = "auto"
|
||||
}
|
||||
|
||||
return accounts
|
||||
86
office/.config/imapfilter/config.lua
Normal file
86
office/.config/imapfilter/config.lua
Normal file
|
|
@ -0,0 +1,86 @@
|
|||
-- According to the IMAP specification, when trying to write a message
|
||||
-- to a non-existent mailbox, the server must send a hint to the client,
|
||||
-- whether it should create the mailbox and try again or not. However
|
||||
-- some IMAP servers don't follow the specification and don't send the
|
||||
-- correct response code to the client. By enabling this option the
|
||||
-- client tries to create the mailbox, despite of the server's response.
|
||||
-- This variable takes a boolean as a value. Default is “false”.
|
||||
options.create = true
|
||||
-- By enabling this option new mailboxes that were automatically created,
|
||||
-- get auto subscribed
|
||||
options.subscribe = true
|
||||
-- How long to wait for servers response.
|
||||
options.timeout = 120
|
||||
|
||||
-- whether to enter IDLE mode and conintuously check
|
||||
-- for new incoming mail to filter
|
||||
CONTINUOUS = false
|
||||
-- time to wait for next synchronization
|
||||
-- only used in case server does not support IDLE mode
|
||||
UPDATE_TIME = 120
|
||||
|
||||
-- implement simple wait function in case server does not support IDLE mode
|
||||
function sleep(n) os.execute("sleep " .. tonumber(n)) end
|
||||
|
||||
-- will set filters to be grabbed from XDG-compliant filter directory
|
||||
-- can be overridden with env var IMAPFILTER_FILTERDIR
|
||||
function getConfigDir()
|
||||
-- -- set directory for imapfilter files
|
||||
local configdir
|
||||
if os.getenv("IMAPFILTER_CONFIGDIR") then
|
||||
configdir = os.getenv("IMAPFILTER_CONFIGDIR")
|
||||
elseif os.getenv("XDG_CONFIG_HOME") then
|
||||
configdir = os.getenv("XDG_CONFIG_HOME") .. "/imapfilter"
|
||||
else
|
||||
configdir = os.getenv("HOME") .. "/.config/imapfilter"
|
||||
end
|
||||
return configdir
|
||||
end
|
||||
|
||||
-- will set filters to be grabbed from XDG-compliant filter directory
|
||||
-- can be overridden with env var IMAPFILTER_FILTERDIR
|
||||
function getFilterDir()
|
||||
-- -- set directory for imapfilter files
|
||||
local imapfilterdir
|
||||
if os.getenv("IMAPFILTER_FILTERDIR") then
|
||||
imapfilterdir = os.getenv("IMAPFILTER_FILTERDIR")
|
||||
else
|
||||
imapfilterdir = configDir .. "/filters"
|
||||
end
|
||||
return imapfilterdir
|
||||
end
|
||||
|
||||
-- dirlist, from https://stackoverflow.com/a/25266573
|
||||
function applyFilters(dir)
|
||||
local p = io.popen('find "' .. dir .. '" -type f -name "*.lua"') -- Open directory look for files, save data in p. By giving '-type f' as parameter, it returns all files.
|
||||
for file in p:lines() do -- Loop through all files
|
||||
loadfile(file)()
|
||||
end
|
||||
end
|
||||
|
||||
-- create global variable containing the configuration files
|
||||
configDir = getConfigDir()
|
||||
assert(configDir,
|
||||
"No configuration directory found. Ensure " .. os.getenv("HOME") ..
|
||||
"/.config/imapfilter exists.")
|
||||
|
||||
-- create global variable containing account access
|
||||
accounts = loadfile(configDir .. "/accounts.lua")()
|
||||
assert(accounts,
|
||||
"No accounts configured. Ensure accounts.lua exists and returns a table of accounts.")
|
||||
|
||||
-- immediately act on the filters once
|
||||
applyFilters(getFilterDir())
|
||||
|
||||
-- continuously watch for mail if needed
|
||||
while CONTINUOUS == true do
|
||||
local has_idle = accounts.gmail['Inbox']:enter_idle()
|
||||
applyFilters(getFilterDir())
|
||||
|
||||
if has_idle == false then
|
||||
print(
|
||||
"Server does not support idle, application will be polling again in " ..
|
||||
UPDATE_TIME .. "minutes.")
|
||||
sleep(UPDATE_TIME)
|
||||
end
|
||||
end
|
||||
40
office/.config/imapfilter/filters/rollup-dump.lua
Normal file
40
office/.config/imapfilter/filters/rollup-dump.lua
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
function sendToFolder(folderFrom, folderTo, senders)
|
||||
local messages = folderFrom:select_all()
|
||||
for _, sender in pairs(senders) do
|
||||
local filtered = messages:contain_from(sender)
|
||||
filtered:mark_seen()
|
||||
filtered:move_messages(folderTo)
|
||||
end
|
||||
end
|
||||
|
||||
-- will set filters to be grabbed from XDG-compliant filter directory
|
||||
-- can be overridden with env var IMAPFILTER_ROLLUPFILE
|
||||
function getRollupFile(fname)
|
||||
local f
|
||||
local fname = fname or "rollup.txt"
|
||||
if os.getenv("IMAPFILTER_ROLLUPFILE") then
|
||||
f = os.getenv("IMAPFILTER_ROLLUPFILE")
|
||||
elseif os.getenv("XDG_DATA_HOME") then
|
||||
f = os.getenv("XDG_DATA_HOME") .. "/imapfilter/" .. fname
|
||||
else
|
||||
f = os.getenv("HOME") .. "/.local/share/imapfilter/" .. fname
|
||||
end
|
||||
return f
|
||||
end
|
||||
|
||||
function getSenderList(rollupfile)
|
||||
local rollupSenders = {}
|
||||
|
||||
local file = io.open(rollupfile)
|
||||
if file then
|
||||
for line in file:lines() do table.insert(rollupSenders, line) end
|
||||
else
|
||||
print(
|
||||
"ERROR: rollup did not find rollup.txt file containing mail addresses at " ..
|
||||
rollupfile or "")
|
||||
end
|
||||
return rollupSenders
|
||||
end
|
||||
|
||||
sendToFolder(accounts.gmail["Inbox"], accounts.gmail["Dump"],
|
||||
getSenderList(getRollupFile()))
|
||||
Loading…
Add table
Add a link
Reference in a new issue