#!/bin/sh
# *************************************************************
#
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#
# *************************************************************
URI_ENCODE="`dirname "$0"`/uri-encode"
FOPTS=""

# Linux file utility needs -L option to resolve symlinks
if [ "`uname -s`" = "Linux" ]
then
  FOPTS="-L"
fi

# do not confuse the system mail clients with AOO and Java libraries
unset LD_LIBRARY_PATH

# tries to locate the executable specified
# as first parameter in the user's path.
which() {
	if [ ! -z "$1" ]; then
		for i in `echo $PATH | sed -e 's/^:/.:/g' -e 's/:$/:./g' -e 's/::/:.:/g' -e 's/:/ /g'`; do
			if [ -x "$i/$1" -a ! -d "$i/$1" ]; then
				echo "$i/$1"
				break;
			fi
		done
	fi
}

# checks for the original Mozilla start script(s)
# and restrict the "-remote" semantics to those.
run_mozilla() {
	# find mozilla script in PATH if necessary
	if [ "`basename $1`" = "$1" ]; then
		moz=`which $1`
	else
		moz=$1
	fi

	if file $FOPTS "$moz" | grep "script" > /dev/null && grep "[NM]PL" "$moz" > /dev/null; then
		"$moz" -remote 'ping()' 2>/dev/null >/dev/null
		if [ $? -eq 2 ]; then
			"$1" -compose "$2" &
		else
			"$1" -remote "xfeDoCommand(composeMessage,$2)" &
		fi
	else
		"$1" -compose "$2" &
	fi
}

if [ "$1" = "--mailclient" ]; then
	shift
	MAILER=$1
	shift
fi

# autodetect mail client from executable name
case `basename "$MAILER" | sed 's/-.*$//'` in

	iceape | mozilla | netscape | seamonkey | icedove | thunderbird)

		while [ "$1" != "" ]; do
			case $1 in
				--to)
					TO=${TO:-}${TO:+,}$2
					shift
					;;
				--cc)
					CC=${CC:-}${CC:+,}$2
					shift
					;;
				--bcc)
					BCC=${BCC:-}${BCC:+,}$2
					shift
					;;
				--subject)
					SUBJECT=$2
					shift
					;;
				--body)
					BODY=$2
					shift
					;;
				--attach)
					ATTACH=${ATTACH:-}${ATTACH:+,}`echo "file://$2" | "${URI_ENCODE}"`
					shift
					;;
				*)
					;;
			esac
			shift;
		done

		if [ "$TO" != "" ]; then
			COMMAND=${COMMAND:-}${COMMAND:+,}to=\'${TO}\'
		fi
		if [ "$CC" != "" ]; then
			COMMAND=${COMMAND:-}${COMMAND:+,}cc=\'${CC}\'
		fi
		if [ "$BCC" != "" ]; then
			COMMAND=${COMMAND:-}${COMMAND:+,}bcc=\'${BCC}\'
		fi
		if [ "$SUBJECT" != "" ]; then
			COMMAND=${COMMAND:-}${COMMAND:+,}subject=\'${SUBJECT}\'
		fi
		if [ "$BODY" != "" ]; then
			COMMAND=${COMMAND:-}${COMMAND:+,}body=\'${BODY}\'
		fi
		if [ "$ATTACH" != "" ]; then
			COMMAND=${COMMAND:-}${COMMAND:+,}attachment=\'${ATTACH}\'
		fi

		run_mozilla "$MAILER" "$COMMAND"
		;;

	kmail)

		while [ "$1" != "" ]; do
			case $1 in
				--to)
					TO="${TO:-}${TO:+,}$2"
					shift
					;;
				--cc)
					CC="${CC:-}${CC:+,}$2"
					shift
					;;
				--bcc)
					BCC="${BCC:-}${BCC:+,}$2"
					shift
					;;
				--subject)
					SUBJECT="$2"
					shift
					;;
				--body)
					BODY="$2"
					shift
					;;
				--from)
					FROM="$2"
					shift
					;;
				--attach)
					ATTACH="${ATTACH:-}${ATTACH:+ }--attach "`echo "file://$2" | "${URI_ENCODE}"`
					shift
					;;
				*)
					;;
			esac
			shift;
		done

		${MAILER} --composer \
			${CC:+--cc} ${CC:+"${CC}"} \
			${BCC:+--bcc} ${BCC:+"${BCC}"} \
			${SUBJECT:+--subject} ${SUBJECT:+"${SUBJECT}"} \
			${BODY:+--body} ${BODY:+"${BODY}"} \
			${FROM:+--header} ${FROM:+"From: ${FROM}"} \
			${ATTACH:+${ATTACH}} \
			${TO:+"${TO}"}
		;;

	mutt)

		while [ "$1" != "" ]; do
			case $1 in
				--from)
					FROM="$2"
					shift
					;;
				--to)
					TO="${TO:-}${TO:+,}$2"
					shift
					;;
				--cc)
					CC="${CC:-}${CC:+,}$2"
					shift
					;;
				--bcc)
					BCC="${BCC:-}${BCC:+,}$2"
					shift
					;;
				--subject)
					SUBJECT="$2"
					shift
					;;
				--body)
					TEMPLATE="`basename $0`.mutt.XXXXXXXX"
					BODY=`mktemp -q -t ${TEMPLATE}`
					echo "$2" > $BODY
					shift
					;;
				--attach)
					ATTACH="$2"
					shift
					;;
				*)
					;;
			esac
			shift;
		done

		x-terminal-emulator -e ${MAILER} \
			${FROM:+-e} ${FROM:+"set from=\"${FROM}\""} \
			${CC:+-c} ${CC:+"${CC}"} \
			${BCC:+-b} ${BCC:+"${BCC}"} \
			${SUBJECT:+-s} ${SUBJECT:+"${SUBJECT}"} \
			${BODY:+-i} ${BODY:+"${BODY}"} \
			${ATTACH:+-a} ${ATTACH:+"${ATTACH}"} \
			${TO:+"${TO}"} &
		rm -f $BODY
		;;

	evolution)

		while [ "$1" != "" ]; do
			case $1 in
				--to)
					if [ "${TO}" != "" ]; then
						MAILTO="${MAILTO:-}${MAILTO:+&}to=$2"
					else
						TO="$2"
					fi
					shift
					;;
				--cc)
					MAILTO="${MAILTO:-}${MAILTO:+&}cc="`echo "$2" | "${URI_ENCODE}"`
					shift
					;;
				--bcc)
					MAILTO="${MAILTO:-}${MAILTO:+&}bcc="`echo "$2" | "${URI_ENCODE}"`
					shift
					;;
				--subject)
					MAILTO="${MAILTO:-}${MAILTO:+&}subject"=`echo "$2" | "${URI_ENCODE}"`
					shift
					;;
				--body)
					MAILTO="${MAILTO:-}${MAILTO:+&}body="`echo "$2" | "${URI_ENCODE}"`
					shift
					;;
				--attach)
					MAILTO="${MAILTO:-}${MAILTO:+&}attach="`echo "file://$2" | "${URI_ENCODE}"`
					shift
					;;
				*)
					;;
			esac
			shift;
		done

		MAILTO="mailto:${TO}?${MAILTO}"
		${MAILER} "${MAILTO}" &
		;;

	groupwise)

		while [ "$1" != "" ]; do
			case $1 in
				--to)
					if [ "${TO}" != "" ]; then
						MAILTO="${MAILTO:-}${MAILTO:+&}to=$2"
					else
						TO="$2"
					fi
					shift
					;;
				--cc)
					MAILTO="${MAILTO:-}${MAILTO:+&}cc="`echo "$2" | "${URI_ENCODE}"`
					shift
					;;
				--bcc)
					MAILTO="${MAILTO:-}${MAILTO:+&}bcc="`echo "$2" | "${URI_ENCODE}"`
					shift
					;;
				--subject)
					MAILTO="${MAILTO:-}${MAILTO:+&}subject"=`echo "$2" | "${URI_ENCODE}"`
					shift
					;;
				--body)
					MAILTO="${MAILTO:-}${MAILTO:+&}body="`echo "$2" | "${URI_ENCODE}"`
					shift
					;;
				--attach)
					MAILTO="${MAILTO:-}${MAILTO:+&}attachment="`echo "file://$2" | "${URI_ENCODE}"`
					shift
					;;
				*)
					;;
			esac
			shift;
		done

		MAILTO="mailto:${TO}?${MAILTO}"
		${MAILER} "${MAILTO}" &
		;;

	dtmail)

		while [ "$1" != "" ]; do
			case $1 in
				--to)
					TO=${TO:-}${TO:+,}$2
					shift
					;;
				--attach)
					ATTACH="$2"
					shift
					;;
				*)
					;;
			esac
			shift;
		done

		${MAILER} ${TO:+-T} ${TO:-} ${ATTACH:+-a} ${ATTACH:+"${ATTACH}"}
		;;

	sylpheed | claws | claws-mail)

		while [ "$1" != "" ]; do
			case $1 in
				--to)
					TO=${TO:-}${TO:+,}$2
					shift
					;;
				--attach)
					ATTACH="${ATTACH:-}${ATTACH:+ }$2"
					shift
					;;
				*)
					;;
			esac
			shift;
		done

		 ${MAILER} ${TO:+--compose} "${TO:-}" ${ATTACH:+--attach} "${ATTACH:-}"
		;;

	Mail | Thunderbird | *.app )

		while [ "$1" != "" ]; do
			case $1 in
				--attach)
					#i95688# fix filenames containing accented chars, whatever alien
					ATTACH="${ATTACH:-}${ATTACH:+ }"`echo "file://$2" | "${URI_ENCODE}"`
					shift
					;;
				*)
					;;
			esac
			shift;
		done
		/usr/bin/open -a "${MAILER}" ${ATTACH}
		;;

	"")

		# DESKTOP_LAUNCH, see http://freedesktop.org/pipermail/xdg/2004-August/004489.html
		if [ -n "$DESKTOP_LAUNCH" ]; then
			while [ "$1" != "" ]; do
				case $1 in
					--to)
						if [ "${TO}" != "" ]; then
							MAILTO="${MAILTO:-}${MAILTO:+&}to=$2"
						else
							TO="$2"
						fi
						shift
						;;
					--cc)
						MAILTO="${MAILTO:-}${MAILTO:+&}cc="`echo "$2" | "${URI_ENCODE}"`
						shift
						;;
					--bcc)
						MAILTO="${MAILTO:-}${MAILTO:+&}bcc="`echo "$2" | "${URI_ENCODE}"`
						shift
						;;
					--subject)
						MAILTO="${MAILTO:-}${MAILTO:+&}subject="`echo "$2" | "${URI_ENCODE}"`
						shift
						;;
					--body)
						MAILTO="${MAILTO:-}${MAILTO:+&}body="`echo "$2" | "${URI_ENCODE}"`
						shift
						;;
					--attach)
						MAILTO="${MAILTO:-}${MAILTO:+&}attachment="`echo "$2" | "${URI_ENCODE}"`
						shift
						;;
					*)
						;;
				esac
				shift;
			done

			MAILTO="mailto:${TO}?${MAILTO}"
			${DESKTOP_LAUNCH} "${MAILTO}" &
		else
			echo "Could not determine a mail client to use."
			exit 2
		fi
		;;

	*)
		echo "Unsupported mail client: `basename $MAILER | sed 's/-.*^//'`"
		exit 2
		;;
esac

exit 0
