##############
# ezmlm-send #
##############

  prompt "ezmlm-send:           "

  SENDER="${SND}@$HOST"
  ${EZBIN}/ezmlm-sub "$DIR" "$SENDER"
# set up prefix
  echo "[PFX]" > "${DIR}/prefix"
# set up trailer
  mkdir -p "${DIR}/text"
  { echo "--- TRAILER ---"; echo; } > "${DIR}/text/trailer"
  touch "$DIR"/addtrailer
# test
  { echo "X-num: msg1"; make_message; } | \
	${EZBIN}/ezmlm-send "$DIR" >"$ERR" 2>&1 || \
	fatal "failed to accept normal message"
  if [ `cat "${DIR}/num"` != "1:1" ]; then
	fatal "failed to create num for normal message 1"; 
  fi
  if [ ! -x "${DIR}/archive/0/01" ]; then
	fatal "failed to archive normal message"
  fi
  grep "1:" "${DIR}/archive/0/index" >/dev/null 2>&1 || \
	fatal "failed to index archive"

  grep "$SENDER" "$QQENV" >/dev/null 2>&1 ||
	fatal "failed to deliver message to subscriber"
  checkenv msg1 "$LIST-return-1-@$HOST-@\\[\\]" "$SENDER"

# make sure headeradd was done
  grep -i 'precedence: bulk' "$QQMSG" >/dev/null 2>&1 ||
	fatal "failed to add headeradd"
# check on received: header handling
  grep '#PENULTIMATE#' "$QQMSG" >/dev/null && \
	fatal "-r failed to remove received header"
  grep '#LAST#' "$QQMSG" >/dev/null || \
	fatal "-r failed to leave last received header"
  grep 'Subject:' "$QQMSG" | grep 'PFX' >/dev/null 2>&1 || \
	fatal "failed to add subject prefix"
	# the trailer should be a MIME part, so not at the very end
  tail -n 6 "$QQMSG" | head -n 2 | grep 'TRAILER' >/dev/null 2>&1 || \
	fatal "failed to add trailer"

  rm -f "${DIR}/indexed"
  rm -f "${DIR}/archived"

# test to see that trailer is added to nom-mime messages
  CONTENT=''
  { echo "X-num: msg5"; make_message; } | \
	${EZBIN}/ezmlm-send "$DIR" >"$ERR" 2>&1  || \
	fatal "failed to accept non-mime message"

  checkenv msg5 "$LIST-return-2-@$HOST-@\\[\\]" "$SENDER"
  grep 'TRAILER' "$QQMSG" >/dev/null 2>&1 || \
	fatal "failed to add trailer to non-mime message"

# test to see that trailer is suppressed for multipart/signed
  CONTENT='multipart/signed'
  { echo "X-num: msg6"; make_message; } | \
	${EZBIN}/ezmlm-send "$DIR" >"$ERR" 2>&1  || \
	fatal "failed to accept multipart/signed message"

  checkenv msg6 "$LIST-return-3-@$HOST-@\\[\\]" "$SENDER"
  grep 'TRAILER' "$QQMSG" >/dev/null 2>&1 && \
	{ echo "failed to suppress trailer for multipart/signed message"; \
	  echo "                      0.31 bug fixed in 0.316/0.323";
	  BUG="${BUG}_signed"; \
	  prompt "ezmlm-send ......:    "; }

# restore
  CONTENT='multipart/mixed'

# test content-type with something after boundary=xxx
  AFTERBOUND=';micalg=pgp-md5'
  echo "text/html" > "$DIR"/mimeremove
  make_message | ${EZBIN}/ezmlm-send "$DIR" >"$ERR" 2>&1  || \
	{ echo "err with text after boundary: 0.30 bug fixed in 0.322"
	  prompt "ezmlm-send.........   "
	  BUG="${BUG} send_bound"
	}
  checkenv text-after-boundary "$LIST-return-4-@$HOST-@\\[\\]" "$SENDER"

# restore
  AFTERBOUND=''
  echo "1:1" > "${DIR}/num"
  rm "$DIR"/mimeremove

# -r => don't trim received headers
  { echo "X-num: msg2"; make_message; } | \
	${EZBIN}/ezmlm-send -r "$DIR" >"$ERR" 2>&1 || \
	fatal "failed to accept normal message 2"
  checkenv msg2 "$LIST-return-2-@$HOST-@\\[\\]" "$SENDER"

  grep "2:" "${DIR}/archive/0/index" >/dev/null 2>&1 && \
	fatal "indexed message with DIR/indexed missing"
  grep "msg2" ${DIR}/archive/0/* >/dev/null 2>&1 && \
	fatal "archived message with DIR/archived missing"

  grep  '#PENULTIMATE#' "$QQMSG" >/dev/null 2>&1 || \
	fatal "-r failed to leave received header"

# -C eliminate SENDER from addressees
  { echo "X-num: msg3"; make_message; } | \
	${EZBIN}/ezmlm-send -C "$DIR" >"$ERR" 2>&1 || \
	fatal "failed to accept normal message 3"
  checkenv msg3 "$LIST-return-3-@$HOST-@\\[\\]" "$SENDER"
  ${EZBIN}/ezmlm-unsub "$DIR" "$SENDER"

  grep T"$SENDER" "$QQENV" >/dev/null 2>&1 || \
	{ echo "failed to include sender (-C is ignored)"; \
	  BUG="${BUG}_noself"; \
	  prompt "ezmlm-send:           "; }

# make sure headerremove was done
  grep -i 'return-receipt-to' < "${DIR}/archive/0/01" >/dev/null &&
	fatal "failed to remove headerremove"

# test mimeremove
  touch "${DIR}/archived" "${DIR}/indexed"
  echo "teXT/hTml" > "${DIR}/mimeremove"
  { echo "X-num: mimeremove"; make_message; } | \
	${EZBIN}/ezmlm-send "$DIR" >"$ERR" 2>&1 || \
	fatal "failed to accept mimeremove message"
  checkenv mimeremove "$LIST-return-4-@$HOST-@\\[\\]"
  grep -i 'text/html' < "${DIR}/archive/0/04" >/dev/null &&
	fatal "failed to remove mimeremove part"

# test mimekeep
  touch "${DIR}/archived" "${DIR}/indexed"
  echo "multipart/mixed" > "${DIR}/mimekeep"
  echo "teXT/plain" >> "${DIR}/mimekeep"
  { echo "X-num: mimekeep"; make_message; } | \
        ${EZBIN}/ezmlm-send "$DIR" >"$ERR" 2>&1 || \
	fatal "failed to accept mimekeep message"
  checkenv mimekeep "$LIST-return-5-@$HOST-@\\[\\]"
  grep -i 'text/html' < "${DIR}/archive/0/05" >/dev/null &&
	fatal "failed to remove mimekeep part"

# test headerkeep
  echo subject >"$DIR"/headerkeep
  echo from >>"$DIR"/headerkeep
  echo x-num >>"$DIR"/headerkeep
  { echo "X-num: keeptest"; make_message; } | \
	${EZBIN}/ezmlm-send -C "$DIR" >"$ERR" 2>&1 || \
	fatal "failed to accept keeptest message"
  checkenv keeptest "$LIST-return-6-@$HOST-@\\[\\]"
  grep -i '^x-num: keeptest' < "${DIR}/archive/0/06" >/dev/null ||
	fatal "failed to keep header in headerkeep"
  grep -i '^return-receipt-to' < "${DIR}/archive/0/06" >/dev/null &&
	fatal "failed to remove header not in headerkeep"
  rm "$DIR"/headerkeep

  echo "OK"
