How to Create Records in Rails App Database using Inbound Em

I am trying to create a feature within my application to receive
product data including an image attachment via inbound email.

Can someone point me to a tutorial or other document online that will
help out with this. I have started hammering at Google, but was
hoping someone could provide a link.

Thanks,
Nathan

On 3/30/07, Nathan [email protected] wrote:

I am trying to create a feature within my application to receive
product data including an image attachment via inbound email.

Can someone point me to a tutorial or other document online that will
help out with this. I have started hammering at Google, but was
hoping someone could provide a link.

Nathan,
I dug this out of a feed recently:
http://wiki.rubyonrails.com/rails/pages/HowToReceiveEmailsWithActionMailer

Is this what you want?

Nathan wrote:

I am trying to create a feature within my application to receive
product data including an image attachment via inbound email.

Can someone point me to a tutorial or other document online that will
help out with this. I have started hammering at Google, but was
hoping someone could provide a link.

Here’s some code I use in one of my apps. Stole most of it from some
examples I found somewhere, don’t remember where:

class IncomingCSVFileHandler < ActionMailer::Base
def receive(email)
return unless email.has_attachments?

email.attachments.each do |attachment|
  next unless attachment.original_filename[-4..-1] == '.csv'

  CSV::Reader.parse(attachment.read) do |rec|
    next if rec.last.blank?
    server = Server.find_by_name(rec.last.split('-',

2).first.strip.upcase)
next if server.blank?

    a = Answer.new
    a.server = server
    a.ticket_no = rec.first
    a.question = rec[2]
    a.answer = rec.last.split(' - ', 2).last
    first_name, last_name = rec[3].split
    a.created_by = User.find_by_name("#{last_name},

#{first_name}.titleize")
a.last_updated = Time.now
a.updated_by = a.created_by
a.save!
RAILS_DEFAULT_LOGGER.info(“Added answer record for
#{server.name}”)
end
end
end

def self.check_mail
begin
imap = Net::IMAP.new(‘130.102.202.121’)
imap.login(‘userid’, ‘password’)
imap.select(‘remedycsvfiles’)
imap.search([“SINCE”, Date.today.strftime("%d-%b-%Y")]
).each do |message_id|
msg = imap.fetch(message_id,‘RFC822’)[0].attr[‘RFC822’]

    IncomingCSVFileHandler.receive(msg)

    #Mark message as deleted and it will be removed from storage

when user
#session closed

imap.store(message_id, “+FLAGS”, [:Deleted])

  end

imap.expunge

  imap.logout
rescue
  RAILS_DEFAULT_LOGGER.error("Remedy CSV File Import Error: " + $!)
end

end
end

Not pretty, but it works!

HTH,

Jamey C.