Compare commits

...

1 Commits
master ... mail

Author SHA1 Message Date
Gwen 9334e39d30
Use offlineimap to sync emails 2022-07-19 19:13:23 -04:00
3 changed files with 80 additions and 4 deletions

39
mail/.offlineimap.py Normal file
View File

@ -0,0 +1,39 @@
# GPG password extraction adapted from stackexchange
# https://unix.stackexchange.com/questions/44214
import os, subprocess, re
def decrypt(path):
args = ["gpg", "--use-agent", "--quiet", "--batch", "-d", path]
try:
return subprocess.check_output(args).strip()
except BaseException as e:
print("[ERROR] %s" % e)
return ""
# Extract account information stored in key/value paris
def get_account(acct, key):
acct = os.path.basename(acct)
path = os.path.expanduser("~/.passwd/%s.gpg" % str(acct))
o = decrypt(path).splitlines()
values = {k.strip():v.strip() for k, v in (l.split('=') for l in o)}
return values[key]
default_folders = ['INBOX', 'Archive', 'Sent', 'Trash']
def folder_filter(name):
# Mail provider has a folder with my mail folders called `Folders`.
# Anything inside `Folders` should be synced: match the first
# part of the path to allow them, otherwise only sync the inbox
# and other default folders.
return name[:7] == "Folders" or name in default_folders
def folder_rename(name):
# Nested folders have `Folders.` as a prefix to indicate nesting.
# Remove the prefix so names match, unless doing so would clash
# with the default folders
stripped = re.sub('^Folders.', '', name);
if stripped not in default_folders:
return stripped
else:
return name

37
mail/.offlineimaprc Normal file
View File

@ -0,0 +1,37 @@
[general]
accounts = main
pythonfile = ~/.offlineimap.py
[Account main]
localrepository = main-local
remoterepository = main-remote
# full refresh, in min
autorefresh = 0.2
# quick refreshs between each full refresh
quick = 10
# update notmuch index after sync
postsynchook = notmuch new
[Repository main-local]
type = Maildir
localfolders = ~/.mail
# delete remote mails that were deleted locally
sync_deletes = yes
[Repository main-remote]
type = IMAP
remoteport = 1143
remotehost = 127.0.0.1
remoteusereval = get_account('main-email', 'user')
remotepasseval = get_account('main-email', 'password')
keepalive = 60
holdconnectionopen = yes
# delete local mails that were deleted on the remote server
expunge = yes
# sync only these folders
folderfilter = folder_filter
nametrans = folder_rename
# SSL
ssl = no
starttls = yes
sslcacertfile = ~/.mailcert.pem

View File

@ -40,9 +40,9 @@ ln -sbv "$DIR/git/.gitattributes_global" ~
# e-mail
echo -e "\n\t${BOLD}email...${NC}\n"
ln -sbv "$DIR/mail/.mbsyncrc" ~
ln -sbv "$DIR/mail/.msmtprc" ~
ln -sbv "$DIR/mail/.offlineimaprc" ~
ln -sbv "$DIR/mail/.offlineimap.py" ~
ln -sbv "$DIR/mail/.notmuch-config" ~
ln -sbv "$DIR/mail/.afew-config" ~/.config/afew/config
ln -sbv "$DIR/service/checkmail.service" ~/.config/systemd/user/
ln -sbv "$DIR/service/checkmail.timer" ~/.config/systemd/user/
ln -sbv "$DIR/mail/checkmail.service" ~/.config/systemd/user/
ln -sbv "$DIR/mail/checkmail.timer" ~/.config/systemd/user/