電子メールを送信する

#!/bin/sh
#mail_send.sh
#メッセージを標準入力から受け取り、漢字コードの変換
#ヘッダのMIMEエンコードを行った後標準出力に書き出す

if [ -x /usr/sbin/sendmail ]; then
    SENDMAIL_PATH="/usr/sbin/sendmail"
elif [ -x /usr/lib/sendmail ]; then
    SENDMAIL_PATH="/usr/lib/sendmail"
else
    echo "sendmail not found."
    exit 1
fi

FROM_ADDRESS="anmino@abc.com"
FROM_REALNAME="サンプル"
LF='
'

if echo x | read -r 2> /dev/null; then
    READ_R="-r"
else
    READ_R=""
fi

#標準入力から読み込んだデータを16進でダンプする関数
tohex(){
    od -x | head -1 | sed -e 's/[^ ]*//' -e 's/ //g'
}

#Message-Idを生成する関数
msgid(){
    datestr=`date +%Y%m%d.%H%M%S`
    #/dev/randomから8バイト読み込んで16進表記にする
    random=`dd if=/dev/random bs=8 count=1 2> /dev/null | tohex`
    #差出人のメールアドレスからドメイン名を取り出す
    domain=`expr "$FROM_ADDRESS" : ".*@\(.*\)"`
    echo "$datestr-$$-$random@$domain"
}

#欠けているヘッダがあれば追加する関数
fixheader(){
    #標準入力からメッセージを読み込みヘッダ部分だけを抜き出す
    header=""
    while read $READ_R line; do
        [ -z "$line" ] && break
        header="$header$line$LF"
    done

    #ヘッダを調べる
    if echo "$header" | grep -qi '^from:'; then
        :
    else
        header="${header}From: $FROM_REALNAME <$FROM_ADDRESS>$LF"
    fi
    if echo "$header" | grep -qi '^message-id:'; then
        :
    else
        header="${header}Message-Id: <`msgid`>$LF"
    fi
    echo "$header"
    cat
}

if [ "$1" = "--send" ]; then
    emit="SENDMAIL_PATH -t -f $FROM_ADDRESS"
    shift
else
    emit="cat"
fi
if [ -n "$1" ]; then
    echo "Usage: mail_send.sh [--send]"
    exit 1
fi

fixheader | nkf -j | enMine | $emit