MicrosoftOutlookで消せなくなったフォルダをwin32ole経由でRubyから消してみる

[Ruby][Windows]MicrosoftOutlookで消せなくなったフォルダをwin32ole経由でRubyから消してみる

この操作をすると新しくフォルダを追加してもOutlookの画面から見れなくなるようです?win32ole経由だと見えるのになんで…。→Windows再起動したらなおりました。

あらすじ

OutlookのRSSフィード内にどうやっても消えないフォルダが出来てしまい途方に暮れていた。

何がどうなってこうなのかは定かではないんですが、誤って「RSSフィードフォルダ」内にある「RSSフィード記事」に対して「RSSフィードフォルダ」自体をD&Dしてしまった時に生まれたフォルダだと思いまする。。

フィードをまるごと削除しようとしても「権限を見直してからまた挑戦してねてへぺろ(・ω<)」[1]とか言って絶対消えてくれないのでOutlookフォルダとかレジストリとかいじらないと消滅させられないのかなーと悩んでいました。

……が、正直どこをどういじればいいかわからないので、最後にダメ元でwin32oleにお願いしてみた。

解法そして解放

これで消えた……。

require 'win32ole'
ol = WIN32OLE::connect("Outlook.Application")
nameSpace = ol.getNameSpace("MAPI")
# RSSFEEDは「RSS フィード」フォルダのEntryId
nameSpace.getFolderFromID(RSSFEED).Folders.Remove(1)
# puts nameSpace.getFolderFromID(RSSFEED).Name => # RSS フィード

Removeメソッドはインデックスを指定するとの事。

|*メソッド・プロパティ|説明|

|*Add|指定した名前の Outlook フォルダを追加します。|

|*GetFirst|最初の Outlookフォルダを取得します。|

|*GetNext|次の Outlook フォルダを取得します。|

|*Item|あるインデックスの Outlook フォルダを取得します。|

|*Remove|あるインデックスの Outlook フォルダを削除します。|

http://jp.rubyist.net/magazine/?0007-Win32OLE:title

また、インデックスは1から始まりフォルダビューの親フォルダ直下にあるフォルダを1とし2, 3…と並んでいる様子。上記のソースでは「RSS フィード」フォルダ直下の(1番目の)フォルダを削除できた!

EntryIdを見つけるにはFoldersオブジェクトを回してEntryIdを調べる。これを繰り返せば深い階層までいける。

folders = nameSpace.Folders
folders.each do |f|
  puts f.Name
  puts f.EntryId
end

ありがとうwin32ole…。

おまけ

Windowsのirbにショートカットでペーストする方法をはじめて知ったのでメモ。[2]

  • Shift + insert !!

[1] 一応、権限を確認してみたところ己のアカウントは「所有者」となっており、ファイルの削除もできる設定になっていた。というか他のフィードはサクサク消せる。

[2] 今までは Alt+Space -> 編集 から貼り付けしていた。

関連記事(この記事の初版より古い記事はリンクがグレーで表示されます)

  1. 2011/09/30 [Java] [Windows] [Ruby] .msgファイルをパースして中から添付ファイルを抜き出す
  2. 2011/09/07 [Ruby] [Redmine] [SQLite3] [Windows] Redmineのプラグイン作成のための備忘録と、時々SQLite3
  3. 2011/07/09 [Windows] [Ruby] MicrosoftOutlookのメールをRuby(win32ole)で操作する! その2
  4. 2011/05/17 [Ruby] [Windows] MicrosoftOutlookのメールをRubyで操作する!
  5. 2011/05/01 [Ruby] [Redmine] [Windows] Redmineインストール備忘録(Windows)
  6. 2012/10/01 [Ruby] [Bundle] [Windows] bundle execを省略したいのでバッチを作った(Windows版)
  7. 2012/07/17 [Ruby] [Windows] [Redmine] Windows版Redmineをサービスに登録してブート時に起動させる(宿題あり)
  8. 2012/04/20 [Ruby] [Windows] ZenTestで実行したRSpecの結果をGrowlで通知してくれるようにした
  9. 2012/03/27 [Windows] [Jenkins] [Ruby] simplecovとsimplecov-rcovを使ってJenkinsでカバレッジを確認
  10. 2012/03/20 [Windows] [Jenkins] [Ruby] Windows環境用にrcovをビルドしなおす手順
  11. 2012/02/29 [Ruby] [Rails] [Windows] Rails3レシピブックを読みながらRailsを学ぶ モデル、コントローラ、ビュー、Railsの規約など
  12. 2012/02/28 [Ruby] [Windows] [Rails] Rails3レシピブックを読みながらRailsを学ぶ
  13. 2012/02/20 [Ruby] [Windows] Rubyの実行ファイルを作成するExerbとOcraを試してみた
  14. 2011/12/27 [Evernote] [Ruby] [API] EvernoteのAPIをRubyから叩きたい
  15. 2011/12/26 [Ruby] [Haml] [Sinatra] SinatraでHaml入門