DZone Snippets > ezmlm
addressにメールアドレスを与えて,以下のコードでezmlmのlistで使われるhash値を計算できる。
address.downcase.split('').inject(5381) { |h,c| ((h + (h << 5)) ^ c[0]) % (2 << 31) } % 53
PHPだと最初からezmlm_hashってのがあるらしい。
putsubs.cを参照すると、ezmlm-listを実行したときのqueryは
SELECT address FROM table WHERE hash BETWEEN 0 AND 52;
となってる。unsubscribeしたときに
DELETE FROM table WHERE address = 'address' AND hash = hash AND between 0 AND 52;
が実行されるんだけども(subscribe.c)、ソースをいじって
UPDATE table SET hash = 127 WHERE address = 'address' AND hash = hash AND between 0 AND 52;
とか53以上の値にしておけば配信リストから外れるけども、hashとaddress以外のcolumn(姓名、所属組織等)を設定していても当該レコードが削除されなくて運用上いいかも。
0 件のコメント:
コメントを投稿