Top / Linux / .forwardでメール受信時いろいろな処理をする。

メールサーバの転送機能.forward

Fedoraなどのディストリビューションには、メールサーバとしてPostfixが標準でインストールされていることが多いと思います。

このPostfixには*1メールを転送するための仕組みとして.forwardファイルというのがあります。このファイルに宛先を書いておけば、その宛先にメールが転送されるという仕組みです。

[fuga@www ~]$ cat ~/.forward
hogehoge@foo.com
[fuga@www ~]$ 

と書いておけば、このアカウントにメールが来たらhogehoge@foo.com にメールが転送される、ってことですね。

で、この機構なのですがパイプを使って「転送先としてプログラムを指定する」ことができます。具体的には

[fuga@www ~]$ cat ~/.forward
"| /home/fuga/test.pl"
[fuga@www ~]$ 

って書くことで、 test.pl に標準入力としてメールの内容が入ってくる、というわけです。これは結構便利で、うまく使えばメールの集計とか、スパムフィルタとかに応用できそうです。

パイプは普通のUnixの機能なので

"| [メールの中身をいろいろチェックする処理] | /home/fuga/test2.pl"

とかして上の処理で「標準入力からメール情報を読み取って色々加工して、標準出力に出力する」などをすればフィルタ処理の完成です。

ちなみにここまで書いといて、処理をかませた後、さらにメールアドレスに転送するってどうやるんですかね??誰かおしえてくださーい。

post2blogとかに応用するとか

たとえばpost2blog.plなどは、.forwardを使ってメールからXML-RPCするプログラムに処理を渡すわけですが、post2blog.plにメールを渡す前にプログラムを一個かませて、ソースIPやメーラなどをチェックして特定の条件を満たすメールだけ取り込んであげる、などとすればセキュリティも向上しそうです*2

ちなみに

ちなみにこの.forwardですが、複数箇所にメールを転送したい場合は、改行して複数のメールアドレスを書けばOKです。同じ考えで、複数の処理を行いたい場合は、

[fuga@www ~]$ cat ~/.forward
"| /home/fuga/test.pl"
"| /home/fuga/test2.pl"

などと書いておけばOKです。

関連リンク


この記事は

選択肢 投票
おもしろかった 6  
そうでもない 0  
  • /home/fuga/test2.plのロジックでメールを送信するとか、test2.plは正常な結果を標準出力へ出力してpostfixに渡したらどうですか? -- 通りすがり? 2010-12-06 (月) 17:14:43

Top / Linux / .forwardでメール受信時いろいろな処理をする。

現在のアクセス:18510


*1 sendmailとかもですね
*2 JavaMail?とか使って、Javaでフィルタ処理書いてみるかなー。post2blog.plにはちょこちょこっと修正させてもらって、入力が○○だったら処理しない、みたいな。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-10-11 (日) 20:44:14 (1413d)