Fix (automatic) syncing of email

- Load the necessary environment variables from ‘gnome-keyring-daemon’ when
  loading fish.
- Don’t sync the Archive directory from ryuslash.org, it’s too big and mbsync
  seems to get really confused about it.
- Disable old email accounts from syncing with mbsync.
- Fix the ‘get-mail-password’ and ‘set-mail-password’ scripts.
  - Use ‘secretstorage’ instead of ‘keyring’, this appears to be newer and
    easier to use.
This commit is contained in:
Tom Willemse 2019-08-14 23:45:13 -07:00
parent 587bcae5e6
commit 946b7425de
4 changed files with 76 additions and 74 deletions

View file

@ -9,3 +9,7 @@ set -x EDITOR emacsclient
set -x DOTNET_CLI_TELEMETRY_OPTOUT true
kitty + complete setup fish | source
if test -n "$DESKTOP_SESSION"
set (gnome-keyring-daemon --start | string split "=")
end

View file

@ -18,7 +18,7 @@ Channel ryuslash
Master :ryuslash-remote:
Slave :ryuslash-local:
# Don't synchronize lda-dupes, it causes trouble.
Patterns * !dovecot/lda-dupes
Patterns * !Archive !dovecot/lda-dupes
Create Both
SyncState *
@ -62,62 +62,62 @@ Group gmail
Channel gmail-inbox
Channel gmail-sent
## Picturefix:
IMAPAccount picturefix
Host imap.gmail.com
User tom@picturefix.nl
PassCmd "~/usr/bin/get-mail-password picturefix"
SSLType IMAPS
CertificateFile /etc/ssl/certs/ca-certificates.crt
# ## Picturefix:
# IMAPAccount picturefix
# Host imap.gmail.com
# User tom@picturefix.nl
# PassCmd "~/usr/bin/get-mail-password picturefix"
# SSLType IMAPS
# CertificateFile /etc/ssl/certs/ca-certificates.crt
IMAPStore picturefix-remote
Account picturefix
# IMAPStore picturefix-remote
# Account picturefix
MaildirStore picturefix-local
Path ~/documents/mail/picturefix
Inbox ~/documents/mail/picturefix/inbox
SubFolders Legacy
# MaildirStore picturefix-local
# Path ~/documents/mail/picturefix
# Inbox ~/documents/mail/picturefix/inbox
# SubFolders Legacy
# Synchronize only the gmail INBOX mailbox.
Channel picturefix-inbox
Master :picturefix-remote:
Slave :picturefix-local:
Patterns INBOX
Create Both
SyncState *
# # Synchronize only the gmail INBOX mailbox.
# Channel picturefix-inbox
# Master :picturefix-remote:
# Slave :picturefix-local:
# Patterns INBOX
# Create Both
# SyncState *
# Synchronize only the sent mailbox.
Channel picturefix-sent
Master :picturefix-remote:"[Gmail]/Verzonden berichten"
Slave :picturefix-local:sent
Create Both
SyncState *
# # Synchronize only the sent mailbox.
# Channel picturefix-sent
# Master :picturefix-remote:"[Gmail]/Verzonden berichten"
# Slave :picturefix-local:sent
# Create Both
# SyncState *
# Group the picturefix channels together so that synching with the
# command-line is easier.
Group picturefix
Channel picturefix-inbox
Channel picturefix-sent
# # Group the picturefix channels together so that synching with the
# # command-line is easier.
# Group picturefix
# Channel picturefix-inbox
# Channel picturefix-sent
## Ninthfloor:
IMAPAccount ninthfloor
Host mail.ninthfloor.org
User ryuslash
PassCmd "~/usr/bin/get-mail-password ninthfloor"
SSLType STARTTLS
CertificateFile /etc/ssl/certs/ca-certificates.crt
# ## Ninthfloor:
# IMAPAccount ninthfloor
# Host mail.ninthfloor.org
# User ryuslash
# PassCmd "~/usr/bin/get-mail-password ninthfloor"
# SSLType STARTTLS
# CertificateFile /etc/ssl/certs/ca-certificates.crt
IMAPStore ninthfloor-remote
Account ninthfloor
# IMAPStore ninthfloor-remote
# Account ninthfloor
MaildirStore ninthfloor-local
Path ~/documents/mail/ninthfloor/
Inbox ~/documents/mail/ninthfloor/inbox
SubFolders Legacy
# MaildirStore ninthfloor-local
# Path ~/documents/mail/ninthfloor/
# Inbox ~/documents/mail/ninthfloor/inbox
# SubFolders Legacy
Channel ninthfloor
Master :ninthfloor-remote:
Slave :ninthfloor-local:
Patterns *
Create Both
SyncState *
# Channel ninthfloor
# Master :ninthfloor-remote:
# Slave :ninthfloor-local:
# Patterns *
# Create Both
# SyncState *

View file

@ -1,15 +1,12 @@
#!/usr/bin/python3
import gi
gi.require_version('GnomeKeyring', '1.0')
import logging
logger = logging.getLogger('keyring')
logger.addHandler(logging.StreamHandler())
import keyring
import sys
import secretstorage
print(keyring.get_password('offlineimap', sys.argv[1]))
connection = secretstorage.dbus_init()
collection = secretstorage.get_collection_by_alias(connection, "login")
for foo in collection.search_items(
{"application": "mbsync", "account": sys.argv[1]}
):
print(foo.get_secret().decode())

View file

@ -1,16 +1,17 @@
#!/usr/bin/python3
import gi
gi.require_version('GnomeKeyring', '1.0')
import logging
logger = logging.getLogger('keyring')
logger.addHandler(logging.StreamHandler())
import keyring
import sys
import getpass
from getpass import getpass
import secretstorage
keyring.set_password('offlineimap', sys.argv[1], getpass.getpass())
connection = secretstorage.dbus_init()
collection = secretstorage.get_collection_by_alias(connection, "login")
attributes = {"application": "mbsync", "account": sys.argv[1]}
collection.create_item(
"Password for '{}' on '{}'".format(
attributes["account"], attributes["application"]
),
attributes,
getpass().encode(),
)