EOF
test_mhmail "$expected" \
- "-from sender@localhost -cc recipient2@example.com recipient3@example.com recipient4@example.com" '|' message
+ '-from sender@localhost -cc recipient2@example.com recipient3@example.com '\
+'recipient4@example.com' '|' message
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" \
- "-from sender@localhost -subject Test" '|' message
+test_mhmail "$expected" '-from sender@localhost -subject Test' '|' message
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" \
- "-from sender@localhost -profile" '|' message
+test_mhmail "$expected" '-from sender@localhost -profile' '|' message
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost -from sender2@localhost \
--subject Subject1 -subject Subject2" -b message
+test_mhmail "$expected" '-from sender@localhost -from sender2@localhost '\
+'-subject Subject1 -subject Subject2' -b message
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
# check repeated -body arguments
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost \
--cc cc1@example.com -cc cc2@example.com" -b message
+test_mhmail "$expected" \
+ '-from sender@localhost -cc cc1@example.com -cc cc2@example.com' -b message
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost \
--cc cc1@example.com -subject Test cc2@example.com" -b message
+test_mhmail "$expected" \
+ '-from sender@localhost -cc cc1@example.com -subject Test cc2@example.com' \
+ -b message
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost" '|' '\n'
+test_mhmail "$expected" '-from sender@localhost' '|' '\n'
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost" '|' '\n\n\n'
+test_mhmail "$expected" '-from sender@localhost' '|' '\n\n\n'
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost" '|' 'no newline in input'
+test_mhmail "$expected" '-from sender@localhost' '|' 'no newline in input'
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost" '|' "here's some text\n\n\n"
+test_mhmail "$expected" '-from sender@localhost' '|' "here's some text\n\n\n"
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost" -b ''
+test_mhmail "$expected" '-from sender@localhost' -b ''
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost" -b '
+test_mhmail "$expected" '-from sender@localhost' -b '
'
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost" -b '
+test_mhmail "$expected" '-from sender@localhost' -b '
'
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost" -b 'no newline in input'
+test_mhmail "$expected" '-from sender@localhost' -b 'no newline in input'
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
QUIT
EOF
-test_mhmail "$expected" "-from sender@localhost" -b "here's some text
+test_mhmail "$expected" '-from sender@localhost' -b "here's some text
"
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
Date:
Resent-Date:
-please resend this message
+please resend this message, #1
+.
+QUIT
+EOF
+
+test_mhmail "$expected" '-from recipient@example.com -resent' \
+ -b 'To: recipient@example.com
+From: sender@localhost
+Date: Sat Jun 16 18:35:15 -0500
+
+please resend this message, #1'
+[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
+
+# check -resent -profile, using stdin
+# Not supported by compiled mhmail.
+cat > "$expected" <<EOF
+EHLO nosuchhost.example.com
+MAIL FROM:<recipient@example.com>
+RCPT TO:<recipient@example.com>
+DATA
+To: recipient@example.com
+From: sender@localhost
+Date:
+Resent-To: recipient@example.com
+Resent-From: recipient@example.com
+Resent-Date:
+
+please resend this message, #2
.
QUIT
EOF
-test_mhmail "$expected" "-from recipient@example.com -resent" \
- -b "To: recipient@example.com
+test_mhmail "$expected" \
+ '-from recipient@example.com -resent -profile -nomsgid' \
+ '|' 'To: recipient@example.com
From: sender@localhost
Date: Sat Jun 16 18:35:15 -0500
-please resend this message
-"
+please resend this message, #2'
+
+[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
+
+
+# check -resent -profile, using -b
+# Not supported by compiled mhmail.
+cat > "$expected" <<EOF
+EHLO nosuchhost.example.com
+MAIL FROM:<recipient@example.com>
+RCPT TO:<recipient@example.com>
+DATA
+To: recipient@example.com
+From: sender@localhost
+Date:
+Resent-To: recipient@example.com
+Resent-From: recipient@example.com
+Resent-Date:
+
+please resend this message, #3
+.
+QUIT
+EOF
+
+test_mhmail "$expected" \
+ '-from recipient@example.com -resent -profile -nomsgid' \
+ -b 'To: recipient@example.com
+From: sender@localhost
+Date: Sat Jun 16 18:35:15 -0500
+
+please resend this message, #3'
[ ${failed:-0} -eq 0 ] || exit ${failed:-0}
# * Drops support for undocumented -queue option.
#
# To do:
-# * fix -resent with -profile
# * add -header-field name:body switch
# * add -attach file ... switch
#### remove that, too.
umask 077
tmpdir="${MHTMPDIR:-${TMPDIR:-${TMP:-`${nmhbindir}/mhpath +`}}}"
- tmpfil="${tmpdir}/mhmail$$"
- tmpfilbackup="${tmpdir}/[,#]mhmail$$"
- trap 'rm -f '"${tmpfil}"' '"${tmpfilbackup}" EXIT
+ tmpfile="${tmpdir}/mhmail$$"
+ tmpfilebackup="${tmpdir}/[,#]mhmail$$"
+ tmpfileresent=
+ message_file=
if [ ${resent} -eq 0 ]; then
#### Add blank line after header if not resending.
header="${header}
"
+ message_file="${tmpfile}"
else
if [ ${use_send} -eq 0 ]; then
postsendargs="${postsendargs:+${postsendargs} }-dist"
+ message_file="${tmpfile}"
else
+ #### When resending with send, tmpfile will just contain the
+ #### Resent- header fields. "${tmpfileresent}" will contain
+ #### the message that is being resent.
+ tmpfileresent="${tmpdir}/mhmail-resent$$"
mhdist=1; export mhdist
- mhaltmsg=${tmpfil}; export mhaltmsg
- #### This doesn't work, I'm not sure about mhaltmsg.
- printf "mhmail: -resent not currently supported with -profile\n"
- exit 1
+ mhaltmsg=${tmpfileresent}; export mhaltmsg
+ message_file="${tmpfileresent}"
+ printf "" >"${message_file}" || exit 2
fi
fi
+ trap 'rm -f '"${tmpfile}"' '"${tmpfilebackup}"' '"${tmpfileresent}" EXIT
+
if [ "${body}"x = x ]; then
- #### First put message header in the file. cat >> handles blank
- #### lines better than body=`cat`.
- printf "%s" "${header}" > "${tmpfil}" || exit 1
+ #### First put message header in the file.
+ printf "%s" "${header}" >"${tmpfile}" || exit 2
- tmpfile_size_before=`wc -c "${tmpfil}"`
- #### Now grab the body from stdin.
- cat >>"${tmpfil}"
- tmpfile_size_after=`wc -c "${tmpfil}"`
+ tmpfile_size_before=`wc -c "${message_file}"`
+ #### Now grab the body from stdin. cat >> handles blank lines
+ #### better than body=`cat`.
+ cat >>"${message_file}" || exit 2
+ tmpfile_size_after=`wc -c "${message_file}"`
#### Don't allow an empty body (from stdin). Use string
#### comparison so we don't have to strip the filename, etc.
fi
#### Add trailing newline to body if it doesn't have one.
+ if [ `tail -n 1 "${message_file}" | wc -l` -ne 1 ]; then
+ printf "\n" >>"${message_file}" || exit 2
+ fi
+ else
+ #### Add trailing newline to body if it doesn't have one.
[ `printf "${body}" | tail -n 1 | wc -l` -ne 1 ] && body="${body}
"
- else
- #### Put message header and body in the file.
- printf "%s" "${header}${body}" > "${tmpfil}" || exit 1
+
+ if [ "${tmpfileresent}" ]; then
+ #### Put just the new message header in the file.
+ printf "%s" "${header}" >"${tmpfile}" || exit 2
+ #### and the body in the file to resend.
+ printf "${body}" >"${tmpfileresent}" || exit 2
+ else
+ #### Put message header and body in the file.
+ printf "%s" "${header}${body}" >"${tmpfile}" || exit 2
+ fi
fi
if [ ${sendsw} -eq 0 ]; then
- cat "${tmpfil}"
+ cat "${tmpfile}"
else
if [ ${use_send} -eq 0 ]; then
post_or_send=`${nmhbindir}/mhparam postproc`
post_or_send="${nmhbindir}/send"
fi
- if "${post_or_send}" "${tmpfil}" ${postsendargs}; then
+ if "${post_or_send}" "${tmpfile}" ${postsendargs}; then
exit
else
printf "Letter saved in dead.letter\n"
#### exec skips the trap set above.
- exec mv "${tmpfil}" dead.letter
+ exec mv "${tmpfile}" dead.letter
fi
fi
fi