- ベストアンサー
Rubyで特定件名のメールだけPOPサーバから削除
- プロバイダのPOPサーバに溜まったメールから特定の件名のメールを削除する方法をRubyで実装したいです。
- メールの取得にはMail gemを使用しますが、削除の方法がわかりません。
- コードを拡張せずに、別の方法で特定件名のメールを削除する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
基本的にはNo.1で書かれている通りですが、mailでも可能です。 ただし元々選択したものを消去することをあまり想定していないので、ちょっと使いにくいですが、 Mail.find(:delete_after_find=>true, :count=>50){|message| message.mark_for_delete=false # 一旦消去対象から外す if message.subject[/xxxxxxx/] # ここに消去条件 puts "deteting #{message.subject}" message.mark_for_delete=true # 消去対象に end } :delete_after_findオプションは危険なので、ブロックなしやmark_for_deleteをfalseにするのを忘れると全部消してしまいます。使うのでしたら十分注意してください。 現実的なやり方としては、 適当なメールソフトでサーバーから全部読み込み、サーバー上のメールを全部消去、 メールソフトで不要なものを削除 だと思うのですが、 これだと、サーバーからは無くなりますが、
その他の回答 (1)
- hanabutako
- ベストアンサー率54% (492/895)
Rubyに詳しいわけでもなんでもありませんが、ちょっと気になったのでコードを見てみました。 require "mail"というのは、これのことですよね。 https://rubygems.org/gems/mail ざっとコードを見る限り、特定のメールを取り出して消すような機能は実装されていないように見えますが。(全部消すのはあるようですけどね。) https://github.com/mikel/mail/blob/master/lib/mail/network/retriever_methods/pop3.rb おとなしくnet/popを使ってはいかがでしょうか。 http://docs.ruby-lang.org/ja/2.1.0/library/net=2fpop.html ざっと見る限りこれの使用例に出ているコードを改造するとできそうに見えますが。 http://docs.ruby-lang.org/ja/2.1.0/class/Net=3a=3aPOP3.html#S_FOREACH
補足
アドバイス頂いたリンク先も見ていましたが、件名を取り出す方法がわかりません・・・ http://docs.ruby-lang.org/ja/2.1.0/class/Net=3a=3aPOP3.html#S_FOREACH
お礼
どうもありがとうございました。 アドバイスいただいた通り、プログラム実施し、 特定の件名のメールのみ、無事削除できました。 7万通近くあるメールを削除したかったので、メールソフトは現実的でなく、Rubyでうまく処理することが出来ました。