以下の設定で、大学端末にログイン中に大学鯖に届いたメールを転送しないように制御します。

手順(1): .forwardファイルの設定。
  ホームディレクトリの.forwardファイルの先頭に、
    "|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75 #s1090011"
  と書く。s1090011のところは、自分のIDです。もちろん。
もし、すでに.forwardファイルが存在していて、
  \s1090011@u-aizu.ac.jp
dancho@muscle.com
  とか入っていたときは、削除しましょう。

手順(2): .procmailrcファイルの設定。
  ホームディレクトリの.procmailrcファイルに、
  SHELL=/bin/sh
LOGFILE=$HOME/procmail.log
MAILDIR=$HOME/Mail
:0c
* !?(/home/circle/gcc/bin/esoko s1090011 | /usr/bin/grep s1090011 > /dev/null)
! dancho@muscle.com
  と書きます。
ユーザID,転送先アドレス(この場合dancho@muscle.com)などを設定しましょう。
この記述がどういう意味かというと、
[ LOGFILE=$HOME/procmail.log ]
  ログが~/procmail.logに残ります。
エラーメッセージ、受信メールの情報など。
  [ :0c ]
  続く一連の処理を実行します。
cは、受信メールをinboxにいれるとともに、
そのコピーを続くスクリプトに渡して処理させます。
  [ * !?(/home/circle/gcc/bin/esoko s1090011 | /usr/bin/grep s1090011 > /dev/null) ]
  この頭が*で始まる行は、条件を指定します。
この条件が真ならば、次の行にかかれている処理をします。
ちなみに、!は続く条件の否定。
?は条件として続くコマンドの結果の終了コードを用いること
(これをつけないときは、正規表現として扱われる)
を意味しているので、esokoでログインしているか調べて、
ログインしていなかったら次の処理。
  [ ! dancho@muscle.com ]
  この頭が!で始まる行は、続くメールアドレスに、
メールを転送する命令になっています。

  以上を総合すると、
ログインしていないときはdancho@muscle.comにメールを転送し、
大学の鯖にもちゃんとメールが通常通り入る、ということになります。


手順(3): 各ファイルのパーミッション設定。
  .forward,.procmailrc両ファイルのパーミッションを600に設定しましょう。

これで終わり。
ただ、スクリプト見ると、esokoの出力を借りています。
ので、ログイン直後や、ログアウト直後は、
メールが転送されてしまうかもしれません。
そのへんを解決するスクリプトは、現在考え中。
多分、fingerあたり使うかと。





Back