RoR - 使用gmail gem

时间:2017-03-07 11:05:38

标签: ruby-on-rails ruby gmail zip

我正在尝试设置一些rake任务。它要求我连接到gmail并下载一个Zip文件,该文件作为附件发送。

我编写了以下代码(适用于下载csv) -

gmail = Gmail.connect(ENV["USERNAME"], ENV["PASSWORD"])
msg = gmail.inbox.find(from: ENV["REC_USER"], 
  subject: args[:subject])
dir_path = "lib/mfu_payment_data/"
Dir.mkdir dir_path unless File.exists?(dir_path)

if msg.first
  msg.first.attachments.each do |attachment|
   File.write(File.join(dir_path,attachment.filename),attachment.body.decoded)
  end
end

它会抛出以下错误 -

rake aborted! 
Encoding::UndefinedConversionError: "\xED" from ASCII-8BIT to UTF-8

我认为这与attachment.body.decoded有关,但我不知道如何做到这一点。

2 个答案:

答案 0 :(得分:1)

您可以尝试以二进制模式编写文件:

File.open('/path/to/file;, 'wb') { |file| file.write(attachment.body.decoded) }

"b"二进制文件模式      抑制EOL< - > Windows上的CRLF转换。和      除非明确指出,否则将外部编码设置为ASCII-8BIT      指定。

这些模式在IO类中描述,File继承自。{/ p>

答案 1 :(得分:0)

我认为你有很多选择来生成zip文件

Download and unzip