Skip to content

Instantly share code, notes, and snippets.

@radar
Created September 5, 2009 04:21
Show Gist options
  • Save radar/181284 to your computer and use it in GitHub Desktop.
Save radar/181284 to your computer and use it in GitHub Desktop.
require 'net/imap'
require 'rubygems'
require 'actionmailer'
require 'activerecord'
ActiveRecord::Base.establish_connection(:adapter => "mysql", :database => "mail", :username => "root")
class Address < ActiveRecord::Base
has_many :addresses_mails
has_many :mails, :through => :addresses_mails
end
class Mail < ActiveRecord::Base
has_many :addresses_mails
has_many :to_addresses, :through => :addresses_mails, :conditions => "addresses_mails.from_or_to = 'to'", :source => :address
has_many :from_addresses, :through => :addresses_mails, :conditions => "addresses_mails.from_or_to = 'from'", :source => :address
end
class AddressesMail < ActiveRecord::Base
belongs_to :mail
belongs_to :address
end
class CreateMails < ActiveRecord::Migration
def self.up
create_table :mails do |t|
t.string :subject
end
create_table :addresses do |t|
t.string :address
end
create_table :addresses_mails do |t|
t.references :mail, :address
t.string :from_or_to
end
end
end
if !Mail.table_exists? && !Address.table_exists? && !AddressesMail.table_exists?
CreateMails.up
end
class IncomingMailer < ActionMailer::Base
def receive(email)
m = Mail.create(:subject => email.subject)
from_addresses = []
email.from.each do |from|
AddressesMail.create(:mail => m, :address => Address.create(:address => from), :from_or_to => "from")
end
to_addresses = []
email.to.each do |to|
AddressesMail.create(:mail => m, :address => Address.create(:address => to), :from_or_to => "to")
end
m.save!
end
end
Mail.delete_all
@connection = Net::IMAP.new("imap.gmail.com", "993", true)
@connection.login("actionhacktest@gmail.com", "2password1")
@connection.examine("INBOX")
@connection.search(['ALL']).each do |message_id|
msg = @connection.fetch(message_id,'RFC822')[0].attr['RFC822']
IncomingMailer.receive(msg)
end
m = Mail.last
p m.from_addresses
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment