[bin][autoreply] Nearly working;
messages are not being saved to the Sent folder
This commit is contained in:
parent
e992db6c07
commit
ccc1ff6a21
1 changed files with 54 additions and 37 deletions
|
@ -10,52 +10,69 @@
|
|||
set -euo pipefail
|
||||
|
||||
if [[ -z "$(notmuch search tag:misdirected)" ]] ; then
|
||||
echo "[autoreply.sh] Currently no emails are tagged 'misdirected'. Exiting..."
|
||||
exit 1
|
||||
echo "[autoreply.sh] Currently no emails are tagged 'misdirected'. Exiting..."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# !!! Script just craps out here when invoked with no flag. Refactor to
|
||||
# match https://www.man7.org/linux/man-pages/man1/getopts.1p.html#EXAMPLES
|
||||
dry_run=
|
||||
while getopts n opt ; do
|
||||
printf "[debug] opt: %s\n\n" $opt
|
||||
case $opt in
|
||||
n) dry_run=1;;
|
||||
?) echo "Usage: /path/to/autoreply.sh/ [ -n ]"
|
||||
exit 2;;
|
||||
esac
|
||||
done
|
||||
|
||||
# This weird feed-find-output-into-while-loop comes from
|
||||
# https://github.com/koalaman/shellcheck/wiki/SC2044#correct-code
|
||||
while IFS= read -r -d '' file ; do
|
||||
echo "[loop] Preparing the email..."
|
||||
while IFS= read -r -d '' thread ; do
|
||||
echo "[loop] Preparing the email..."
|
||||
|
||||
# Make a temporary file
|
||||
temporary_file=$(mktemp /tmp/autoreply-XXXXX)
|
||||
echo "[debug] Temporary file: $temporary_file" # debug
|
||||
# Make a temporary file
|
||||
temporary_file=$(mktemp /tmp/autoreply-XXXXX)
|
||||
echo "[debug] Temporary file: $temporary_file"
|
||||
|
||||
# Pull sender (i.e. recipient of my email), subject, and date from email
|
||||
recipient="$(perl -lane 'print if /^From:/' "$file" | cut -d' ' -f2-)" ### "Frantz Fanon <ffanon@riseup.net>"
|
||||
subject="Re: $(perl -lane 'print if /^Subject:/' "$file" | cut -d' ' -f2-)" ### "Re: Lorem ipsum baby"
|
||||
date="$(perl -lane 'print if /^Date:/' "$file" | cut -d' ' -f2-)"
|
||||
# Parse out the thread-id
|
||||
thread_id=$(echo "$thread" | cut -f2 -d':')
|
||||
echo "[debug] thread_id: $thread_id"
|
||||
|
||||
# Copy canned message to temporary file
|
||||
printf "To: $recipient\nFrom: adam@theadamcooper.com\nCc: amcooper@gmail.com\nDate: $(date +'%a, %d %b %Y %R %z')\nSubject: $subject\n\n" > "$temporary_file"
|
||||
cat /home/adam/dotfiles/bin/autoreply/misdirected_email_autoreply.txt >> "$temporary_file"
|
||||
printf "\n\nOn $date, $recipient wrote:\n" >> "$temporary_file"
|
||||
|
||||
# Append email body to temporary file
|
||||
discard="0"
|
||||
while IFS= read -r line ; do
|
||||
if [[ $discard = "1" ]]; then
|
||||
echo "> $line" >> "$temporary_file"
|
||||
else
|
||||
if [[ -z "$line" ]]; then
|
||||
discard="1"
|
||||
fi
|
||||
fi
|
||||
done < "$file"
|
||||
# Parse out the reply headers and original message body
|
||||
temporary_reply=$(mktemp /tmp/notmuch-reply-XXXXX)
|
||||
echo "[debug] Temporary reply: $temporary_reply"
|
||||
notmuch reply --format=json thread:$thread_id > $temporary_reply
|
||||
subject="$(jq -r '."reply-headers".Subject' $temporary_reply)"
|
||||
sender="$(jq -r '."reply-headers".From' $temporary_reply)"
|
||||
recipient="$(jq -r '."reply-headers".To' $temporary_reply)"
|
||||
in_reply_to="$(jq -r '."reply-headers"."In-reply-to"' $temporary_reply)"
|
||||
references="$(jq -r '."reply-headers".References' $temporary_reply)"
|
||||
orig_sender="$(jq -r '.original.headers.From' $temporary_reply)"
|
||||
date="$(jq -r '.original.headers.Date' $temporary_reply)"
|
||||
orig_body="$(jq -r '.original.body[0].content[] | select(."content-type" == "text/plain") | .content' $temporary_reply)"
|
||||
|
||||
# Send the email!
|
||||
printf "[debug] Outgoing email:\n$(cat "$temporary_file")\n" # debug
|
||||
echo "[loop] Sending reply to $recipient ... "
|
||||
cat "$temporary_file" | msmtp --read-envelope-from --read-recipients
|
||||
cat "$temporary_file" | notmuch insert --folder=Sent -inbox -unread +sent +misdirected-reply
|
||||
|
||||
# Remove the misdirected tag
|
||||
notmuch tag -misdirected -- tag:misdirected
|
||||
# Copy canned message to temporary file
|
||||
printf "From: %s\nSubject: %s\nTo: %s\nIn-Reply-To: %s\nReferences: %s\n\n" "$sender" "$subject" "$recipient" "$in_reply_to" "$references" >> "$temporary_file"
|
||||
cat /home/adam/dotfiles/bin/autoreply/misdirected_email_autoreply.txt >> "$temporary_file"
|
||||
printf "\n\nOn %s, %s wrote:\n" "$date" "$orig_sender" >> "$temporary_file"
|
||||
|
||||
echo "[loop] Done."
|
||||
# Append email body to temporary file
|
||||
printf "%s\n" "$orig_body" >> "$temporary_file"
|
||||
|
||||
done < <(notmuch search --output=files --format=text0 tag:misdirected)
|
||||
# Send the email!
|
||||
printf "[debug] Outgoing mail:\n%s\n" "$(cat $temporary_file)"
|
||||
if [[ -z "$dry_run" ]] ; then
|
||||
echo "[loop] Sending reply to $recipient ... "
|
||||
cat "$temporary_file" | msmtp --read-envelope-from --read-recipients
|
||||
cat "$temporary_file" | notmuch insert --folder=Sent -inbox -unread +sent +misdirected-reply
|
||||
|
||||
# Remove the misdirected tag
|
||||
notmuch tag -misdirected -- thread:"$thread_id"
|
||||
fi
|
||||
|
||||
printf "%s\n\n" "[loop] Done."
|
||||
|
||||
done < <(notmuch search --output=threads --format=text0 tag:misdirected)
|
||||
|
||||
echo "[autoreply.sh] All done!"
|
||||
|
|
Loading…
Reference in a new issue