IRC/SMTPゲートウェイ

2008-10-20
川俣吉広

IRCとメールとの間でメッセージをやりとりする機能の実験的な実装。

アーキテクチャ

アーキテクチャの概略を下図に示します。

+----+  SMTP   +-------------+      SMTP                         +--------+
|Mail|<--------|< - - - - - -|<---------------[migw.pl]<-------->| IRC    |
|User|         | mail server |                    ^              | Server |
|    |-------->|- - - - - - >|-->[.forward]       |socket        +--------+
+----+         +-------------+        |           |
                                      +------>[minjector.pl]

上図の filemigw.pl および fileminjector.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_MAXLINES
一通のメール本文からIRCへ送信される最大行数。メッセージ本文でこの行数を超えた部分はIRCチャンネルへは送信されない。
$IRC_ITIMEOUT
IRCからメールへ送信する場合のタイムアウト。IRCで発言のない期間がこの秒数を超えると、その時点までで送信されていなかったIRCの発言が、まとめて一通のメールとしてSMTPサーバに送信される。
$IRC_CTIMEOUT
IRCからメールへ送信する場合のタイムアウト。IRCで$IRC_ITIMEOUTによるタイムアウトが発生していない状況で、発言がこの$IRC_CTIMEOUTで設定した秒数を超えると、その時点までで送信されていなかったIRCの発言が、まとめて一通のメールとしてSMTPサーバに送信される。
$SOCKPATH
minjector.plとmigw.plが通信するためのUnixドメインソケットのパス

その他は、自明な項目だと思いますので省略します。

メール関係の設定

プログラムの起動

設置を行ったユーザアカウントでログインし、コマンドラインから以下のように実行します。

perl $HOME/migw/migw.pl $HOME/migw/sample.conf

設定ファイルで$DEBUGが1の場合、動作にしたがってメッセージが出力されますので、 実際にIRCで発言したり、$SMTP_TOで設定したアドレスにメールを送信したりして動作を確認します。

Tips

複数のメールアドレスとIRCの間で交信を行いたい。
複数のメールアドレスと交信したい場合は、MLを作成し、このMLのアドレスを$SMTP_TOに設定します。そして、設定ファイルの$SMTP_FROMのアドレスをこのMLに追加します。
MLといっても、一般的なメーリングリストドライバを導入せず、/etc/mail/aliases等を用いた簡易なものを使用することも可能です。
splitしているIRCサーバの間を接続するために使いたい。
これは、前項のTip、複数のメールアドレスとIRCの間で交信を行いたいの応用になります。例えば、IRCサーバ fooと barを接続する場合は、以下のようになります。
  • foo用の設定
    • foo用の設定ファイル、foo.confを作成
    • foo用のメールアカウントを作成し、foo.confを指定したminjector.plがメールを読むように.forwardなどを設定。
  • bar用の設定
    • barに対しても、fooと同様な設定作業を行う。
  • foo, bar共に加入しているMLを作成する。
  • foo用の設定でmigw.plを起動する。
  • bar用の設定でもmigw.plを起動する。

    ... 動作設定を増やすことで、さらに多くのIRCチャンネルを多元接続することも可能です。

ToDo


Front page   New Page list Search Recent changes   Help   RSS of recent changes