会話伝達重視型動的ML CatchUp

Program

catchup.rb

何するものぞ

3人以上で携帯電話で密なメイル連絡を取るときに便利な簡易MLドライバ。 個々が宛先を気にしなくても常に全員に返事が行く。 要Ruby。要qmail(または同等のアドレス処理機能)。

携帯電話の人もちゃんと返事できる

Reply-toが処理できない携帯電話でも必ず全員に返すよう From:を書き換える。

紹介制メンバー登録

MLのアドレスとその他の宛先に同時に送ると 「その他の宛先」の人もMLに登録される。 QuickMLと似ているが 微妙に違う。次第に合流しながら旅行するときとかに便利。 一定期間が過ぎるとあとから足された人は自動的に解除される。 なお、紹介制でなく、希望者誰でも入れるオープン制にすることも可能。

ニックネーム管理

呪文のような携帯電話アドレスでも,誰か(本人を含む)が To:のコメントに名前を付けて送信すればその人にMLネームがつき, 次のメイルから名前つきで配信される。

サブジェクト温存機能

パケット代節約のためSubjectを削って送る人(**)がいても 直近のSubjectを覚えておいて自動的にもう一度付け直す。

(**)本当に結構いるのだ。おかげでフォルダが ** no subject ** だらけで悲しい。

最近のemail事情

携帯電話からemailに入った若者はemailの作法を知らんのが多くて泣ける。 そんな昨今、こんなイライラはありませぬか。

「みんなに返せ」

「こりゃ急ぎの方がいいな。A君とB君に、明日打ち合せできないか 聞いてみよう。この時間だと帰宅中かな、携帯のアドレスに送ろう」

To: A君のアドレス, B君のアドレス
Subject: 臨時打ち合せ
--
Yです。明日(水曜) 打合せできませんか。
どうも先方でトラブル発生したみたいです。
私は何時でもOKですので2人の都合で決めて下さい。

「ぽちっとな、お、もう返事来た、早いね最近の若者は。」

From: A君
To: Yさん
Subject: Re:臨時打ち合せ
--
明日午前中なら何時でもOKですよ。

「おお、すばらしい、あ、B君からも来た」

From: B君
To: Yさん
Subject: 
--
明日は9時〜11時か、17時以降なら空いてます。
どちらがいいですか。

「あれま、そうかじゃあ、9時からにするかー、ってか、 おめーらわしだけに送り返すな! 2人とも全員に返してりゃそれで完了してるだろ!

携帯電話付属のメイルリーダはタコなのが多いので、送信者だけに 送るのは簡単でもそれ以外がややこしかったりする。かといって、 Reply-toヘッダを付けても効いたり効かなかったり様々(トホホ)。

また後輩や学生が多くなって来るとこんなことが多い。

「ちみだれ」

「お,メイルが来た,なんじゃらほい」

To: Yさん
From: d8a8d328a..--.--xx8787daib...@docomo.ne.jp
Subject: 連絡
--
今日は熱が出たので休みます。

「そうかうつされると困るからなあお大事に,って,おぬし誰じゃ,名を名乗れ! spam避けとかでながーいアドレスにするのは勝手だが,みんながそんなんだから 誰か分かるわけないわいボケ」と毒づきつつ登録アドレスを調べるのであった。 関係ないがSubjectが「連絡」っちゅーのもどうだろう。情報量ゼロ。

その他にも、

「仲間外れの恐怖」

最初 X, Y さんの2人でドライブに出た。高速道路の 休憩場所とかの連絡を携帯メイルでやってた。ああ便利な時代だねぇ。 途中Zさんが合流。Zさんにもメイル送らなきゃね。 Wさんも合流。Wさんにも送らなきゃね。あれ、 4人全員にメイル送るはずが、古いメイルに リプライしたらWさんに途中から行かなくなってた! うわーん、仲間外れ (;_;) ーん、ってか、3〜4人を越えると ちまちまアドレスを確認するのが面倒くせえYO!

なんてなときにも威力を発揮する。一般的なMLドライバを使えば良さそうだが、 実際のところMLの挙動は「端末がReply-toヘッダにちゃんと従うこと」に 依存している。でも携帯メイルなんてそんなのお構いなしなので ちっとも返事がMLに返って来ない。

かくなる上は……From:ヘッダ偽造という 禁断の技で解決を謀るしかない。どくいりきけん(うそ)。

つかいかた

固定メンバーのMLとして

たとえばちみのメイルアドレスが taro@example.com だとする。 そしたら拡張アドレス taro-kerai@example.com を作って、 inu kiji saru の3人全員と連絡を取るためのアドレスにしよう、という ストーリーを考える。inu kiji saru はみーんな携帯電話のアドレス。 そしたら、だまって taro-kerai@example.com に送るだけ。 登録メンバー全員に届く。するとどんなタコな機種で返事を 書いても必ず taro-kerai@example.com に返って来る。めでたし。

From:に名前を

携帯電話付属のMUAにまともなヘッダを付けることは期待できない。 ならばサーバ側で付けてやろう。MLメンバーの登録アドレスを

nickname <real-email@example.com>

のようにしておけば,以後その人からメイルが来たときに emailアドレスしかFrom:になかった場合nicknameが付加される。 次で述べる動的メンバーのときはもっと簡単で,新規メンバーを足すときの To:(またはCc:)欄に「ニックネーム <ほんとの@アドレス>」の 形で書けばそれが以後採用される。これで「ちみ誰や」とオサラバ。

動的メンバーのMLとして

拡張アドレス taro-trip@example.com を作って気のあう仲間だけを 登録しておく。んじゃみんなでおでかけ。待ち合わせしよか。この宛先に 送れば仲間全員に届く。返事もみんなに確実に届く。あら、別の人が 参加? じゃあ、その人のアドレスも宛先に追加して送信。はい、 taro-trip@example.com はその人も動的メンバーとして加わる。 動的メンバーはしばらく(標準で1週間)メイルを送って来ないと 自動的にメンバーから外れる。めでたし。

誰に送られてるの? …… コマンドメイル

普段参加してないのにあとからMLに追加された人は誰が メンバーなのか分からん。そんなときはMLの宛先に

Subject: member

というメイルを送ればヨシ。抜けたかったら、

Subject: off

というメイルを送ればヨシ。だいじょうぶ、あとから入れられた人には 使い方ガイドが送られるから。

ときには一部のメンバーに …… サブリスト機能

さあ、これで携帯電話の暗号のようなアドレスを覚えなくて済むぞい。 と思ったのも束の間、たとえば、MLに入っている一部の人にだけ通知したい。

「えーと、saru君とkiji君のアドレスなんだっけ…」

で、結局暗号のようなアドレスを探しに行くのであった…。が、

そんなときのために、MLアドレスのさらに後にハイフンを付けて、 特定の人の名前を書くと、その人とだけの連絡に使えるサブリストが 自動構築され、以後はそのサブリスト経由で連絡すればよくなる。 たとえば、全体のリストのアドレスが taro-kerai@example.com で、そこに加入している saru さん kiji さんにだけ送りたければ、 taro-kerai-saru+kiji@example.com という宛先に送る。すると、メンバーリストからパターン saru, kiji にマッチするアドレス全てと、自分からなるサブリストが作られる。 パターンは + 記号で区切って、確実に1人に定まると思われる ものを指定する。この機能ゆえ、初期メンバーの登録時には正しい氏名を ローマ字で入れておくよろし。

サブリストも、動的なメンバー追加ができる。それには

To: サブリストのアドレス
Cc: 追加したい人のアドレス

とすればよいのは全体リストの場合と同様。

1発あみだくじ

仲間で集まったときに、何か決めることになった。じゃんけんぽーん。 なかなか決まらん。じゃあ一発で

To: (サブ)リストのアドレス
Subject: 123

で空メイルを送ろう。1番からn番までくじ引き結果が各自に送られる。

インストール

さあ、これ大事。大まかな手順はこんな感じ。

  1. qmailなサーバを用意する。
  2. catchup.rbをどこかに インストールする(/usr/local/binと仮定)。
  3. catchup.rb -install と起動する。

なに1がネック? インストール簡単だって。やってみれ。え、 めんどいとな。じゃ、 うちとか 家系本家とか、 すどさんちとか、 おがわさんちとか、 けーじさんちとか、 いくらでもあるでよ。

おっと話が逸れた。catchup.rb -install したら 以下のように入力していく。

  1. 作りたいMLアドレス
  2. 固定メンバーにしたい人のメイルアドレス その1
  3. 固定メンバーにしたい人のメイルアドレス その2
  4. 固定メンバーにしたい人のメイルアドレス その3
  5. :
  6. :(必要なだけいれる)
  7. :
  8. x (おしまいにxだけいれる)

これが終わると、

の質問がなされるので適宜答える。最後に、書き出す dot-qmail ファイル名を聞いて来るので入力する。

で、たとえば、~/.qmail-kerai に書き出されるとすると、 同時に ~/.qmail-kerai-adm-default がシンボリックリンクで 作成される。これは、エラーメイルが帰って来たときに 自動的にエラー発生アドレスを削除するために必要。

dot-qmailファイルの書式

吐き出された dot-qmail を見れば簡単。例えば taro-keitai@example.comという宛先用に ~/.qmail-keitai を作ってみたのがこんな感じ。

| /usr/local/bin/catchup.rb -F -S -r taro-kerai@example.com
#: MOMO Taro <taro@example.net>
#: INUYAMA Wanko <inu@example.net>
#: kiji@example.org
#: SARUTA Monkichi <saru@example.com>

そう、固定メンバーを #: のあとに列挙しているだけ。 qmail 本体は # で始まる行は無視するのでエラーにならない。でも catchup.rb は自分が呼ばれた dot-qmail ファイルを探してそこにある #: の行をメンバーリストとして利用する。書式は簡単,

#: ローマ字氏名 <メイルアドレス>

を、列挙していけばよい。実際は漢字氏名でもよいが、それだと サブグループ作成時に氏名で検索パターンを書けなくなるので、 英字で書いておく方が無難。もちろん例にあるように、氏名の省略も可能で、 その場合はメイルアドレスのみを書く。

オプション意味
-FFrom:ヘッダをいじくる(携帯電話参加者が 多いときは必須)
-S空っぽなSubject:を回避
-s自動メンバー登録しない(Static only)
-r addressこのMLの宛先を 明示的に指定(つけた方が無難)
-fReply-Toが既にあっても上書き
-oオープン制にする(ToにMLアドレス、 Ccに自分アドレスを送れば誰でも加入できるが 悪用への注意が必要)
-h Header=Value ユーザ定義ヘッダを追加で付ける
(-h X-ML-Name=foo なんてするとよろし)
-e expire 自動登録メンバーを(最後の発言から)何秒後に 登録解除するか(y m d h を後置すると年月日時指定)
-install固定メンバーを入れた dot-qmailファイルのインストール
-d dir dot-qmailファイルを書き出すディレクトリを指定(-installで使う)

他のMTAで使いたい

courier-mta ならほぼそのまま動くはず。 Postfixでも dotqmail スクリプトと組み合わせれば使える。この場合、Postfixの設定ファイル、 たとえば/etc/postfix/main.cfに、

recipient_delimiter = -

を足し、postfixの設定をリロードする。そして、この catchup を仕込む人のホームディレクトリの .forward ファイルに以下の1行を追加する。

| $HOME/dotqmail

これはdotqmailスクリプトをホームディレクトリに置いた場合の記述で、 別の場所に置いたならその場所に書き換える。

以上の設定により、Postfixから ~/.qmail-* ファイルが使えるようになるので、あたかもqmailを利用しているかのように dot-qmail ファイルを作っていけばOK。


14370
yuuji@example.org
Fingerprint16 = FF F9 FF CC E0 FE 5C F7 19 97 28 24 EC 5D 39 BA
HIROSE Yuuji - ASTROLOGY / BIKE / EPO / GUEST BOOK / YaTeX [Tweet]