1日200通ほどのスパムメールが来る。ほとんどのスパムメールはフィルターを通して処理されるので実害は少ないが、気持ちの良いものではない。ふと、複数のメールアカウントを使っていてどのアカウントが一番被害があるのかちょっと気になったので、メールアドレスごとにスパムメールを数え上げ、数の多い順に表示するPythonプログラムを書いてみた。Pythonらしからぬばっちぃコードなのであまりコーディングの参考にしないこと。
import re def read_spam(fname, pattern): data = [] for d in [[s for s in l.replace(":", " ").replace("<", " ").replace(">", " ").strip().rstrip().split()[1:] if not re.search("\"", s) if re.search(".+@.+", s)] for l in file(fname) if re.search(pattern, l)]: data.extend(d) data_counts = {} for d in set(data): data_counts[d] = data.count(d) for d in sorted(data_counts, cmp=lambda x, y: cmp(data_counts[x], data_counts[y]), reverse=True): print "%5d %s" % (data_counts[d], d)
普段はThunderbirdを利用しており、デフォルトではスパムメールはJunkファイルに落とされる。その場合、以下のように実行すればOK。
read_spam("Junk", "^To: ")
以下のように表示される。
4652 aaa@mail.address 3745 bbb@mail.address 2176 ccc@mail.address 1819 ddd@mail.address 686 eee@mail.address (以下、略)
メールアドレスは変更しているがメール数は実際に計測した数値である。まあ、大体予想通りであったが、それにしても多すぎる。ひどいものだ。
import re def read_spam(fname, pattern): data = [] for d in [[s for s in l.replace(":", " ").replace("<", " ").replace(">", " ").strip().rstrip().split()[1:] if not re.search("\"", s) if re.search(".+@.+", s)] for l in file(fname) if re.search(pattern, l)]: data.extend(d) data_counts = {} for d in set(data): data_counts[d] = data.count(d) for d in sorted(data_counts, cmp=lambda x, y: cmp(data_counts[x], data_counts[y]), reverse=True): print "%5d %s" % (data_counts[d], d)
普段はThunderbirdを利用しており、デフォルトではスパムメールはJunkファイルに落とされる。その場合、以下のように実行すればOK。
read_spam("Junk", "^To: ")
以下のように表示される。
4652 aaa@mail.address 3745 bbb@mail.address 2176 ccc@mail.address 1819 ddd@mail.address 686 eee@mail.address (以下、略)
メールアドレスは変更しているがメール数は実際に計測した数値である。まあ、大体予想通りであったが、それにしても多すぎる。ひどいものだ。
コメント