メール受信時に perl スクリプトを起動して自動処理させる方法
メールが届くと同時に何らかのアクションを起こすプログラムというのは、かなり作る機会の多い部類に入るかと思います。
ここ数年で特に多いものだと、ケータイ向けサイトの案件で、空メールを受信したら自動でユーザー登録用のフォームのアドレスを書いたメールを、空メール送信者に送る、みたいなものとか、ブログやSNSの日記なんかを、ケータイメールで投稿できるようにする処理とかですね。
そして王道の自動返信メールとか。
後、途中で飽きちゃったんですが、昔、送られてくるメールの内容を自分で学習して言葉を覚えて、文章を生成して返信する bot (人工無脳)を趣味で作ってたことがあります。
で、実際こういう「メールを受け取ったら何らかの処理を自動で行なう」という機能を実現するには、どうすれば良いかというと、
- 特定のメールアカウントにメールが届いた際に、何らかのプログラムが起動するように設定する
- そのプログラムを書く
という二つのステップが必要になります。
まずは、この1ステップ目の「特定のメールアカウントにメールが届いた際に、何らかのプログラムが起動するように設定する」方法について、簡単にまとめてみます。
aliases を使う場合
aliases の設定と使い方についてのメモにも書きましたが、下記のようにすることで、特定のアカウントに届いたメールを、パイプを使って直接何らかのプログラムに渡して実行することができます。
entry: "|/home/tatsuya/entry.pl"
上記の例では、「entry」というメールアカウントにメールが届いた際に、自動的に「/home/tatsuya/entry.pl」という perl スクリプトが起動するように設定しています。
~/.forward を使う場合
サーバーの各ユーザーアカウント毎に、個別に設定が可能な ~/.forward を使う場合は(レンタルサーバーを使う場合はこちらの方が利用する機会が多いかもですね)、~/.forward に以下のように書けばOKです。
"|exec /home/tatsuya/entry.pl"
procmail を使う場合
届いたメールに対して、自動でマッチング処理等を行なって、結果によって行なう処理を振り分けてくれる便利な存在である procmail を使う場合は、~/.procmailrc に以下のように書きます。
:0 : * ^To: entry | /home/tatsuya/entry.pl
「^To: entry」の部分は正規表現が使えるので、メールのヘッダ(FromやSubject等)に対して細かい条件を設定して振り分けることで、一つのメールアカウントで様々な処理を行なうことができるのも良いですね。
メールを処理する perl スクリプトの書き方
さて、続いて第2ステップ「そのプログラムを書く」の部分です。
aliases、~/.forward、procmail の三種類の設定方法を紹介しましたが、どの方法を用いても、「指定したプログラムの標準入力に、受け取ったメールの内容を渡す」というのは同じです。
つまり、受け取る側の perl スクリプトでは、標準入力の内容を読めば良いだけです。
while(<STDIN>){
#-- 「$_」にメールの内容(ヘッダも本文も添付ファイルも全て)が
#-- 一行ずつ代入されていくので、正規表現とかを使って色々処理する
}
これだけです。
後は、「メール送信者のアドレスをデータベースに登録しておいて、ユーザー登録用のURIを生成してメールを返信する処理を書く」とか、「メール送信者のアドレスからユーザーIDを引っ張ってきて、メール本文の内容をそのユーザーIDの日記に投稿させる」とか、「本文を形態素解析して、内容を bot (人工無脳)に覚えさせる」とか、色々とやれば良いわけです。
- 関連するブログ記事
-
- 現在位置
- TOP > Web制作技術 > perl/CGI > メール受信時に perl スクリプトを起動して自動処理させる方法
- 前のブログ記事
- ケータイサイトのフォーム入力の文字種別を指定する方法 [2007年11月19日 23:59]
- 次のブログ記事
- PHP でファイルの MIME-Type を判別する方法 [2007年11月21日 02:26]
コメント(14)
こんにちは、メール受信時のCGIの起動という記事についてです。 あまりにも簡単に行っているので羨ましく思い コメントしております 私はそれと戦って約3週間になりますが未だ解決しておりません お知恵をお借りできればと思います Win + Xampp でサーバーを仕立てておりますが何処をどの様に設定すればよいかわかりません メールの送受信は可能です お助け下さい
> 宮里さん
Windows のサーバー周りは正直あまり詳しくないのですが、XAMPP を使用されているということは、メールサーバーは Mercury を使用されているのでしょうか。
XAMPP のコントロールパネルから Mercury の管理ツールを起動して、
「Configulation」⇒「Filtering rules」⇒「Edit global rules」で、メール受信時のフィルターを色々設定できるみたいです。
そこで「Add rule of type」で適当に条件を設定して「Then do this」⇒「Action」の欄で「Run a program」を選択し、「Parameter」に起動するスクリプトを指定すれば動くような気がします。
「指定したプログラムの標準入力に、受け取ったメールの内容を渡す」
この処理を具体的にお願いできないでしょうか?
サブジェクト
本文
メールを処理する perl スクリプトの書き方の例を是非お願いします。
Hello!
Hello!
Hello!
This really is my third order. My first order was for to me these people were good. Next order for a daughter-in-law. She loved them. my first order was black patent leather. This period I ordered the beige......I want THEM..... Thank you so much.
about us http://ephvac.ca/images/truereligion6.htm
df
Michael Kors Wallets Sale http://www.andreaseigel.com/bin01/mk.html
Hello!
Hello!
Hello!
It is really interesting to read the post from here! You have presented in an extremely well manner. I have enjoyed it thoroughly. Expect many more articles from you. Please share with us!
Hello!
Hello!
コメントする