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

时间:2012-01-08 16:12:35

标签: ruby email ruby-1.9

我想使用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封邮件,这个脚本只删除这两个邮件。相反,我只想删除第一个。

2 个答案:

答案 0 :(得分:5)

自己找到它,如果你正在寻找同样的问题,请回答你。

原来你必须在find_and_delete()处抛出一个Block,明确决定跳过删除消息,只需:

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

答案 1 :(得分:0)

我知道此帖子是古老的,但实际上我最近不得不使用此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