• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Rubyで特定件名のメールだけPOPサーバから削除)

Rubyで特定件名のメールだけPOPサーバから削除

このQ&Aのポイント
  • プロバイダのPOPサーバに溜まったメールから特定の件名のメールを削除する方法をRubyで実装したいです。
  • メールの取得にはMail gemを使用しますが、削除の方法がわかりません。
  • コードを拡張せずに、別の方法で特定件名のメールを削除する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.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にするのを忘れると全部消してしまいます。使うのでしたら十分注意してください。 現実的なやり方としては、 適当なメールソフトでサーバーから全部読み込み、サーバー上のメールを全部消去、 メールソフトで不要なものを削除 だと思うのですが、 これだと、サーバーからは無くなりますが、

nsonoda
質問者

お礼

どうもありがとうございました。 アドバイスいただいた通り、プログラム実施し、 特定の件名のメールのみ、無事削除できました。 7万通近くあるメールを削除したかったので、メールソフトは現実的でなく、Rubyでうまく処理することが出来ました。

その他の回答 (1)

回答No.1

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

nsonoda
質問者

補足

アドバイス頂いたリンク先も見ていましたが、件名を取り出す方法がわかりません・・・ http://docs.ruby-lang.org/ja/2.1.0/class/Net=3a=3aPOP3.html#S_FOREACH

関連するQ&A