そんなこんなで、いろいろ一発でポン!なスクリプトやら定期タスクやらが増えてくると。 何かと我輩宛にメールが飛んでくる。特に定期タスクを司るcronから、毎日メールが飛んでくる。
それらがみんな、差出人が「Cron Daemon」で、件名が「Cron <root@・・・」で、 しかも今は、ミニサーバとミニミニサーバとの両方からそれが毎日何通も飛んでくるので ややこしゅうてしょうがない。(^_^;
そこで例によってスクリプトを作ることにした(笑)。 まぁ、メールソフトの振り分け設定をバキバキに設定して解決してもよかったのだがそれはそれ。 cronから起動されたジョブは、普通だと上記のような、なんだかみんな似たようなタイトルなので、 差出人と題名をオプションで自由に指定できるようにして、宛先はroot固定。メールの内容は 標準入力をそのまま使うということで、こんな感じになった。
#!/bin/sh # # 2003/11/24 opa MYNAME=mail2admin SENDMAIL=/usr/sbin/sendmail TMPFILE1=`mktemp /tmp/$MYNAME.XXXXXX` || exit 100 TMPFILE2=`mktemp /tmp/$MYNAME.XXXXXX` || exit 100 deltmp() { [ -f $TMPFILE1 ] && rm --force $TMPFILE1 [ -f $TMPFILE2 ] && rm --force $TMPFILE2 } trap deltmp EXIT TO="root" FROM="mail2admin" SUBJECT="mail2admin" if [ "$1" ]; then SUBJECT="$1" fi if [ "$2" ]; then FROM="$2" fi if [ ! -x $SENDMAIL ]; then echo "$MYNAME: missing $SENDMAIL" cat - exit 1; fi cat - > $TMPFILE2 if ! grep --quiet "[^ ]" $TMPFILE2 ; then # space or tab only exit 0 fi echo "From:$FROM <$FROM>" > $TMPFILE1 echo "To:$TO" >> $TMPFILE1 echo "Subject:$SUBJECT" >> $TMPFILE1 echo "X-Mail2admin-Host:$HOSTNAME" >> $TMPFILE1 echo "" >> $TMPFILE1 cat $TMPFILE2 >> $TMPFILE1 # cat $TMPFILE1 nkf -b -E --jis $TMPFILE1 | \ $SENDMAIL -i $TO
第一引数に題名を、第二引数に差出人名を与える。 省略するとそれぞれ"mail2admin"が使われる。 ミソは、メールヘッダに、"X-Mail2admin-Host:"という勝手に作った ヘッダが含まれていること。受信側で、このヘッダで振り分けることで、 このスクリプトで発信されたメールかどうかを確実に判断することができる。 どのホストからのメールなのかも、一発でわかる。 また、入力が何もなかったときは、メール自体出さないようにしているので、 無駄な空メールが届くこともない。
このスクリプトを作ったことで、cronを介さなくても、手軽に何でも我輩宛てに メールの形で残すことができるようになった。例えば、ls | mail2admin などとすると数秒後に lsの結果がメールで届くのだ。ホームディレクトリが一時ファイルで汚れることがないし、 後から参照するのも楽なので、非常に重宝している。ただ、切り貼りには向かないが。