使用Mail Gem和Paperclip解码附件

时间:2015-04-12 19:04:07

标签: ruby-on-rails email rubygems paperclip email-attachments

我可以通过邮件gem通过imap接收电子邮件,并希望将附件添加到我的模型中(称为邮件)。我根据从此blog post获取的代码收到此错误:

Encoding::UndefinedConversionError ("\xC1" from ASCII-8BIT to UTF-8):

我的代码:

mail.attachments.each_with_index do | attachment, index |
      fake_file = AttachmentFile.new("test.jpg")
      fake_file.write(attachment.decoded)
      fake_file.flush
      fake_file.original_filename = attachment.filename
      fake_file.content_type = "image/gif"

      @message.doc1 = fake_file if index == 0 and attachment.content_type.start_with?("image/")
end

不确定我做错了导致错误 - 可能因为文件未在二进制模式下读取?在同一篇文章中给出了另一种选择:

file = StringIO.new(attachment.decoded)
      file.class.class_eval { attr_accessor :original_filename, :content_type }
      file.original_filename = attachment.filename
      file.content_type = attachment.mime_type

这与gif一起工作但是没有pdf,提供回滚。此外,我在Windows上使用Dev,这导致过去的回形针问题(文件大小无法正确读取等)。

该模型具有以下验证:

validates_attachment_content_type :doc1, :content_type => [ 'application/pdf', /image/ ], :message => "only pdf or img"

我的日志文件没有用,只有第一个和第二个选项的正常输出:

 Command :: SET PATH=/usr/bin;%PATH% & file -b --mime "C:/Users/FOUNDA~1/AppData/Local/Temp/c81e728d9d4c2f636f067f89cc14862c20150412-5216-1utzh29.gif"

不确定邮件gem有什么样的初始化 - 它能够正确地提取电子邮件。对不起,也许我误解了你的回复。

1 个答案:

答案 0 :(得分:0)

我通过验证请求文件名的某个结构,这导致了问题。我列出的第二个选项现在完美无瑕。不能代表第一个问题 - 可能会出现相同的问题。