2012-03-13 86 views
2

我想检索每封邮件附件的大小,而无需下载文件以获取它。我正在使用Gmail gem在GMAIL上使用IMAP获取附件的大小

编辑:我正在寻找一种方法,通过阅读标题或类似的大小,而不必检索整个附件,这是一个非常漫长的过程。

gmail = Gmail.connect(:xoauth, self.email, 
    :token   => self.token, 
    :secret   => self.secret, 
    :consumer_key => 'SECRET', 
    :consumer_secret => 'SECRET' 
) 
mails = gmail.mailbox("[Gmail]/All Mail").emails 
mails.each do |mail| 
    next if mail.message.attachments.blank? 
    # How to get the message's size if possible ? 
    mail.message.attachments.each do |attachment| 
    # How to get the attachment's size ? 
    end 
end 

回答

1

这是我做的。我用StringIO将附件转换为内存中的文件,然后取出大小:

require 'rubygems' 
require 'gmail' 
require 'ap' #awesome_print gem 

gmail = Gmail.connect("name","password") #simple authorization 
mails = gmail.mailbox("[Gmail]/All Mail").emails 
mails.each do |mail| 
    next if mail.message.attachments.blank? 
    mail.message.attachments.each do |attachment| 
    file = StringIO.new(attachment.to_s) 
    ap file.size 
    end 
end 
+0

感谢您的回答。但是这种方法太慢了。我的意思是,有没有办法知道附件而无需下载附件?只是通过获取标题或其他东西? – Arkan 2012-03-14 09:42:45

+0

不是我可以告诉...在Mail :: Part类中没有大小的方法,也没有方法。这至少会停止完整下载并将对象拉入内存 – ScottJShea 2012-03-14 13:48:21

+0

感谢您的回答。我会在几天内验证你的答案,如果没有人回复:-) – Arkan 2012-03-14 19:49:10