2011-10-24 21 views
2

我正在使用IMAP apis访问我的邮箱并下载附件(.wav音频文件)(如果有)。保存附件后,我期望它是一个有效的.wav文件,我可以播放,但它给了我无效的文件。如果我保存该附件,因为它是IMAP(Ruby):无法以正确的格式获取/保存音频(.wav)附件

X-MCPBodyContent: --- 
    duration: 5 
    internal_codec: alaw 
    external_codec: wav 
    type: 1 
    filename: /9/04/04/04/05/m_88888_56b07809-1fe6-4cf7-8328-8e9bb0bd7716 
    $$$$$ 

(mail.attachments.first):

当我保存后解码(mail.attachments.first.decoded)附件,它具有以下内容它有以下几点:

Date: Tue, 18 Oct 2011 09:06:07 -0400 
    Mime-Version: 1.0 
    Content-Type: audio/wav; 
    charset=UTF-8 
    Content-Transfer-Encoding: base64 
    Content-Disposition: attachment; 
    filename=m_88888_56b07809-1fe6-4cf7-8328-8e9bb0bd7716.wav 
    Content-ID: <[email protected]> 

    WC1NQ1BCb2R5Q29udGVudDogLS0tIApkdXJhdGlvbjogNQppbnRlcm5hbF9j 
    b2RlYzogYWxhdwpleHRlcm5hbF9jb2RlYzogd2F2CnR5cGU6IDEKZmlsZW5h 
    bWU6IC85LzA0LzA0LzA0LzA1L21fODg4ODhfNTZiMDc4MDktMWZlNi00Y2Y3 
    LTgzMjgtOGU5YmIwYmQ3NzE2CiQkJCQk 

这里是代码片段:

require 'net/imap' 
imap = Net::IMAP.new('the_url', 143, false, nil, false) 
imap.login('username', 'password') 
imap.select('Inbox') 
# All msgs in a folder 
msgs = imap.uid_search(["ALL"]) 

# Read each message 
msgs.each do |uid| 
    _body = imap.uid_fetch(uid, "RFC822")[0].attr["RFC822"] 

    require 'mail' 
    mail = Mail.new(_body) 

    attachment = mail.attachments.first 
    fn = attachment.filename 
    begin 
    File.open(fn, "w+b", 0644) { |f| f.write attachment.decoded} 
    rescue Exception => e 
    puts "Error : Unable to save data for #{fn} because #{e.message}" 
    end 
end 
imap.logout 

请让我知道^ h以正确的格式获取附件。

任何帮助将不胜感激。

谢谢

回答

0

我还没有尝试过,但它是值得关闭确保块中的文件?这可能是需要将流清理到磁盘。

+2

File.open块会自动为您关闭该文件。 http://stackoverflow.com/a/4795782/226255 – Abdo

3

以下作品适合我 - 用mp3,jpg和pdf文件进行测试。

new_mail = imap.search(["ALL"]).each do |uid| 
    body = imap.fetch(uid, "BODY[]")[0].attr["BODY[]"] 
    mail = Mail.new(body) 
    mail.attachments.each do |a| 
     File.open("/home/vknoll/Downloads/imap/#{a.filename}", 'wb') do |file| 
     file.write(a.body.decoded) 
     end 
    end 
end 
+0

你使用什么邮件类?你有使用邮件宝石吗? – Abdo

+1

nvm ..邮件宝石为我工作=) – Abdo

相关问题