Kodama's home / tips.

.forward で簡易着信通知

携帯などにメールの着信通知を行う方法. メールが着信する毎に, メール表題部分を携帯などに転送することで 着信通知のように利用することができます.
  1. スクリプトの作成
  2. スクリプトの動作試験
  3. bit.bucket の作成
  4. .forward の作成
  5. メールの自動転送を停止する

スクリプトの作成

.forward から起動する, 転送処理用のスクリプトを作成します. メールを走査して, From と Subject を取り出します.
  1. /usr/local/bin/mail-filter.sh スクリプトを作成する.
  2. パイプからメールを読み込み, 着信メールを作成し, sendmail にわたす.
  3. 元の本文は削除.
  4. Subject と From を取り出し, (MIME変換して) 本文に書き込む.
  5. Subject に [notify] を追記.
  6. From を mail-system@sample.notify.ac.jp とする. (適当に書き換える)
  7. エラーメールの帰り先を bit.bucket@sample.notify.ac.jp とする. (適当に書き換える)
    エラーメールの循環を引き起こさないために,注意が必要.
  8. sendmail, nkf, gawk 等が必要です.
  9. chmod +x して実行可能にしておく.
/usr/local/bin/mail-filter.sh の内容:
#!/bin/sh
# Usage:  $0 recipient [sender]
# K.Kodama 2012.09.05

SENDMAIL=/usr/sbin/sendmail
SOPT="-bm -f bit.bucket@sample.notify.ac.jp"
AWK=/usr/bin/gawk
NKF=/usr/bin/nkf
AOPT="-v nkf=$NKF -v sender=mail-system@sample.notify.ac.jp"

if [ $# -eq 2 ] ; then AOPT="-v nkf=$NKF -v sender=$2" ; fi
if [ $# -gt 0 ] ; then
    $AWK $AOPT 'BEGIN{s=0;sub0="";sender0=""}
(s==1)&&/^[ \t]/{sub0=sub0"\n"$0;print;next}
(s==2)&&/^[ \t]/{sender0=sender0"\n"$0;next}
(s>0)&&/^[ \t]/{print;next}
{s=0}
/^Subject: /{s=1;sub0=$0;sub(/^Subject:/, "Subject: [notify]");print;next}
/^From: /{s=2;sender0=$0;print "From: " sender;next}
/^To: /{s=3;print;next}
/^Date: /{s=4;print;next}
/^$/{print;exit}
END{print "Original From/Subject.";print sender0|nkf" -mj";print "\n";print sub0|nkf" -mj"}' | $SENDMAIL $SOPT $1
fi

スクリプトの動作試験

スクリプトの最後の方の
 | $SENDMAIL $SOPT $1
の辺りをコメントにして, メールのサンプルファイルを用いて, 次のように試験します. 試験の後はコメント部分を元に戻します.
$  mail-filter.sh  test-recipient < sample-mail
Date: Wed, 5 Sep 2012 18:12:15 +0900
To: K.Kodama 
From: mail-system@sample.notify.ac.jp              < From が書き換わる
Subject: [notify] mail =?iso-2022-jp?B?GyRCJE4bKEIg?=forward=?iso-2022-jp?B?GyRCO246bhsoQg==?=  < Subject に [notify] を追記

Original From/Subject.                             < 本文に元の From, Subject


From: Test User 
Subject: mail の forward試作

bit.bucket の作成

メールの捨て場所を作成します. メールを /dev/null に送ります. /etc/aliases ファイルに以下のように記述します.
bit.bucket: /dev/null
newaliases します.

.forward の作成

メールサーバにログインして, ~/.forward ファイルを作成します. (メールサーバでのログイン名を sample-user1, 転送先を sample-user2@example.com とします.)

[注意] .forward の作成を誤るとメール障害を引き起こす可能性があるので注意してください.

.forward の内容:

"| /usr/local/bin/mail-filter.sh  sample-user2@example.com"
\sample-user1

1行目が抽出と転送処理です.

2行目は元のメールサーバにメールを残す記述です. メールアドレスの先頭に \ (バックスラッシュ) がついています. つけ忘れると無限にメールを発送し続ける障害を引き起こします. \ (バックスラッシュ) は画面上やキーボードでは ¥(円記号)で表示されている場合があります.

.forward を書き換えたらすぐに, メールの転送などに異常がないか確認します.

異常があった場合はすぐにメールの自動転送を停止します.

メールの自動転送を停止する

.forward ファイルを削除すると停止します.

rm ~/.forward
機能は停止するが, .forward の内容は残しておきたい場合, 次のようにします.
mv ~/.forward  ~/forward.backup

Kodama's home / tips.