IRC/SMTPゲートウェイ

2008-10-20
川俣吉広

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というディレクトリを 作成し、その中にスクリプトや設定ファイルを置く場合を想定して説明を行っています。

設定ファイルの編集

$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サーバの間を接続するために使いたい。

ToDo


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