IRCとメールとの間でメッセージをやりとりする機能の実験的な実装。
アーキテクチャの概略を下図に示します。
+----+ SMTP +-------------+ SMTP +--------+
|Mail|<--------|< - - - - - -|<---------------[migw.pl]<-------->| IRC |
|User| | mail server | ^ | Server |
| |-------->|- - - - - - >|-->[.forward] |socket +--------+
+----+ +-------------+ | |
+------>[minjector.pl]
上図の
migw.pl および
minjector.pl の部分が今回作成した部分です。
migw.pl は、IRCクライアントとして目的のチャンネルにJOINしており、 IRC内での発言を受信します。 受信された発言はメールに変換され、SMTPサーバに渡されます。
一方、メールからIRCへの転送は、メールサーバでの .forward あるいは .procmailrc などの設定により メールのヘッダおよび本文が minjector.pl というプログラムに引き渡されます。
minjector.plは、標準入力からメールのヘッダと本文を読み込み 一定の形式に変換した後、Unixドメインソケットを経由して migw.pl に 引き渡され、最後に IRCネットワークのJOINしているチャンネルで 発言されます。
IRC/SMTPゲートウェイの設置と運用は、通常ユーザの権限で可能です。
以下の例では、設置と運用を行うユーザのホームディレクトリ直下にmigwというディレクトリを
作成し、その中にスクリプトや設定ファイルを置く場合を想定して説明を行っています。
というモジュールを使用しますので、 これらのモジュールがない場合は、CPANあるいはOS毎に 用意されているパッケージシステムなどからインストールします。
# 各種パラメータ設定
#
$IRC_NICK = 'migw';
$IRC_SERVER = 'irc.example.net';
$IRC_PORT = 6667;
$IRC_NAME = 'IRC/SMTP gateway';
$IRC_CH = '#foo';
$IRC_MAXLINES = 20;
$IRC_ITIMEOUT = 120;
$IRC_CTIMEOUT = 150;
$SMTP_SERVER = 'localhost';
$SMTP_FROM = 'migw@example.com';
$SMTP_TO = 'talk-irc@example.org';
$SOCKPATH = $ENV{HOME} . "/migw/sample.sock";
$DEBUG = 1;
設定書式は、Perlの文法に従います。その他は、自明な項目だと思いますので省略します。
/.forwardに記述する場合
| perl $HOME/migw/minjector.pl $HOME/migw/sample.conf || exit 75
/.procmailrcに記述する場合
:0 * ^To: talk-irc@example\.org |perl $HOME/migw/minjector.pl $HOME/migw/sample.confPerlスクリプトや設定ファイルの置場は、実際のものに読み換えて下さい。
設置を行ったユーザアカウントでログインし、コマンドラインから以下のように実行します。
perl $HOME/migw/migw.pl $HOME/migw/sample.conf
設定ファイルで$DEBUGが1の場合、動作にしたがってメッセージが出力されますので、 実際にIRCで発言したり、$SMTP_TOで設定したアドレスにメールを送信したりして動作を確認します。