メール受信時にプログラムを自動実行する — 設定と実装ガイド
作成日:2007.11.20
特定のメールアカウントに届いたメールをトリガーにして、自動でプログラムを実行する方法を解説します。メール処理を行うための設定方法(aliases、~/.forward、procmail)と、そのメールを読み取って処理するPerlスクリプトの書き方を紹介。自動返信やデータベース登録など、幅広い用途に応用できます。
error この記事は最終更新日から17年以上が経過しています。
メールが届くと同時に何らかのアクションを起こすプログラムというのは、かなり作る機会の多い部類に入るかと思います。
ここ数年で特に多いものだと、ケータイ向けサイトの案件で、空メールを受信したら自動でユーザー登録用のフォームのアドレスを書いたメールを、空メール送信者に送る、みたいなものとか、ブログや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 (人工無脳)に覚えさせる」とか、色々とやれば良いわけです。
CPANの基本操作と古いモジュールのインストール方法
2025.01.31
Perl開発で欠かせないCPANを活用するための基本操作について解説します。特に、古いバージョンのモジュールをインストールする手順も丁寧に紹介しています。
Perlのデバッグを効率化するためのData::Dumper活用法
2025.01.29
Perlのデバッグに便利なData::Dumperの使い方を解説します。変数や配列の出力方法、ネスト構造の扱い、出力フォーマットのカスタマイズなど、効率的なデバッグ手法について具体例を交えながら紹介します。
XAMPP環境にStrawberry Perlを導入する方法:Windowsでの設定手順
2025.01.27
Windows版XAMPPに同梱されている簡易版Perlを、より機能豊富なStrawberry Perlに置き換える手順を解説します。ダウンロードから環境変数の設定、動作確認まで、順を追って説明しています。
PHPとPerlでファイルパーミッションを変更する方法(chmod関数)
2024.11.16
PHPとPerlには、ファイルのパーミッションを変更するためのchmod関数が標準で用意されています。この記事では、PHPとPerlそれぞれのchmod関数を使ったファイルパーミッション変更の基本的な使い方を紹介します。