2010-12-05 2 views
3

Мои рельсы 3 приложения на heroku получают входящие письма. Я хочу иметь возможность принимать вложения, но не могу получить рельсы для обработки вложений без ошибок.Разбор электронной почты Вложение w Скрепка - возможно, без tempfile?

Идеально было бы передать вложение, предоставленное 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)) 

Проблема с TempFile является файлы без расширений «мля» вместо «blah.png» ломает скрепку, поэтому я хочу, чтобы избежать временный файл. и создавая ошибки Identity, imagemagick не знает, что у них есть без ext.

высоко ценим любые советы по этому вопросу.

ответ

7

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

Суть в том, чтобы сделать это:

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 
+0

Это первая линия, вероятно, следует прочитать файл = StringIO.new (attachment.decoded) – 2011-07-09 04:04:22

Смежные вопросы