このフォルダ以下のメールを既読にする - Beckrb用Rubyスクリプトその1
作成したのは表題の通り、「このフォルダ以下のメールを既読にする」スクリプトです。選択されているフォルダ以下にあるすべてのメールを既読にしてくれます。また下の階層にフォルダがあれば、その中も再帰的に見るようになっています。 これをmark_as_read.rbとか(まぁファイル名はなんでもいいけど)で保存して、スクリプトの割当てで右クリックメニューに出すようにしておくと便利。でもそんなしょっちゅう必要になる機能ではないかもね...。
require "nkf" def mark_as_read folder # set current folder Becky.set_current_folder(folder.folder_id) Becky.each_mail { |mail, sel| begin if (mail.status & Becky::MESSAGE_READ) == 0 # mark if unread if /^subject\:(.*)$/i =~ mail.headers.gsub(/\r\n\s+/, " ") then subject = NKF.nkf('-s', Becky.mime_decode($1)[0].strip) Becky.status = 'processing... ' + subject end mail.set_status(Becky::MESSAGE_READ) end rescue ArgumentError end } end def crawl_folder folder Becky.set_current_folder(folder.folder_id) # set current folder mark_as_read(folder) # mark_as_read folder.each_child { |child_folder| if child_folder.unread > 0 mark_as_read(child_folder) # mark_as_read end crawl_folder(child_folder) # crawl folder } end crawl_folder(Becky.current_folder) Becky.status = 'marked as read.'
そんなに詳しくドキュメントを見ないで書いているので変数のスコープとか変なとことかありそう。てかRubyにはPerlで言うところのmyみたいなのないのかな?(そういうのいらねーよとかいう設計なのかな?)
あと変数にPerlで言うところの$fooとか@fooが付いてないのでscalarなのかarrayなのかすぐにわからじ。でもいくつかrubyのスクリプトの例を見たら@fooっていうのがあるなーと思ったら、これは配列ではなくクラスのインスタンス変数らしい。ふむふむ。
といくつかPerlとの違い的なことを書いてみましたが、文法的にPerlっぽいところもありPerl書く人には入りやすいのかなとか思ったりする。