ノリブログ?

メール自動返信プログラム

カテゴリー:Linux

以下のような仕様の「メール自動返信プログラム」を作成しました。最終的には.forward + perlで実装したのですが、その経緯を3回に分けて書いていきたいと思います。最初にまず、.forwardとprocmailを利用して実装しようと試してみたのでその詳細を書きます。

仕様と環境

まず、今回作成した「メール自動返信プログラム」の仕様を書いておきます。

  • 特定のメールアドレスに空メールを送信(携帯からを想定)
  • すると、その携帯にURLが本文に入ったメールが届く
    • 今回のプログラムでは会員登録フォームのURL
    • URLのパロメータにメールを送信した携帯のメールアドレスが入っているように
    • ただしメールアドレスをそのまま入れるのは問題なのでなんらかの方法でハッシュ化

というようなプログラムを作成することにしました。

作成したサーバの環境は以下のとおりです。

  • OS:CentOS-4
  • メールサーバ:postfix

.forward

.forwardはunix環境に実装されているメール自動転送プログラムです。各ユーザのホームディレクトリに.forwardファイルを作成して、転送先アドレスを決まった記法に従ってかくとメールを自動転送してくれます。また、メール受信時にコマンドやプログラムを実行させることができます。
今回はautoresponseというユーザを作成して、/home/autoresponseディレクトリに.forwardを作成しました。
これでautoresponse@foo.comにメールが送信されると.forward内での設定を実行することができます。

PROCMAIL

.forwardでメールを転送することができますが、今回作りたいプログラムは単なる自動転送ではなく、本文にURLを入れて自動返信するプログラムなので.forwardから他のプログラムを呼び出す必要があります。
そこでメールの振り分けを行うソフトウェアであるPROCMAILを利用するやりかたをまず試してみました。
まず、/home/autoresponse/.forwardを以下のような内容にします。これでautoresponse@foo.comにメールが送られたときにPROCMAILを実行するように設定できました。

"|IFS=' ' && exec /usr/bin/procmail -f- || exit 75 autoresponse"

ではPROCMAILの設定を行います。PROCMAILの設定はホームディレクトリに.procmailrcというファイルを作成することで設定することができます。以下のような内容の.procmailrcを作成してみました。
メールを受信すると、相手のアドレスに定型文を送るような設定にしています。
タイトルの部分については、あらかじめmimeエンコーディングしたものをいれていることに注意してください。
procmailの更に詳しい設定方法については以下のURLを参考にしてください。http://www.jaist.ac.jp/~fjt/procmail.html

:0 h c
* !^FROM_DAEMON
* !^X-Loop: autoresponse@nanbu.com
| (formail -r -A"Precedence: junk"
-i "Subject:タイトル "
-A "X-Loop: autoresponse@foo.com" ;
echo "以下を押してください")  | nkf --jis | grep '^To: ' | $SENDMAIL -t

これでメールを送信してきたアドレスにたいして定型文が本文に入ったメールを自動応答させることができます。
ただ今回の仕様の「相手の送信元のアドレスをハッシュ化してURLを生成」を満たすにはprocmailで実装するよりもperlでの実装を行ったほうが簡単に行えそうなので、次回、perlでの実装についての記事を書きたいと思います