前回は本当にさわりだけだったので、今回は実際に役に立つ機能を加えたいと思います。実際にどんな機能を実装しようかと考えたのですが、以前qmailでMTAを運用しているときに独自に追加したGeoIP関連の処理を追加することにしました。
GeoIPはMaxMind社が提供しているサービス及びデータベースの事で、IPアドレスから国や地域を調べることが出来ます。基本有料のサービスなのですが、精度が少し低くて更新が自動で出来ないバージョンは無料で利用出来ますので、今回はこれを利用します。
GeoIPデータベースを使うと国や地域だけでなく都市名なども分かるのですが、今回は国名と座標をメールヘッダーに追加します。
GeoIPを利用するためにまずライブラリのインストールを行います。MaxMindの開発者向けページを見るとGeoIP2というのも出てきていますが、これから実装する機能にはLegacy版で十分ですので、Debianにあるパッケージを使ってちゃっちゃとインストールします。他のディストリビューションやOSをお使いの方は先ほどのページを参考に頑張って下さい。
Liquid error: undefined method `safe’ for nil:NilClass
これで開発の準備は完了です。
さっそくソースコード見て下さい。前回の説明した最小限の構成と比べるとlocal_scan関数に少しばかりコードが増えていますが、やっていることは簡単で以下のような事を行っています。
Liquid error: undefined method `safe’ for nil:NilClass
コンパイルして配置します。 Liquid error: undefined method `safe’ for nil:NilClass
Eximに設定を追加して再起動します。 Liquid error: undefined method `safe’ for nil:NilClass
届いたメールにX-Geoip-*
から始まるヘッダーが二つ追加されていれば問題無く動作しています。local_scanがクラッシュしてもExim本体側で絵エラーハンドリングされるはずですが、テストもしないでいきなり本番サーバーで実行したりなど無謀な事はしないで下さい。何が起こっても当局は一切関知しません。