Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过ruby/mikel mail删除服务器上的特定邮件?_Ruby_Email_Ruby 1.9 - Fatal编程技术网

如何通过ruby/mikel mail删除服务器上的特定邮件?

如何通过ruby/mikel mail删除服务器上的特定邮件?,ruby,email,ruby-1.9,Ruby,Email,Ruby 1.9,我想使用Ruby/Mikel Mail gem来访问pop3,但我一直在寻找一种有选择地从服务器上删除邮件的方法。下面是一些功能不全的示例代码,说明了我是如何误解所提供的rdoc规范的 require 'rubygems' require 'mail' Mail.defaults do retriever_method :pop3, { :address => '...', :user_name

我想使用Ruby/Mikel Mail gem来访问pop3,但我一直在寻找一种有选择地从服务器上删除邮件的方法。下面是一些功能不全的示例代码,说明了我是如何误解所提供的rdoc规范的

require 'rubygems'
require 'mail'

Mail.defaults do
  retriever_method :pop3, { :address => '...',                        
                     :user_name  => '...',
                     :password   => '...' }                        
end


puts "#{Mail.all.length} messages on server found."
if Mail.all.length > 0 
  mm = Mail.first
  puts mm.from
  puts "I delete all but the first mail!"

  mm.mark_for_delete = false
  Mail.find_and_delete

  puts "#{Mail.all.length} messages on server found."  
end

结果是,在服务器上有2封邮件时,此脚本只会同时删除这两封邮件。相反,我只希望它删除第一个问题。

我自己找到的,如果你在看同样的问题,请回答

事实证明,您必须在find_和_delete上抛出一个块,以明确决定跳过删除消息,只需:

Mail.find_and_delete({:what=>:first}) { |msg| 
     msg.skip_deletion if msg.subject == "test1826"
}

我知道这篇文章很古老,但我最近不得不使用这个gem,如果有人碰巧需要一种比第一次或最后一次更精细的方法来删除电子邮件,比如说所有超过一个月的电子邮件,这里有一种方法:

s_keys = ['SENTBEFORE', (Time.now - (30 * 86_400)).strftime('%d-%b-%Y')]
Mail.find_and_delete(keys: s_keys) do |email, _imap, uid|
    puts 'Delete: ' + uid.to_s + '   ' + email.subject + '   ' + email.date.to_s
end