Showing posts with label Attachment. Show all posts
Showing posts with label Attachment. Show all posts

Thursday, July 2, 2009

Use tmail and IMAP to save attachments

#! /usr/bin/ruby

require 'net/imap'
# This is a convenience monkey patch
class Net::IMAP
def uid_move(uid, mailbox)
uid_copy(uid, mailbox)
uid_store(uid, "+FLAGS", [:Deleted])
end
end
require 'rubygems'
require 'tmail'

imap = Net::IMAP.new('mail.example.com')
imap.login("user", "password")
imap.select('Inbox')

imap.uid_search(["SUBJECT", "order mail"]).each do |uid|
# save_attachment
mail = TMail::Mail.parse( imap.uid_fetch(uid, 'RFC822').first.attr['RFC822'] )
if ! mail.attachments.blank?
File.open(mail.attachments.first.original_filename,"w+") { |local_file|
local_file << mail.attachments.first.gets(nil)
}
end

# archive mail to mailbox
imap.uid_move(uid, 'Inbox.archived')
end

imap.expunge
imap.logout
http://snippets.dzone.com/posts/show/7530

Sunday, May 24, 2009

Receiving emails and attachments with Rails

Does your Rails app need to handle incoming emails with the attachments? All of the examples I’ve seen so far show you how to insert email attachments into the DB. Here’s a quick example that uses RailsCron to poll a POP3 account every minute for new emails and stores the attachments on the filesystem. If you need help using or running RailsCron see my previous posts about the topic.

The Agile book has a good example that kicks off a runner script but I think this method is far more efficient than having your mail system kick off a separate runner every time a new email is received, especially if you’re dealing in high volume.

It also handles non-responsive or slow responding POP3 servers by setting a high timeout length and retrying a handful of times before it gives up.

http://naffis.com/2006/8/14/receiving-emails-and-attachments-with-rails