メール自動返信機能の導入(procmail)

ここでは、procmailというソフトを利用して、メールの件名が、設定条件にマッチした場合のみ自動返信させる方法を紹介します。
設定はファイルにメールの配送条件を(レシピ)記述するだけです。
また、題名や差出人ごとに振り分けて転送したり、SPAM(迷惑)メールの削除等も行う事ができます。


# rpm -qa|grep procmail ← procmailがインストール済みかチェック
procmail-3.22-0vl3

無い場合はapt-getでインストールすれば良いと思います。

# which procmail ← procmailの場所を調べる
/usr/bin/procmail

procmailの設定


※ ここからは自動返信したいユーザーで作業します。
ここでは、例としてユーザーyosiとします。

# su - yosi ← yosiになる

動作を有効にする設定

ユーザーのホームディレクトリに「.forward」というファイルを置きます。

$ vi .forward ← .forwardファイルを作成
 i キー(入力モード)

"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 #ユーザー名" ← procmailの場所とユーザー名を指定

記載したら Esc キー(コマンドモード) :wq で保存


次にホームディレクトリに「.procmailrc」というファイルを作り、目的別に以下のレシピを記述してください。
2つ以上のレシピを書くことも可能。

$ vi .procmailrc ← .procmailrcファイルを作成
 i キー(入力モード)

MAILDIR=$HOME/Maildir ← メールディレクトリのパス
DEFAULT=$MAILDIR/  ← 配送条件(レシピ)にマッチしなかった場合の配送先
LOGFILE=$HOME/procmail.log ← ログの場所
LOCKFILE=$HOME/.lockfile ← ロックファイルの場所

# ↓これをレシピと言います。

:0
* ^Subject:.*iso-2022-jp
* ^Subject:.*\/.*
* ? echo "$MATCH" | nkf -me | egrep 'メールの件名' ← この件名にマッチしたメールのみ自動返信
| (/usr/bin/formail -r -A"Precedence: ユーザー名" \
-A"From:ユーザー名 <ユーザー名@xxxxx.com>" ;\ ← ユーザー名と、ユーザーメールアドレス
cat /home/ユーザー名/hensin.txt) |\ ← 自動返信のメール本文用のテキストの場所
/usr/sbin/sendmail -t

記載したら Esc キー(コマンドモード):wq で保存

レシピ再設定の際の注意点




Yosiの場合、どう言う訳か、.procmailrcファイルを再編集したら、自動返信が突然できなくなりました。
色々調べた結果、文字コードがEUC-JPで、保存できていなかったのが原因でした。

レシピを書き直す際に、日本語部分が文字化けしているようならば、文字コードがSHIFT-JIS
なっている可能性があります。
その場合、viの設定が必要になります。

再設定の際、下記コマンド(コマンドモード)で現在の文字コードを調べます

 :set fileencoding
 fileencoding=sjis ← もしこのようになっていればSHIFT-JISと言う事です。

SHIFT-JISの場合、そのまま編集して日本語に直すとメール返信がうまく行えなくなります。


viの設定

$ vi ~/.vimrc ←ホームディレクトリに、.vimrc というファイルを作成
 i キー(入力モード)

set encoding=japan
set fileencodings=euc-jp,iso-2022-jp,utf-8,shift-jis,cp932
set fileencoding=euc-jp

編集したら Esc キー(コマンドモード):wqで保存


これで、文字コードを自動認識するようになり、最初にファイルを作成した場合 euc-jp で保存するようになります。

自動返信用メール本文のテキスト作成

Windwsマシンの、メモ帳等で自動返信する際の文章を記載して「hensin.txt」というファイル名で保存します。
なぜ、Windwsマシンで記載するかと言うと、文字コードがSHFT-JISなので、メール本文が文字化けしないのと、
簡単にメール本文を変更しやすいからです。

※ hensin.texの名前は任意で結構です。(メモ帳の場合hensinで保存すると自動的にhensin.txtになると思います。)

次に保存したファイルをFTPで先ほどレシピで指定したユーザーの、ホームディレクトリへアップします。

自動返信のテスト

自動返信を設定したユーザー宛に、先ほどレシピで指定した件名でメールを、送信します。

即、ユーザーから件名が、「Re:件名」で本文が、先ほど作成した返信用メール本文が記載されていれば、
うまく自動返信ができています。

自動返信の解除方法

メール自動返信設定を解除するには、.forwardファイルを削除すればOKです。


$ rm -f .forward ← forwardファイルを削除

その他に便利なレシピの書き方の紹介




自動返信だけでなく、そのメールを受信したい場合

:0c ← 先ほどと似てますがメール受信する場合はここに「c」を付けます。
* ^Subject:.*iso-2022-jp
* ^Subject:.*\/.*
* ? echo "$MATCH" | nkf -me | egrep 'メールの件名'
| (/usr/bin/formail -r -A"Precedence: ユーザー名" \
-A"From:ユーザー名 <ユーザー名@xxxxx.com>" ;\
cat /home/ユーザー名/hensin.txt) |\
/usr/sbin/sendmail -t
$HOME/Maildir ← 追記


メール受信してから、時間をずらして送信するには
sleepコマンドで一定時間経過後にformailコマンドへパイプします。

この部分に追記(この場合10分後と言う意味です)
     
| (sleep 10m ; /usr/bin/formail -r -A"Precedence: ユーザー名" \

例)
sleep 1s (1秒 sleep)
sleep 2m (2分 sleep)
sleep 3h (3時間 sleep)
sleep 4d (4日 sleep)




Copyright c Vine Linuxで自宅サーバー. 2004 All Rights Reserved.