メールの自動処理アプリとメールサーバ設定TIPS

またうまいタイトルが思いつかなかったが、つまり、 送られてきたメールを自動的に読み込んでしかるべく処理してしまおうという アプリを作る際のほんのちょっとしたコツのお話。 先に断っておくが自前のメールサーバを用意しているのが前提である。

誰でも思いつくのが、アプリがPOP3をしゃべってメールサーバからメールを取り込む、というアプローチだ。有名なグループウェア「サイボウズ」のWebメール機能がこれにあたる。物販サイトから自動送信される注文メールを自動的に読み取って自前の受注データベースに入れてくれるアプリなどもそうだ。楽天市場の出店者に重宝されているらしい。

だが、一般のメールクライアントと同じようにPOP3を使うだけが手段ではない。

sendmailやpostfixなどのメールサーバのエイリアス機能は、 届いたメールをパイプでコマンドに渡すということができる。/etc/aliasesファイル等に次のように書く。

root: hogehoge    ←普通のエイリアス
hogeap: "|/usr/bin/perl /hoge/hogeap.pl" ←アプリに渡す場合
hogeap2: hogeuser,"|/usr/bin/perl /hoge/hogeap.pl" 
↑普通のユーザーメールボックスとアプリの両方に渡す場合(安全)
これで、hogeap@example.comに届いたメールは全てhogeap.plというアプリに標準入力で渡される。あとはアプリのつくり次第だ。ヘッダや本文を解析してデータベースに直接入れるもよし、誰かに改めて転送するもよし。メーリングリスト運用ソフトなどで古くから使われている手法だ。

もちろん言語はperlに限らずshでもJavaでもPHPでもrubyでもなんでもよい。一定間隔でPOPで読み込みに行くより、こんなふうに受信するたびに直接処理できたほうが楽ではないだろうか。

postfixのバーチャルエイリアス機能を使うともっと面白いこともできる。

@mailap.example.com mailap
virtualテーブルにこのように書いておくと、***@mailap.example.com宛てのメールは全てmailapというユーザーに転送される。さらに組み合わせ技としてaliasesテーブルに
mailap: "|/usr/bin/perl /hoge/mailap.pl"
のように書いておけば、mailap.example.comドメイン宛てのメールを全てmailap.plに読み込ませることができる。メールのあて先のアカウント部分(@の左側)はなんでもよいので、その部分を変数にすることができる。 変数には例えばユーザーIDなり日付なりそのハッシュ値なりを入れておいてアプリ側で判断できるようにしておけば、「user01-20060210-abc123@mailap.example.comにメールを送るとその本文があなたのブログに掲載されます。ただしこのメールアドレスは2月10日の24時間のみ有効です」といったサービスが可能だ。楽天広場などのブログサービスでおなじみ。

当然、メールサーバ上でアプリが動くことになるので、通常のメールボックスへの格納よりは負荷がかかるが、後でアプリが処理しやすいような形式のファイルにして保存しておくとか、簡単な解析だけやってデータベースに格納するくらいにしておけばそれほどでもないだろう。届いたメールに対するより複雑な処理は、その格納しておいたファイルなりDBなりに別なサーバからアクセスしてやらせることでメールサーバの過負荷を避ける方法もある。

メールを送信するアプリの話なら本屋でも技術系サイトでもどこにでもある。 しかしメールを受信してどうにかするアプリの話は意外と少ない。それは自前のメールサーバが必要になるケースが多いのが原因かもしれない。 しかし、先日話した専用レンタルサーバならそれが可能だ。 興味を持ってもらえれば先日の記事も報われるかな。

トラックバックURL

このエントリーのトラックバックURL:
http://www.ywcafe.net/mt/mt-tb.cgi/525

コメントする

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)


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