wiki:PythonSimpleML

Pythonでシンプルなメーリングリストを作ってみた

Pythonでシンプルなメーリングリストを作ってみました。 実は以前にPHPで書いて使っていたのですが、どうも扱いづらいのでPythonで書き直したのです。 ひとつのアドレスに届いたメールを複数のアドレスに配るだけであれば、メールサーバのaliasesとかに配布先メールアドレスを書けば済みます。 わざわざプログラムを使って処理したいのは、以下の理由です。

利用者のメールアドレスを隠す。
メールのTo:やFrom:に利用者のメールアドレスが現れないようにします。 さもないと、「全員に返信」したつもりで「送信者だけに返信」で重要なことを書いてしまい、「聞いてないよ!」ってな事件が多発します。
送信者名をメールの本文に挿入する。
利用者のメールアドレスを隠すと、誰がメールを送ってきたのかわかりません。 そこで、メールの本文の先頭に、送信者の名前(ニックネームなど)を自動的に記載することにします。
知らない人からのメールを排除する。
スパムとかをいちいち全員に配布したくありません。 利用者以外から届いたメールは単純に無視します。
件名のRe:を削除する。
たいていは携帯が悪いのですが、「Re:Re:RE: Re2:...」なんてことになりがちです。 ほんと、携帯ってバカだ。先頭にRe:が有ったら、それ以上Re:をつけないのが事実上のルールなのに。 PCのメールソフトにも「Re[2]:」なんてことをするのがあります。Reは「返信」って意味じゃないのに。 まあいいや。そんなわけで、メーリングリストのソフトで対処しましょう。
送信者にはメールを配布しない。
自分が送ったメールはいちいち読みたくありません。 送信者自身には、メールを配布しないようにします。

ダウンロード、使い方

例によってインストーラとかはありません。 ダウンロードして、適当な場所に置いて、実行可能にしてください。 ソースの先頭部分には、以下の設定が必要です。

  • メーリングリスト自体のメールアドレス
  • 配布先利用者の、メールアドレスとニックネームのいちらん

あとは、メールサーバのaliasesなどを設定して、メーリングリストのアドレスに届いたメールを全てこのプログラムに喰わせるようにしてください。 設定方法はメールサーバのソフトウェアによって異なるので、ここには書きません。

TODO

そのうちやります。

  • 添付ファイルがテキストの場合に、ニックネームを挿入してしまう可能性がある。
  • Re^2:」なんてやつにも対処する。
  • ニックネームをエンコードできない場合に対処する。
  • 配布先の設定をデータベースにする。
  • 複数のメーリングリストを処理できるようにする(データベース必須)。
  • DjangoでウェブGUI。

おまけ

以前にPHPで書いたものがここにあります。 えーっと。PHPって普通は動的なウェブを作るのに使いますが、シェルスクリプトのようにサーバ上の処理を行うのにも使えるのです。 注意:このソースはEUCで書いてあるので、ブラウザ上ではちゃんと見えないかもしれません。 その場合はこのリンクを開いて、ブラウザの設定でエンコーディングをEUCに変更してみてください。

読み比べてみるとおもしろいかもしれません。 Pythonだと、いかにシンプルで短く堅く書けるかがわかります。 PHPでは、少々苦労したことを覚えています。 PEARが使いづらいとか、機能が低いとか、バグ回避をしなきゃいけなかったこととか、PEARをバージョンアップしたら動かなくなって焦ったとか。 Pythonの「Battery Included」の理念がとてもありがたい。 しかも、ライブラリのAPIはよく吟味され練られていて、安易に変更されることもありません。 今回使用したメール関連のAPIについて言えば、深いところまで楽にアクセスできるのが助かりました。

(2007/12/31 - sgk)