Разбор вложения электронной почты с помощью скрепки - возможен без временного файла?

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

В идеале было бы передать вложение, предоставленное 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 methodrewind' for #)` Где вложения - это модель, а вложение - скрепка.

Идеи у? Есть ли другой способ передать вложение = 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» вместо «blah.png» ломают скрепку, поэтому я хочу избегать временного файла. и создавая ошибки идентификации, imagemagick не знает, что они собой представляют без доп.

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


person AnApprentice    schedule 05.12.2010    source источник


Ответы (1)


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

Суть заключалась в следующем:

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
person Steve Smith    schedule 04.01.2011
comment
Эта первая строка, вероятно, должна читаться как file = StringIO.new(attachment.decoded) - person Nick Desjardins; 09.07.2011
comment
@Steve Ваш блог не работает. - person Smooth; 10.12.2014
comment
@Smooth, спасибо за внимание. Кажется, теперь у меня все работает нормально. Надеюсь просто временный глюк. - person Steve Smith; 11.12.2014