rc/config/neomutt/extract-reply.sh

76 lines
2.1 KiB
Bash
Executable file

#!/bin/sh
set -euo pipefail
text="$(cat)"
# The Mime Format emails we're trying to parse have the following layout
#
# To: mail@example.org
# ... <misc headers>
#
# Content-Type: multipart/mixed;
# boundary="=_c4f4c8bf54a05b2b47ef558c3c61e418"
# ...<more headers>
#
# This is a message in Mime Format. If you see this, your mail reader does not support this format.
#
# --=_c4f4c8bf54a05b2b47ef558c3c61e418
# Content-Type: multipart/alternative;
# boundary="=_935b3ef6db1361fbfde9e3eb2b1debe5"
# Content-Transfer-Encoding: 8bit
#
#
# --=_935b3ef6db1361fbfde9e3eb2b1debe5
# Content-Type: text/plain; charset=iso-8859-1
# Content-Transfer-Encoding: quoted-printable
#
# ...<text content, if any>
#
# --=_935b3ef6db1361fbfde9e3eb2b1debe5
# Content-Type: text/html; charset=iso-8859-1
# Content-Transfer-Encoding: quoted-printable
#
# <html>=0A <head>=0A <meta http-equiv=3D"Content-Type" content=3D"text/=
# html; charset=3DISO-8859-1">=09=0A <link rel=3D"stylesheet" href=3D=
# ...<and more quoted-printable html>
# ...<and misc eventual attachment parts>
# --=_c4f4c8bf54a05b2b47ef558c3c61e418--
# We're only interested in the text/html part of the multipart email
# TODO parse actual encoding instead of defaulting to iso-8859-1
mailto="$(printf "%s" "$text" \
| awk '
boundary {
if ($0 ~ boundary) {
boundary = "";
next
}
print $0
}
/Content-Type: text\/html;/ {
boundary=line
}
{
line=$0
}' \
| qprint -d \
| iconv -f iso-8859-1 -t utf-8 \
| grep -Eo '<a href="mailto:.*?</a>')"
to="$(printf "%s" "$mailto" | sed -En 's/.*mailto:(.*?)\?subject=.*/\1/p')"
subject="$(printf "%s" "$mailto" | sed -En 's/.*\?subject=(.*?)" .*/\1/p')"
# TODO extract original To: to emulate use_envelope_from
datadir="${XDG_DATA_HOME:-"$HOME/.local/share"}/neomutt"
mkdir -p "$datadir"
format_str="unmy_hdr To: Subject:
my_hdr To: \"%s\"
my_hdr Subject: \"%s\"
echo \`rm \"%s\"\`"
printf "$format_str" "$to" "$subject" "$datadir/info.rc" > "$datadir/info.rc"