cd / ; apropos ;

Encrypt all incoming mails #

The script below will encrypt all incoming emails with gpg, as long as you own your public key (of course you do).

It just require mblaze

https://github.com/leahneukirchen/mblaze

First, set up a .forward file on your server home:

echo "|/usr/local/bin/encrypt-mail.sh -r you@domain.tld" > ~/.forward
chmod 600 ~/.forward

Copy in /usr/local/bin/encrypt-mail.sh :

#!/bin/sh -x
# encrypt incoming mail
# Require mblaze
#
# 	"Initial setup:\n"
# 	"echo "|/usr/local/bin/encrypt-mail.sh" > ~/.forward\n"
# 	"chmod 600 ~/.forward\n"

usage() {
	printf "usage: $0 [-r email@domain.tld] [-h]\n"
	printf "	-h: show this help\n"
	printf "	-r: set recipient email, default to user@hostname\n"
	printf "---\n"
	exit 1
}

# default user email
recipient="$(whoami)@$(hostname)"

while getopts 'r:h' c
do
    case $c in
	h) usage ;;
        r) recipient="${OPTARG}" ;;
    esac
done

tmpcryptd="$(mktemp -d -t mencrypt.XXXXXXXXXX)"
tmpplainmsg="$(mktemp -t msg.XXXXXXXXXX)"
trap "rm -rf ${tmpcryptd} ${tmpplainmsg}" INT TERM EXIT

# check if Maildir/new is here
d="$HOME/Maildir/new"
test ! -d "${d}" && mkdir -p "${d}"

# create a path to a new email
# format:
# gettimeofday().uniqu-id.gethostname()
timeofday="$(date +%s)"
uniq_id="$$"
myhostname="$(hostname | sed -e 's;/;\\057;' -e 's;:;\\072;g')"
new_mail_filename="$HOME/Maildir/new/${timeofday}.${uniq_id}.${myhostname}"

cat > "${tmpplainmsg}"

# check if already encrypted
mhdr -h Content-Type - < "${tmpplainmsg}" |\
	grep -q "multipart/encrypted"
if [ $? -eq 0 ]; then
	mv "${tmpplainmsg}" "${new_mail_filename}"
	exit
fi

# from here, message is unencrypted, so call gpg
{
	# print all after header, set mime and encrypt 
	awk '/^$/,0' "${tmpplainmsg}" |\
		mmime |\
		gpg --output "${tmpcryptd}/msg.asc" --encrypt --armor --recipient "${recipient}" || exit $?

	printf "Version: 1\n" > "${tmpcryptd}/version"

	{
		awk '1 {print} /^$/ {exit}' "${tmpplainmsg}"
		printf "#application/pgp-encrypted %s/version\n" "${tmpcryptd}"
		printf "#application/octet-stream %s/msg.asc\n" "${tmpcryptd}"
	} |\
	mmime -t 'multipart/encrypted; protocol="application/pgp-encrypted"'

} > "${new_mail_filename}"
exit $?