合資会社 満福

アプリ

会社概要

連絡先

合資会社 満福ブログ

Eximのlocal_scan動的読込み機能 その3

2013-10-08 04:08:00 +0900 - 土田岳雄

前回は本当にさわりだけだったので、今回は実際に役に立つ機能を加えたいと思います。実際にどんな機能を実装しようかと考えたのですが、以前qmailでMTAを運用しているときに独自に追加したGeoIP関連の処理を追加することにしました。

GeoIPとは

GeoIPはMaxMind社が提供しているサービス及びデータベースの事で、IPアドレスから国や地域を調べることが出来ます。基本有料のサービスなのですが、精度が少し低くて更新が自動で出来ないバージョンは無料で利用出来ますので、今回はこれを利用します。

GeoIPデータベースを使うと国や地域だけでなく都市名なども分かるのですが、今回は国名と座標をメールヘッダーに追加します。

GeoIPライブラリのインストール

GeoIPを利用するためにまずライブラリのインストールを行います。MaxMindの開発者向けページを見るとGeoIP2というのも出てきていますが、これから実装する機能にはLegacy版で十分ですので、Debianにあるパッケージを使ってちゃっちゃとインストールします。他のディストリビューションやOSをお使いの方は先ほどのページを参考に頑張って下さい。

Liquid error: undefined method `safe’ for nil:NilClass

これで開発の準備は完了です。

local_scanの作成(geoip-exim.c)

さっそくソースコード見て下さい。前回の説明した最小限の構成と比べると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本体側で絵エラーハンドリングされるはずですが、テストもしないでいきなり本番サーバーで実行したりなど無謀な事はしないで下さい。何が起こっても当局は一切関知しません。