Разбор почтового вложения w Скрепка - возможно без временного файла? - PullRequest
3 голосов
/ 05 декабря 2010

Приложение My rails 3 на heroku получает входящие письма.Я хочу иметь возможность принимать вложения, но не могу заставить рельсы обрабатывать вложения без ошибок.

Идеально было бы передать вложение, предоставленное ActionMailer.

message_all = Mail.new(params[:message])
 message_all.attachments.each do |a|
 attachments.each do |a|
 .attachments.build(
   :attachment => a
  )
 end
end

Это ошибкис: NoMethodError (undefined method перемотка 'для #) `Где вложения - это модель, а вложения - скрепка

Идеи у?Есть ли другой способ передачи вложения = a в скрепку?

Я попробовал другой подход, создав временный файл:

tempfile = File.new("#{Rails.root.to_s}/tmp/#{a.filename}", "w+")
tempfile << a.body
tempfile.puts
attachments.build(
:attachment => File.open(tempfile.path) )

Проблема с временным файлом - это файлы без расширений "бла"вместо" blah.png "ломаются скрепки, поэтому я хочу избежать временного файла.и создавая ошибки идентификации, imagemagick не знает, что это такое без доп.

очень ценю любые советы по этому поводу.

1 Ответ

7 голосов
/ 04 января 2011

Проблема с методами, которые вы используете, состоит в том, что они не содержат всей необходимой информации для скрепки, такой как тип содержимого и исходное имя файла. Я написал сообщение в блоге об этом некоторое время назад и о том, как вы можете подделать формат и использовать вложение в виде электронной почты в качестве прикрепления к скрепке.

Нижняя строка должна была сделать это:

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