メール受信時に perl スクリプトを起動して自動処理させる方法

2007年11月20日 10:46 メール受信時に perl スクリプトを起動して自動処理させる方法

メールが届くと同時に何らかのアクションを起こすプログラムというのは、かなり作る機会の多い部類に入るかと思います。

ここ数年で特に多いものだと、ケータイ向けサイトの案件で、空メールを受信したら自動でユーザー登録用のフォームのアドレスを書いたメールを、空メール送信者に送る、みたいなものとか、ブログやSNSの日記なんかを、ケータイメールで投稿できるようにする処理とかですね。
そして王道の自動返信メールとか。

後、途中で飽きちゃったんですが、昔、送られてくるメールの内容を自分で学習して言葉を覚えて、文章を生成して返信する bot (人工無脳)を趣味で作ってたことがあります。

で、実際こういう「メールを受け取ったら何らかの処理を自動で行なう」という機能を実現するには、どうすれば良いかというと、

  1. 特定のメールアカウントにメールが届いた際に、何らかのプログラムが起動するように設定する
  2. そのプログラムを書く

という二つのステップが必要になります。

まずは、この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 (人工無脳)に覚えさせる」とか、色々とやれば良いわけです。

阿部辰也へのお仕事のご依頼・お問合せはこちら

Twitter始めました。Followはお気軽にどうぞ。

関連するブログ記事
スポンサード リンク
カテゴリー
Linux/UNIX | perl/CGI
タグ
.forward | aliases | perl | procmail | sendmail | SMTP | UNIX | ケータイメール | コマンドライン | メール | モバイル | レンタルサーバー | 人工無脳
現在位置
TOP > Web制作技術 > perl/CGI > メール受信時に perl スクリプトを起動して自動処理させる方法
前のブログ記事
ケータイサイトのフォーム入力の文字種別を指定する方法 [2007年11月19日 23:59]
次のブログ記事
PHP でファイルの MIME-Type を判別する方法 [2007年11月21日 02:26]

トラックバック(3)

このブログ記事に対するトラックバックURL:
» CakePHPコントローラーをメール受信をきっかけに起動する(CPA-LABテクニカル)のトラックバック [2008年5月15日 09:01]
■CakePHPシェル機能を使用せずに、空メールを実現する-さくらインターネット編CakePHPにはシェル機能というものがあり、コマンドラインからCake... 続きを読む
» 量子场英语(量子场英语)のトラックバック [2010年10月 4日 23:22]
量子场英语 続きを読む
» Diary/2010-10-31(PukiWiki (PukiWiki/TrackBack 0.3))のトラックバック [2010年10月31日 21:00]
Diary メール受信時に perl スクリプトを起動して自動処理させる方法 | perl/CGI | 阿部辰也のブログ――人生はひまつぶし。 -- na... 続きを読む

コメント(14)

宮里 [2009年4月16日 13:36]

こんにちは、メール受信時のCGIの起動という記事についてです。 あまりにも簡単に行っているので羨ましく思い コメントしております 私はそれと戦って約3週間になりますが未だ解決しておりません お知恵をお借りできればと思います Win + Xampp でサーバーを仕立てておりますが何処をどの様に設定すればよいかわかりません メールの送受信は可能です お助け下さい

Tatsuya [2009年4月17日 12:17]

> 宮里さん

Windows のサーバー周りは正直あまり詳しくないのですが、XAMPP を使用されているということは、メールサーバーは Mercury を使用されているのでしょうか。

XAMPP のコントロールパネルから Mercury の管理ツールを起動して、
「Configulation」⇒「Filtering rules」⇒「Edit global rules」で、メール受信時のフィルターを色々設定できるみたいです。
そこで「Add rule of type」で適当に条件を設定して「Then do this」⇒「Action」の欄で「Run a program」を選択し、「Parameter」に起動するスクリプトを指定すれば動くような気がします。

山田 [2009年6月19日 22:58]

「指定したプログラムの標準入力に、受け取ったメールの内容を渡す」
この処理を具体的にお願いできないでしょうか?

サブジェクト
本文

メールを処理する perl スクリプトの書き方の例を是非お願いします。

viagra [2014年4月25日 07:05]

Hello!

viagra [2014年4月27日 00:27]

Hello!

viagra [2014年4月27日 00:28]

Hello!

about us [2014年7月28日 18:09]

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

Michael Kors Wallets Sale [2014年9月21日 01:53]

df
Michael Kors Wallets Sale http://www.andreaseigel.com/bin01/mk.html

fast [2015年3月25日 19:42]

Hello!

viagra_equivalent [2015年4月 8日 23:26]

Hello!

for [2015年4月 8日 23:27]

Hello!

cheap essay writing service [2015年10月 2日 20:25]

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!

buy_viagra [2015年12月25日 00:03]

Hello!

viagra [2015年12月25日 08:31]

Hello!

コメントする


画像の中に見える文字を入力してください。

 

このブログについて

阿部辰也

Webコンサルタントやシステムエンジニア、執筆業などをやっている、グッドホープ代表・阿部辰也のブログです。
Web技術系のTipsから仕事の話、趣味の話まで色々と。
人生は所詮生まれてから死ぬまでの壮大な暇つぶし。
だったら有意義に暇をつぶして生きましょー。

阿部辰也へのお仕事のご依頼・問合せはこちらからどうぞ。

Twitter: @t_abe
読書メーター: ID:Tatsuya

このブログのサイトマップ
このブログのはてなブックマーク数

Feed/RSS購読

タグクラウド

最近のトラックバック

阿部辰也の著書

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

77のキーワードで知る インターネットで稼ぐ 図解 ブログ・メルマガ・Webサイト構築の基本

頑張って書いたのに、出版後すぐに出版社が倒産して印税も貰えずじまいで俺涙目(笑)。

Powered by Movable Type 5.02

スポンサード リンク

はてなブックマーク



あわせて読みたい

t-abeの今読んでる本

t-abeの最近読んだ本

t-abeの今やってるゲーム

t-abeの最近やったゲーム