









[blog]
[ML]
[todo]
[CVS]
[bug]
[apache log]
[swiki log]
[statistics]
[map]
[man]
[info]
[アンテナ]
取説:SwikiAlert

概要
Swikiのアラートメールを処理するcron用スクリプトです。
同梱されている、SendAlerts.txtは、Swikiの動作するSqueakに対して、
acceptして下さい。
そもそも、Swikiには、指定したページが保存される度に、設定ユーザに
対してメール通知を行う機能が(だいぶ前から)あります。
しかし、動作は不安定ですし、(ソース上は間違ってなさげなんですが..)
直接SMTPポートに対して、メールの中継を依頼するため、通常のMTAでは
SPAM防止のための、第三者中継制約に引っかかってしまいます。
通常であれば、sendmailなんかを使って、どこどこのドメインから依頼
されたメールは通すとか、認証に成功した依頼は通すなどの設定をする
のが筋なのかもしれませんが、面倒なので、メール送信は、このスクリプト
に任してしまうことにしました。

Requirements
- Ruby higher 1.6
- kconvライブラリ(Ruby標準添付)
- openライブラリ(Ruby標準添付)
- Swiki 1.2(1.1以前でも大丈夫だと思いますが確認していません)

インストール手順
- まず、Swikiにパッチを当てます。本当は、こっちでちゃんとやって、cs形式にするとよいのですが、面倒だったので、メソッドのソースをそのままSendAlerts.txtに載せています。
- クラスブラウザを開く。
- カテゴリ(Swiki-Structure)のNuSwikiPageクラスのインスタンスメソッドである、sendAlertsを表示します。
- 添付ファイルの内容で、メソッド内容を書き換え、acceptします。
- イメージを保存します。(Swikiランチャーなら、save & exit)
- 次に、本スクリプト(SwikiAlert.rb)を適当なパスにおきます。
- スクリプト上部の設定を適当に置き換えます。(オリジナルは、qmailに適合する形になっています)
- crontab -e で、SwikiAlert.rbを定期的に実行するようにします。
- 注記:
- オリジナルでは、/tmpにメール送信依頼ファイルを作成し、メール送信後これを削除するようにしています。したがって、/tmpに適切なパーミッションを設定すべきでしょう。
- 実は、厳密なファイル競合に関して無視して作ってあります。場合によっては、Swikiからの「メール送信依頼ファイル」作成とSwikiAlert.rbからの「メール送信依頼ファイル」読み込みが競合してしまう可能性があります。
- 現状、メールのSubjectに余計なCR(キャリッジリターン)が入ります。

内部動作に関して
具体的な詳細動作は、下記になります。
- Swikiから、メール送信メソッドを叩かれると、通算秒+マイクロ秒で合成されたファイル名で「メール送信依頼ファイル」が生成されます。オリジナルのSMTPへの送信依頼も実は、消さずに残していますので、これら両者が動作します。(本家が直ったときへの期待を残している...)
- cronで動くスクリプトは、/tmpの該当ファイル(/tmp/alert_)をグロブします。一致したファイルをオープンして、最初の1行を読み込み、送信先を獲得します。そのまま、本文を読み込み、送信先アドレスに対して、qmail-injectを使ってメールを送信します。
- メール本文の末尾が、"QUIT"でない場合、Swikiからの書き込み途中として、メール送信を棄却します。
- メール本文は、エンコーディング(適当)しています。
- メール送信後、「メール送信依頼ファイル」をunlinkします。

Links to this Page