commit 8a58bb9264c227ee09accd1e1af333d2c04e5d2e Author: Artlef Date: Sat Jun 30 13:56:53 2018 +0000 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..c218f47 --- /dev/null +++ b/README.md @@ -0,0 +1,12 @@ +# MailConfig + +Example config files for managing email on a Linux system. + +Software to install: +==================== + +- Mutt as a mail client. +- OfflineImap and Getmail to retrieve mail on disk. +- Msmtp to send mail. +- abook for managing addresses. +- gpg for password storage and mail encryption. diff --git a/getmail/getmailrc b/getmail/getmailrc new file mode 100644 index 0000000..9551653 --- /dev/null +++ b/getmail/getmailrc @@ -0,0 +1,15 @@ +[retriever] +type = SimplePOP3SSLRetriever +server = pop.example.com +username = username@example.com + +# passwd.gpg contains the password. +password_command = ("/usr/bin/gpg","-dq","/home/myuser/.getmail/passwd.gpg") +port = 995 + +[destination] +type = Maildir +path = ~/mail/ + +[options] +read_all = False diff --git a/msmtprc b/msmtprc new file mode 100644 index 0000000..e75071f --- /dev/null +++ b/msmtprc @@ -0,0 +1,27 @@ +# Set default values for all following accounts. +defaults +auth on +tls on +tls_trust_file /etc/ssl/certs/ca-certificates.crt +logfile ~/.msmtp.log + +# first example +account example +host smtp.example.com +port 465 +from myuser@example.com +user myuser +# passwd.gpg contains the password for the first account. +passwordeval "gpg -dq ~/.getmail/passwd.gpg" +tls_starttls off + +# Gmail +account gmail +host smtp.gmail.com +port 587 +from gmailuser@gmail.com +user gmailuser +passwordeval "gpg -dq ~/.offlineimappass.gpg" + +# Set a default account +account default : myuser diff --git a/mutt/colors.linux b/mutt/colors.linux new file mode 100644 index 0000000..8b361cb --- /dev/null +++ b/mutt/colors.linux @@ -0,0 +1,23 @@ +# -*-muttrc-*- + +# Palette for use with the Linux console. Black background. + +color hdrdefault brightblue black +color quoted brightblack black +color signature brightblue black +color attachment red black +color prompt brightmagenta black +color message brightblue black +color error brightred black +color indicator black brightblue +color status white brightblack +color tree white black +color normal white black +color markers brightblue black +color search white black +color tilde brightmagenta black +color index blue black ~F +color index brightblue black "~N|~O" + +# color body brightwhite black '\*+[^*]+\*+' +# color body brightwhite black '_+[^_]+_+' diff --git a/mutt/gmail b/mutt/gmail new file mode 100644 index 0000000..8ddd840 --- /dev/null +++ b/mutt/gmail @@ -0,0 +1,15 @@ +## Receive options. +source "~/.mutt/mailboxes" +set mbox_type=Maildir +set folder=~/ImapMail/gmail +set spoolfile="+INBOX" +set header_cache=~/.cache/mutt +set record = +Sent\ Items +set postponed = "+/Drafts" + +## Send options. +set sendmail="/usr/bin/msmtp" +set use_from=yes +set realname="Real Name" +set from=gmailuser@gmail.com +set envelope_from=yes diff --git a/mutt/gpg.rc b/mutt/gpg.rc new file mode 100644 index 0000000..452eed2 --- /dev/null +++ b/mutt/gpg.rc @@ -0,0 +1,110 @@ +# -*-muttrc-*- +# +# Command formats for gpg. +# +# Some of the older commented-out versions of the commands use gpg-2comp from: +# http://70t.de/download/gpg-2comp.tar.gz +# +# %p The empty string when no passphrase is needed, +# the string "PGPPASSFD=0" if one is needed. +# +# This is mostly used in conditional % sequences. +# +# %f Most PGP commands operate on a single file or a file +# containing a message. %f expands to this file's name. +# +# %s When verifying signatures, there is another temporary file +# containing the detached signature. %s expands to this +# file's name. +# +# %a In "signing" contexts, this expands to the value of the +# configuration variable $pgp_sign_as, if set, otherwise +# $pgp_default_key. You probably need to +# use this within a conditional % sequence. +# +# %r In many contexts, mutt passes key IDs to pgp. %r expands to +# a list of key IDs. + + +# Section A: Key Management + +# The default key for encryption (used by $pgp_self_encrypt and +# $postpone_encrypt). +# +# It will also be used for signing unless $pgp_sign_as is set to a +# key. +# +# Unless your key does not have encryption capability, uncomment this +# line and replace the keyid with your own. +# +# set pgp_default_key="0x12345678" + +# If you have a separate signing key, or your key _only_ has signing +# capability, uncomment this line and replace the keyid with your +# signing keyid. +# +# set pgp_sign_as="0x87654321" + + +# Section B: Commands + +# Note that we explicitly set the comment armor header since GnuPG, when used +# in some localiaztion environments, generates 8bit data in that header, thereby +# breaking PGP/MIME. + +# decode application/pgp +set pgp_decode_command="gpg --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f" + +# verify a pgp/mime signature +set pgp_verify_command="gpg --status-fd=2 --no-verbose --quiet --batch --output - --verify %s %f" + +# decrypt a pgp/mime attachment +set pgp_decrypt_command="gpg --status-fd=2 %?p?--passphrase-fd 0? --no-verbose --quiet --batch --output - %f" + +# create a pgp/mime signed attachment +# set pgp_sign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f" +set pgp_sign_command="gpg --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --detach-sign --textmode %?a?-u %a? %f" + +# create a application/pgp signed (old-style) message +# set pgp_clearsign_command="gpg-2comp --comment '' --no-verbose --batch --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f" +set pgp_clearsign_command="gpg --no-verbose --batch --quiet --output - %?p?--passphrase-fd 0? --armor --textmode --clearsign %?a?-u %a? %f" + +# create a pgp/mime encrypted attachment +# set pgp_encrypt_only_command="pgpewrap gpg-2comp -v --batch --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" +set pgp_encrypt_only_command="pgpewrap gpg --batch --quiet --no-verbose --output - --encrypt --textmode --armor --always-trust -- -r %r -- %f" + +# create a pgp/mime encrypted and signed attachment +# set pgp_encrypt_sign_command="pgpewrap gpg-2comp %?p?--passphrase-fd 0? -v --batch --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" +set pgp_encrypt_sign_command="pgpewrap gpg %?p?--passphrase-fd 0? --batch --quiet --no-verbose --textmode --output - --encrypt --sign %?a?-u %a? --armor --always-trust -- -r %r -- %f" + +# import a key into the public key ring +set pgp_import_command="gpg --no-verbose --import %f" + +# export a key from the public key ring +set pgp_export_command="gpg --no-verbose --export --armor %r" + +# verify a key +set pgp_verify_key_command="gpg --verbose --batch --fingerprint --check-sigs %r" + +# read in the public key ring +set pgp_list_pubring_command="gpg --no-verbose --batch --quiet --with-colons --with-fingerprint --with-fingerprint --list-keys %r" + +# read in the secret key ring +set pgp_list_secring_command="gpg --no-verbose --batch --quiet --with-colons --with-fingerprint --with-fingerprint --list-secret-keys %r" + +# fetch keys +# set pgp_getkeys_command="pkspxycwrap %r" + +# pattern for good signature - may need to be adapted to locale! + +# set pgp_good_sign="^gpgv?: Good signature from " + +# OK, here's a version which uses gnupg's message catalog: +# set pgp_good_sign="`gettext -d gnupg -s 'Good signature from "' | tr -d '"'`" + +# This version uses --status-fd messages +set pgp_good_sign="^\\[GNUPG:\\] GOODSIG" + +# pattern to verify a decryption occurred +set pgp_decryption_okay="^\\[GNUPG:\\] DECRYPTION_OKAY" + diff --git a/mutt/mailcap b/mutt/mailcap new file mode 100644 index 0000000..46b5f7f --- /dev/null +++ b/mutt/mailcap @@ -0,0 +1,10 @@ +text/html; lynx -assume_charset=%{charset} -display_charset=utf-8 -dump %s; nametemplate=%s.html; copiousoutput +application/pdf; mupdf %s &>/dev/null +image/JPG; feh -F -Z %s &>/dev/null +image/jpeg; feh -F -Z %s &>/dev/null +image/gif; feh -F -Z %s &>/dev/null +image/png; feh -F -Z %s &>/dev/null +application/vnd.oasis.opendocument.text; libreoffice %s &>/dev/null +application/vnd.ms-excel; libreoffice %s &>/dev/null +application/vnd.oasis.opendocument.spreadsheet; libreoffice %s &>/dev/null +application/msword; libreoffice %s &>/dev/null diff --git a/mutt/perso b/mutt/perso new file mode 100644 index 0000000..c4ae2c1 --- /dev/null +++ b/mutt/perso @@ -0,0 +1,15 @@ +#my_pop_pass +set mbox_type=Maildir +set folder=~/mail +set spoolfile=+/ +set header_cache=~/.cache/mutt +set record = ~/sent +set my_user=myuser + +set realname = 'Real Name' + +## Send options. +set sendmail="/usr/bin/msmtp" +set use_from=yes +set from=myuser@example.com +set envelope_from=yes diff --git a/muttrc b/muttrc new file mode 100644 index 0000000..473c538 --- /dev/null +++ b/muttrc @@ -0,0 +1,68 @@ +#Editor: +set editor=`echo \$EDITOR` + +#vim keybinding +bind pager j next-line +bind pager k previous-line +bind attach,index,pager \CD next-page +bind attach,index,pager \CU previous-page +bind pager g top +bind pager G bottom +bind attach,index g first-entry +bind attach,index G last-entry + +#mailcap +set mailcap_path = ~/.mutt/mailcap +auto_view text/html + +#encryption +source ~/.mutt/gpg.rc + +# Allow Mutt to open a new IMAP connection automatically. +unset imap_passive + +# Keep the IMAP connection alive by polling intermittently (time in seconds). +set imap_keepalive = 300 + +# How often to check for new mail (time in seconds). +set mail_check = 60 + + +set header_cache = "~/.cache/mutt" +set imap_check_subscribed + +## gmail +source "~/.mutt/gmail" +folder-hook *gmailuser@gmail.com/ 'source ~/.mutt/gmail' + +## perso +source "~/.mutt/perso" +# Here we use the $folder variable that has just been set in the sourced file. +# We must set it right now otherwise the 'folder' variable will change in the next sourced file. +folder-hook $folder 'source ~/.mutt/perso' + + +macro index,pager 'source ~/.mutt/perso!' +macro index,pager 'source ~/.mutt/gmail!' + +#colors +source ~/.mutt/colors.linux + +#automate change directory +macro index 'c' '?^K=' + +macro index \cb "\ +:set my_tmp_pipe_decode=\$pipe_decode\n\ +:set pipe_decode\n\ +|urlview\n\ +:set pipe_decode=\$my_tmp_pipe_decode\n\ +:unset my_tmp_pipe_decode\n" \ +'call urlview to extract URLs out of a message' + +#contact management with abook +set query_command= "abook --mutt-query '%s'" +macro index,pager a "abook --add-email-quiet" "Add this sender to Abook" +bind editor complete-query + +#speed up folders switch +set sleep_time = 0 diff --git a/offlineimap.py b/offlineimap.py new file mode 100644 index 0000000..57079ce --- /dev/null +++ b/offlineimap.py @@ -0,0 +1,5 @@ +#! /usr/bin/env python2 +from subprocess import check_output + +def get_pass(): + return check_output("gpg -dq ~/.offlineimappass.gpg", shell=True).strip("\n") diff --git a/offlineimaprc b/offlineimaprc new file mode 100644 index 0000000..8e0a225 --- /dev/null +++ b/offlineimaprc @@ -0,0 +1,39 @@ +# Sample minimal config file. Copy this to ~/.offlineimaprc and edit to +# get started fast. + +[general] +accounts = mygmail +# Path to file with arbitrary Python code to be loaded +pythonfile = ~/.offlineimap.py +# Controls how many accounts may be synced simultaneously +maxsyncaccounts = 1 + +[Account mygmail] +localrepository = mygmailLocal +remoterepository = mygmailRemote +autorefresh = 0.5 +# Quick-syncs do not update if the only changes were to IMAP flags. +# autorefresh=0.5 together with quick=10 yields +# 10 quick refreshes between each full refresh, with 0.5 minutes between every +# refresh, regardless of type. +quick = 10 + +[Repository mygmailLocal] +type = GmailMaildir +localfolders = ~/ImapMail/mygmail + +[Repository mygmailRemote] +type = Gmail +remoteuser = gmailuser@gmail.com +remotepasseval = get_pass() +# Necessary as of OfflineIMAP 6.5.4 +sslcacertfile = /etc/ssl/certs/ca-certificates.crt + +# Generate config file for mutt +[mbnames] +enabled = yes +filename = ~/.mutt/mailboxes +header = "mailboxes " +peritem = "+%(accountname)s/%(foldername)s" +sep = " " +footer = "\n"