*IRC/SMTPゲートウェイ [#w3c4b9e7] RIGHT:2008-10-20 RIGHT:川俣吉広 IRCとメールとの間でメッセージをやりとりする機能の実験的な実装。 **アーキテクチャ [#i8b051b4] アーキテクチャの概略を下図に示します。 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しているチャンネルで 発言されます。 **設定及び起動手順 [#ie5adb66] IRC/SMTPゲートウェイの設置と運用は、通常ユーザの権限で可能です。~ 以下の例では、設置と運用を行うユーザのホームディレクトリ直下にmigwというディレクトリを 作成し、その中にスクリプトや設定ファイルを置く場合を想定して説明を行っています。 ***設定ファイルの編集 [#yb77e279] -このページに添付されているsample.confを元に、設定の編集を行います。 # 各種パラメータ設定 # $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の文法に従います。~ 設定項目の一部を以下に説明します; :$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ドメインソケットのパス その他は、自明な項目だと思いますので省略します。 ***メール関係の設定 [#tca1f5b9] -minjector.plがメールを受け取るメールアカウント(設定ファイルでの$SMTP_FROM)を作成します。 -実際にminjector.plがメールを受け取るように、メールサーバの設定を行います。 --~/.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.conf Perlスクリプトや設定ファイルの置場は、実際のものに読み換えて下さい。 ***プログラムの起動 [#db525786] 設置を行ったユーザアカウントでログインし、コマンドラインから以下のように実行します。 perl $HOME/migw/migw.pl $HOME/migw/sample.conf セッテイファイルで$DEBUGが1の場合、動作にしたがってメッセージが出力されますので、 実際にIRCで発言したり、$SMTP_TOで設定したアドレスにメールを送信したりして動作を確認します。 **Tips [#s9ca28e2] :複数のメールアドレスとIRCの間で交信を行いたい。|複数のメールアドレスと交信したい場合は、MLを作成し、このMLのアドレスを$SMTP_TOに設定します。そして、設定ファイルの$SMTP_FROMのアドレスをこのMLに追加します。~ MLといっても、一般的なメーリングリストドライバを導入せず、/etc/mail/aliases等を用いた簡易なものを使用することも可能です。 :splitしているIRCサーバの間を接続するために使いたい。| **ToDo [#v1a9f1ec] -IRCの接続が切れた時に再接続を行う機能