使用Rails接收电子邮件(ActionMailer)来处理图像附件

时间:2009-11-25 06:54:56

标签: ruby-on-rails email paperclip actionmailer

我正在尝试解析发送到我的应用服务器的电子邮件。 它应该阅读电子邮件以通过电子邮件找到用户然后添加照片 到用户的照片模型 这是我到目前为止所拥有的。我究竟做错了什么?

class Mailman < ActionMailer::Base 
  def receive(email) 
    logger.info("Got an email about: #{email.subject}") 
    if (@user = User.find_by_email(email.from)) 
      if email.has_attachments? 
        for attachment in email.attachments 
        #...@user.photos.create(:data_file_name => attachment.original_filename, 
        # :data_content_type => attachment.content_type, :data_file_size => attachment.size, 
        # :data_updated_at => Time.now.to_datetime) 
        # @user.photos << attachment 
        # I don't think this is the right way to do this... 
        end 
      end 
    else 
      logger.info("No user found with email: #{email.from}") 
    end 
  end 
end 

class User < ActiveRecord::Base 
  acts_as_authentic 
  has_attached_file :avatar 
  has_many :photos, :dependent => :destroy 
  accepts_nested_attributes_for :photos 
  # What does this do? 
end 


class Photo < ActiveRecord::Base 
  belongs_to :user 
  has_attached_file :data 
end 


class AddAttachmentsDataToPhoto < ActiveRecord::Migration 
  def self.up 
    add_column :photos, :data_file_name, :string 
    add_column :photos, :data_content_type, :string 
    add_column :photos, :data_file_size, :integer 
    add_column :photos, :data_updated_at, :datetime 
  end 
  def self.down 
    remove_column :photos, :data_file_name 
    remove_column :photos, :data_content_type 
    remove_column :photos, :data_file_size 
    remove_column :photos, :data_updated_at 
  end 
end

2 个答案:

答案 0 :(得分:1)

我知道这有点晚了但是对于遇到这个问题的其他人我写了一篇博客文章,解释你如何use paperclip to save attachments from incoming emails in Rails 3

答案 1 :(得分:0)

你没有提到它,但看起来你正在使用Paperclip。 According to the docs,您需要将文件分配给附件。在你的循环中,如果你这样做了:

@user.photos.create(:data => attachment)