gbreplyを使おう

  • gbreplyの導入時にちょっと引っかかっちゃうかもしれない事を…

    gbreply の動作原理(?)
    qmailを使った設定
    はじめに
    ふつーに gbreply を使う
    賢く gbreply を使う
    sendmail + procmail を使った設定
    はじめに
    procmailインストール&設定
    procmailでも賢く使おう


    ● gbreply の動作原理(?)

    gbreplyを使うに当たって必要とされるものが qmail もしくは sendmail+procmail である。これらのプログラムにおけるユーザーレベルでのメ イルの転送設定を用いていることで返事を実現している。
    gbreplyを使わない時の流れを書くとこうなる。(図が収まるくらいの大きさでみ てちょ)
    (図1)
    (図1: gbmのみの動作)
    
                        <1:ゲストブック書き込み>
                                     ↓
              <2:ゲストブック所有者($owner宛)にメイルでの通知>
          (つまり、この通知メイルによって書き込まれたことを知るわけだ)
                                     ↓
               <3: 書き込まれたファイルを編集して返事を書く>
    
    

    このような手順を経て返事が書くことになる。
    次に gbreply を導入した場合の動作の流れとしては以下のようになる(図2)
    なお、図中の 「$」マークの付いた文字列は gbconf.pl に書き込む変数名であ る。
    (図2: gbreplyを導入した時の動作)
    
                       <1:ゲストブック書き込み>
                                    ↓
              <2:ゲストブック所有者($owner)にメイルでの通知>
                                    ↓
    	        <3:$owner がメイルを受け取る>
                                    ↓
        <4:$ownerが返事を書いてそれをメイルとして $gbreplyto に送信する>
                                    ↓
          <5: gbreply は受け取ったメイルをゲストブックの返事とする>
    
    

    …うーん。わかりずらいかもしれないけど、つまりはだ、gbmだけの時だと、メ イルで通知がきてもそれはあくまで通知でしか無かったものだけど、その通知メ イルに返事を書くことで、本当(?)の返事をゲストブックに反映させちゃおうっ ていうのが gbreply の凄いところだ。
    これを使えばお返事効率が300%アップ(当社比)なことは間違い無し。

    ● qmail を使った設定(gentei.org, hiemalis.org 等)

    まず qmail での設定は特に簡単でまずこちらから。
    qmailはもともと一つのアカウントで複数のメイルアドレスを所有することがで きるというスグレモノなMTAである。(もちろんそれだけじゃないけど、今この話 をするために…)
    例えば ~/.qmail-test というファイルに 複数の知合い等のアドレスを記述して見よう。その時行頭は&で始まる必要があ る。
      % cat ~/.qmail-test
      & a@hogehoge.org
      & b@foobar.org
    
    なんてのがあったとする。
    (自分のアカウントは renge であり、ドメインネームを bazbaz.org と想定。)
    この時に renge-test@bazbaz.org 宛にメイルを送信すると先程 ~/.qmail-test 内に記述されていた人間に配送されることになる。(つまり a@hogehoge.org, w@foobar.org に送られることになる)
    また、 ~/.qmail-* ファイル内の記述として、「|(パイプ)」で始まるものはプ ログラムにメイルを渡すというものである。

    ● gbreplyを使う


    gbreply ではまこの「|」記号を用いたプログラムにメイルを渡す機能を利用 することでメイルによるゲストブックへの返事を実現している。

    以下、その設定。
    ゲストブック本体(gbm)がおいてあるディレクトリに移動しよう。

      % cd ~/public_html/gb/          (ユーザのディレクトリ構成に依存)
    

    そこにあるであろう gbconf.pl に各自の設定情報がおさめられている。
    以下の変数が gbreply で必要とするものである。もし項目がなければ追加する。
    適宜自分の環境に合わせて設定する

      $owner = 'renge@bazbaz.org';        # 自分のメイルアドレスに必ず書き換えよ
      $gbreplyto = 'renge-henji@bazbaz.org';   # gbreplyを起動するためのアドレス
      $gbreplyauth = 'a@hogehoge.org|renge@bazbaz.org';                 # 認証用
    

    それぞれ変数の意味は

    そうそう、このパラメータを括っている「'(シングルクォーテーション)」は「"」 にしちゃダメ。これにすると gbm が誤動作しちゃうので「'」にしましょう。

    $gbreplyauth とは。
    これは身元確認のための変数である。 まぁそんな物好きはいないだろうけど、全く関係無い人間がゲストブックの所有 者を装ってメイルを出してとんでもない返事を付けたりすることも考えられる。
    そこで、あらかじめ自分が返事を送る場所を gbreply に教えておいて、本当に そこから来たメイルであった時にのみ返事を変更できるようになっている。
    その「あらかじめ教えておくアドレス」が $gbreplyauth である。
    ちなみに、$gbreplyauth にいれておくアドレスは ~/.qmail-baramaki の内容と一致させると良い。

    続いて $gbreplyto はというと、これは図(2)の 4 で出てくる。ユーザはこの $gbreplyto 変数のアドレスに返事を書いたメイルを送ることで gbreply にデー タを受け渡すことができる。
    具体例を示す。
    以下で説明するのは次のような環境を想定している。
    その時の gbconf.pl を以下のように設定する
       $gbreplyauth = 'a@hogehoge.org|renge@bazbaz.org'; 
       $owner       = 'a@hogehoge.org';
       $gbreplyto   = 'renge-henji@bazbaz.org';
                           ------------------
    
       gb の稼働しているマシン             遠隔地の普段自分がよく使用しているマシン
        (renge@bazbaz.org)                           (a@hogehoge.org)
                |
                |
    	    V
           書き込み発生 ------($owner宛)-------> メイルで書き込みデータ配送
                                                             |
                                                         返事を作成
    						         |
    							 V
     ~/.qmail-henji参照 <-----($gbreplyto宛)---- メイルとして返事を送信
                |
    	    V
      gbreply へ返事データ渡す
                |
    	    V
           gbreply 起動
                |
    	    V
       受け取ったメイルから返事の
       部分を抜きだしてファイルと
       して保存する。
    

    ~/.qmail-henji の中身は…
      % cat ~/.qmail-henji
      | ./public_html/gb/gbreply
    
    なんて一行書いておくだけでOK。
    これでひとまず gbreply をつこてメイルでお返事はできるはずや。

    ● 返事を書くときの注意点

    gbm のサーバから送られてきたメイルに返事を書くわけだが、次の点に注意しな ければならない。
    gbreplyの仕様上メイルを完全に全部引用しなければならない。そしてヘッダ部 は変更しないようにする。
    純粋にメイラーアプリケーションの「返事」機能を用いて送り返すようにする。
    あ、この時引用マークを付けるようにする。「>」記号を使わなければいけない ということは無い。

    ● 複数の場所から返事を書けるようにする

    さて、続いてもちっといじったろかってお話。

    今のままだと、かならず $owner は一箇所に送られちゃう。(メイルアドレスを 一つしか登録してないからね)
    これってある意味すごーく困り。なぜって、gb の稼働してるサーバにログイン してもメイルは $owner(a@hogehoge.org)に送られちゃってるから 返事を書くのが面倒。普段は仕事や学校にいる時間の方が長いからってんで $owner を出先のみにしておいても差障りないかもしれないけどね。
    でも休みの日なんかちょっとこまり。どーせなら $owner を複数にしちゃうなん てことができれば…

    実験ターイム!
      $owner = 'renge@bazbaz.org, a@hogehoge.org';
    

    これでどや…どきどき…………ん?
    あかん。どっちにも送られてこん。 ってことで、実はこの方法だとあきまへんのす。 じゃぁ諦めんのか?いやいやこのページの始めの話を思い出しましょ。

    ~/.qmail-test の話。
    これで複数の人間に送ることができるやん…おおおお!幸せ。いつのまにやらら ぶらぶ qmail。
    ってんで早速変更しましょ。

      $owner = 'renge-baramaki@bazbaz.org';
    

    アドレスが完全に(ドメインまで)変わったことにちうい。
    これでゲストブックに書き込まれたメッセージは gbm を置いてるサイトに送ら れる。そこの自分のディレクトリの ~/.qmail-baramaki ってファイルの中に従 うようになる。
    じゃぁ具体的な ~/.qmail-baramaki の設定 ~/.qmail-baramaki をつくりましょ。

      & renge@bazbaz.org
      & a@hogehoge.org
      & b@gerogero.com
    

    この 3 行を ~/.qmail-baramaki に書く
    これでとりあえず 3 箇所に送られるようになった。そして gbconf.pl の $gbreplyauth にもこれらのアドレスをいれておかないと、いくら外から返事書 いても蹴られてしまうのでちうい。

      $gbreplyauth = 'renge@bazbaz.org|a@hogehoge.org|b@gerogero.com';
    

    これだけやればあとはゲストブックへの書き込みを待つだけぇ〜

    ● sendmail + procmail を使った設定

    ちなみに、sendmail 自体の設定は特にいらんす。
    sendmail ってのは余りにも有名な MTA ですな。
    ま、ここでは sendmail は大変だから qmail しましょーなんて説くつもりはな いす。
    もしそのあたりに興味あったら Secureで 行こうを参照してたもれ。

    で、qmail のところからずーっと読んできてくれた人はもう気づいてるかもしれ んすけど、 sendmail には qmail のような便利な機能はありません。
    具体的には ~/.qmail-* なんてファイルを分けることによってメイルアドレスを 複数もつなんてこともできんす。
    じゃぁ gbreply を使うことはできんのか?ってことになりますが、それを実現 してくれるのが procmail なるツール。
    もちろん世の中には他のツールでも同じようなことをやってくれるでしょうけど、 とりあえずは procmail ってのを紹介します。

    ● procmail のインストール

    gbreply本 家の説明に書いてある通りに Makefile の BASENAME を /usr/local に変更。 ETCRC と ETCRCS も変更して /usr/local/etc に。このあたりは自分の好みです な。
    って言ってる間にコンパイル終った。make install でおちまい。 make install-suid すると何が起こるのかはようしりません。
    これから設定にうつりま。

    procmail の設定

    ただし、この設定も gbreply を使うに当たって必要な設定のみ書いているので 詳しくはマニュアルなり検索するなり別のところで調べてくださいな。

    具体的な設定から。
    まず ~/.procmailrc は
      PATH=/bin:/usr/bin:/usr/local/bin
      MAILDIR=$HOME/Mail
      LOGFILE=$HOME/.mail/log
      DEFAULT=/var/mail/harano
      VERBOSE=OFF
    
      :0
      * ^Subject: Re: Guest Book Registration
      | /home/harano/public_html/gb/gbreply
    
    でOK。
    次に
      % mkdir ~/.mail
      % touch ~/.mail/log
    
    をしてログファイルを書き出す場所を確保する。そんでもって適宜自分の環境に 変更すべし。
    要は後半の部分である。
    最初の :0 はこっから始まりよって意味。この設定はかならず 3 行と決まって るのでちうい。
    「|(パイプ)」の後にはプログラムを書いておくとそのプログラムにメイルを渡 すことができます。
    で、このパイプの機能を用いることで gbreply にメイルを渡してるってわけ。
    ちなみに、うまく行かないときは ~/.mail/log ってファイルなんかを見るのも いいかも。
    次に設定するのは、~/.forward ファイル。
      % cat ~/.forward
      "|IFS=' ' && exec /usr/local/bin/procmail -f- || exit 75"
    
    最後に gbconf.pl の中の $owner 変数を書き換える。
      $owner = 'user@dokka.acchi.kocchi.jp';
    
    この user は遠隔地にいて書き込み通知メイルを受け取るメイルアドレスである。

    これで最低限(かつ最大?)の設定はできたのでちょっくらゲストブックに書き込 んで送られて来たメイルに返事をかいてみやう。
    あ、そうそう、ここではあまり gbconf.pl について説明しないので qmail の方の設定を見てちょ。これみないと $owner とかい きなり出て来てもわからんかもしれないし。


  • やっぱり賢く使おう

    qmail の時 にも出て来た話だけど、今のままの設定だと $owner が一人しか指定できない。 そこでやっぱり複数のメイルアドレスに送りたいよねぇ…
    そーんな時のための procmail。早速設定。

      % cat ~/.procmailrc
      :0 c
      * ^Subject: Re: Guest Book Registration
      ! user@dokka.acchi.kocchi.jp,user@special.providor.ne.jp
    
    なんてやる。
    ただ、ここで注意しなくてはいけないのが :0 で始まる一行目である。これは Cc(カーボンコピー)を MAILDIR で指定したディレクトリの inbox に保存してく れるオプションである。なんでこれをつけたのかというと…
    qmail での設定も読んだ人なら気づいてるかもしれない けど、上の送り先は 2 箇所で qmail のときに指定した a@domain.go.jp が無い。 なぜ付けてないか? それは gbm が稼働しているのと同じホストのメイルアドレ スを追加するとどうなるか考えてみるとわかりやすいだろう。
    もしこれを書いてしまうと…
    a@domain.go.jp に送ったらその人の procmail の設定で a@domain.go.jp に送 ることになる...グルグルまわってしまいますね。
    そーいうのを回避する為に c という文字を追加します。
    そして、勿論 gbconf.pl の $gbreplyauth にもこれらのアドレスをいれておか ないと、いくら外から返事書いても蹴られてしまうのでちうい。
      $gbreplyauth = 'user@dokka.acchi.kocchi.jp|user@special.providor.ne.jp|a@domain.go.jp';
    
    こっちには a@domain.go.jp が入ってることに注意。

    ま、だいたいこんなもんで一通り使えるようになったと思いま。
    あとはこちらも気長にゲストブックに書き込まれるのを待ちましょう。