mail: Add checkmail routine
Added script to call for checking mail. Will run individual pre- and post-hooks. (By default, imapfilter and notmuch update.) Simple options can be changed through environment variables: Hooks can be set to different scripts with MBSYNC_PRE and MBSYNC_POST, respectively. Will also run mbsync repeatedly, until it exits without error. By default it will try running it 3 times before giving up, this can be set with MBSYNC_MAX_TRIES. No functional imapfilters have been added yet. mbsync and imapfilter both adhere to the XDG base directory layout (somewhat), checking for their option files in .config/{isync,imapfilter} respectively. Everything still pending changes, the mail eco-system is hard to wrap one's head around.
This commit is contained in:
parent
674b1cfeac
commit
3bbb7d0360
7 changed files with 112 additions and 12 deletions
|
@ -4,7 +4,7 @@
|
|||
gT = :prev-tab<Enter>
|
||||
gt = :next-tab<Enter>
|
||||
<C-t> = :term<Enter>
|
||||
gR = :exec updatemail
|
||||
gR = :exec checkmail<Enter>
|
||||
|
||||
[messages]
|
||||
q = :quit<Enter>
|
||||
|
@ -28,7 +28,7 @@ J = :next-folder<Enter>
|
|||
K = :prev-folder<Enter>
|
||||
<C-p> = :prev-folder<Enter>
|
||||
gi = :cf Inbox<Enter>
|
||||
gm = :cf Important<Enter>
|
||||
g' = :cf Important<Enter>
|
||||
ga = :cf Archive<Enter>
|
||||
gA = :cf All<Enter>
|
||||
gs = :cf Sent<Enter>
|
||||
|
@ -40,6 +40,7 @@ V = :mark -v<Enter>
|
|||
<Enter> = :view<Enter>
|
||||
l = :view<Enter>
|
||||
D = :prompt 'Really delete this message?' 'delete-message'<Enter>
|
||||
i = :modify-labels +inbox -archived -deleted<Enter>
|
||||
d = :modify-labels +deleted -inbox -archived<Enter>
|
||||
a = :modify-labels +archived -deleted -inbox<Enter>
|
||||
A = :modify-labels +archived -deleted -inbox<Enter>
|
||||
|
|
22
mail/.config/imapfilter/adverts-to-dump.lua
Normal file
22
mail/.config/imapfilter/adverts-to-dump.lua
Normal file
|
@ -0,0 +1,22 @@
|
|||
-- -- Gets password from pass
|
||||
status, password = pipe_from('pass show work/email')
|
||||
-- Setup an imap account called work
|
||||
work = IMAP {
|
||||
server = "localhost",
|
||||
port = 1143,
|
||||
username = "USERNAME",
|
||||
password = password
|
||||
-- ssl = auto
|
||||
}
|
||||
|
||||
-- This function takes a table of email addresses and flags messages from them in the inbox.
|
||||
function flagSenders(senders)
|
||||
for _, v in pairs(senders) do
|
||||
messages = work["Inbox"]:contain_from(v)
|
||||
messages:mark_flagged()
|
||||
end
|
||||
end
|
||||
|
||||
flagSenders {
|
||||
"specials@isthereanydeal.com",
|
||||
}
|
18
mail/.config/imapfilter/config.lua
Normal file
18
mail/.config/imapfilter/config.lua
Normal file
|
@ -0,0 +1,18 @@
|
|||
-- 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
|
||||
|
||||
-- set directory for imapfilter files
|
||||
imapfilterdir= os.getenv("HOME") .. '/.config/imapfilter/'
|
||||
|
||||
loadfile(imapfilterdir .. "adverts-to-dump.lua")
|
|
@ -10,27 +10,26 @@ PassCmd "pass show misc/aerc-gmail-app-password | head -n1"
|
|||
#
|
||||
# Use SSL
|
||||
SSLType IMAPS
|
||||
# The following line should work. If get certificate errors, uncomment the two following lines and read the "Troubleshooting" section.
|
||||
CertificateFile /etc/ssl/certs/ca-certificates.crt
|
||||
#CertificateFile ~/.cert/imap.gmail.com.pem
|
||||
#CertificateFile ~/.cert/Equifax_Secure_CA.pem
|
||||
PipelineDepth 50
|
||||
# Throttle simultaneous access to make google happy
|
||||
PipelineDepth 60
|
||||
|
||||
IMAPStore gmail-remote
|
||||
Account gmail
|
||||
|
||||
MaildirStore gmail-local
|
||||
MaildirStore mail-local
|
||||
Subfolders Verbatim
|
||||
# The trailing "/" is important
|
||||
Path ~/documents/mail/
|
||||
Inbox ~/documents/mail/Inbox
|
||||
# define generous maximum size to store locally
|
||||
MaxSize 50M
|
||||
|
||||
Channel gmail
|
||||
Channel gmail-general
|
||||
Far :gmail-remote:
|
||||
Near :gmail-local:
|
||||
Near :mail-local:
|
||||
# Exclude everything under the internal [Gmail] folder, except the interesting folders
|
||||
Patterns * ![Gmail]* "[Gmail]/Sent Mail" "[Gmail]/Starred" "[Gmail]/All Mail"
|
||||
# Or include everything
|
||||
Patterns * ![Gmail]* "[Gmail]/Sent Mail" "[Gmail]/Starred" "[Gmail]/All Mail" "[Gmail]/Trash"
|
||||
#Patterns *
|
||||
# Automatically create missing mailboxes, both locally and on the server
|
||||
Create Both
|
||||
|
|
3
mail/.config/sh/alias.d/imapfilter-xdg.sh
Normal file
3
mail/.config/sh/alias.d/imapfilter-xdg.sh
Normal file
|
@ -0,0 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
alias imapfilter='imapfilter -c \"${XDG_CONFIG_HOME:-$HOME/.config}/imapfilter/config.lua\"'
|
|
@ -1,3 +1,3 @@
|
|||
#!/bin/sh
|
||||
|
||||
alias mbsync='mbsync -c $XDG_CONFIG_HOME/isync/mbsyncrc'
|
||||
alias mbsync='mbsync -c ${XDG_CONFIG_HOME:-$HOME/.config}/isync/mbsyncrc'
|
||||
|
|
57
mail/.local/bin/checkmail
Executable file
57
mail/.local/bin/checkmail
Executable file
|
@ -0,0 +1,57 @@
|
|||
#!/usr/bin/env sh
|
||||
# runs mbsync, with pre-hooks and post-hooks
|
||||
# by default, first runs imapfilter
|
||||
# and after indexes with notmuch
|
||||
#
|
||||
# To run without invoking any hooks or retry attempts,
|
||||
# run `checkmail raw`
|
||||
# this will simply invoke a single isync run on all
|
||||
# boxes with the correct config file set.
|
||||
#
|
||||
# for more advanced, per-account/channel hooks, see
|
||||
# https://sourceforge.net/p/isync/feature-requests/8/
|
||||
|
||||
MBSYNC_MAX_TRIES=3
|
||||
MBSYNC_PRE="imapfilter"
|
||||
MBSYNC_POST="notmuch new"
|
||||
|
||||
success="false"
|
||||
tries=0
|
||||
|
||||
# fail the routine and optionally send a message why
|
||||
fail() {
|
||||
[ -n "$1" ] && echo "$1"
|
||||
exit 1
|
||||
}
|
||||
|
||||
checkmail() {
|
||||
mbsync -c "$XDG_CONFIG_HOME/isync/mbsyncrc" -a
|
||||
}
|
||||
|
||||
checkonline() {
|
||||
# Ping 1.1.1.1 to confirm that we are on the internet
|
||||
ping -c 1 "1.1.1.1" >/dev/null 2>/dev/null || fail "checkmail can not access the internet."
|
||||
}
|
||||
|
||||
# Routine start
|
||||
|
||||
# check
|
||||
|
||||
# skip any retries and pre/post hooks, just run mbsync
|
||||
if [ "$1" = "raw" ]; then
|
||||
checkmail
|
||||
exit
|
||||
fi
|
||||
|
||||
$MBSYNC_PRE
|
||||
while true; do
|
||||
if checkmail; then
|
||||
success="true"
|
||||
fi
|
||||
|
||||
if [ $success = "true" ] || [ $tries -gt $MBSYNC_MAX_TRIES ]; then
|
||||
fail "Maximum retries reached unsuccessfully."
|
||||
fi
|
||||
tries=$((tries + 1))
|
||||
done
|
||||
$MBSYNC_POST
|
Loading…
Reference in a new issue