#!/bin/sh # mcom [TO] - compose mail commajoin() { sed ':a;N;s/\n/, /;$!b a' } reffmt() { sed 's/^[^<]*//g;s/[^>]*$//g;s/>[^<]*\n/dev/null | sed 's/^/Message-Id: /' } msgdate() { echo -n "Date: " mdate } outbox=$(mhdr -h outbox ~/.mblaze/profile) if [ -z "$outbox" ]; then i=0 while [ -f "snd.$i" ]; do i=$((i+1)) done draft="snd.$i" draftmime="./snd.$i.mime" else draft="$(true | mdeliver -v -XD "$outbox")" if [ -z "$draft" ]; then echo "$0: failed to create draft in outbox $outbox." 1>&2 exit 1 fi draftmime="$(echo $draft | sed 's,\(.*\)/cur/,\1/tmp/mime-,')" fi { case "$0" in *mcom*) echo -n "To: $1" [ "$#" -ge 1 ] && shift for rcpt; do echo -n ", $rcpt" done echo echo "Cc: " echo "Bcc: " echo "Subject: " from=$(mhdr -h local-mailbox ~/.mblaze/profile) [ "$from" ] && echo "From: $from" cat ~/.mblaze/headers 2>/dev/null msgid msgdate echo echo ;; *mrep*) [ "$#" -eq 0 ] && set -- . to=$(mhdr -h reply-to "$1") [ -z "$to" ] && to=$(mhdr -h from "$1") echo "To: $to" echo "Cc: $(mhdr -d -A -h to:cc: "$1" | commajoin)" echo "Bcc: " s=$(mhdr -d -h subject "$1") os= while [ "$os" != "$s" ]; do os=$s s=${s# } s=${s#[Rr][Ee]:} s=${s#[Aa][Ww]:} s=${s#[Ff][Ww][Dd]:} done echo "Subject: Re: $s" cat ~/.mblaze/headers 2>/dev/null mid=$(mhdr -h message-id "$1") if [ "$mid" ]; then echo -n "References:" { mhdr -h references "$1" printf "%s\n" "$mid" } | reffmt echo "In-Reply-To: $mid" fi msgid msgdate echo mquote "$1" echo esac if [ -f ~/.signature ]; then printf '%s\n' '-- ' cat ~/.signature fi } >$draft c=e while :; do case "$c" in s|send) if [ -e $draftmime ]; then if [ $draft -ot $draftmime ]; then if sendmail -t <$draftmime; then if [ "$outbox" ]; then mv $draftmime $draft mflag -d $draft else rm $draft $draftmime fi exit 0 else echo "mcom: sendmail failed, kept draft $draft" exit 2 fi else echo "mcom: re-run mmime first." c= fi else if mmime -c <$draft; then if sendmail -t <$draft; then if [ "$outbox" ]; then mflag -d $draft else rm $draft fi exit 0 else echo "mcom: sendmail failed, kept draft $draft" exit 2 fi else echo "mcom: message needs to be MIME-encoded first." c= fi fi ;; c|cancel) echo "mcom: cancelled draft $draft" exit 1 ;; m|mime) ( IFS=' ' msed '/attach/d' $draft for f in $(mhdr -M -h attach $draft); do echo "#$(file -Lbi $f | sed 's/ //g') $f" done ) | tee /tmp/v | mmime >$draftmime mshow -t $draftmime c= ;; e|edit) c= if ! ${EDITOR:-vi} $draft; then c=c fi ;; *) echo -n "What now? ([s]end, [c]ancel, [e]dit, [m]ime) " read -r c ;; esac done