radar (owner)

Forks

Revisions

gist: 181284 Download_button fork
public
Public Clone URL: git://gist.github.com/181284.git
Embed All Files: show embed
Text only #
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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