Class: MList::EmailServer::Imap

Inherits:
Base
  • Object
show all
Defined in:
lib/mlist/email_server/imap.rb

Instance Attribute Summary

Attributes inherited from Base

#settings

Instance Method Summary collapse

Methods inherited from Base

#generate_message_id, #receive, #receiver

Constructor Details

#initialize(settings) ⇒ Imap

Returns a new instance of Imap.



7
8
9
10
11
12
13
14
# File 'lib/mlist/email_server/imap.rb', line 7

def initialize(settings)
  super(settings)
  @imap = Net::IMAP.new(
    settings[:server],
    settings[:port],
    settings[:ssl]
  )
end

Instance Method Details

#archive_message_id(id) ⇒ Object



24
25
26
27
# File 'lib/mlist/email_server/imap.rb', line 24

def archive_message_id(id)
  @imap.copy(id, settings[:archive_folder])
  @imap.store(id, '+FLAGS', [:Deleted])
end

#connectObject



29
30
31
32
33
34
35
36
# File 'lib/mlist/email_server/imap.rb', line 29

def connect
  @imap.(settings[:username], settings[:password])
  begin
    yield
  ensure
    @imap.close
  end
end

#deliver(tmail) ⇒ Object



16
17
18
# File 'lib/mlist/email_server/imap.rb', line 16

def deliver(tmail)
  raise "Mail delivery is not presently supported by the Imap server. Please use the '#{MList::EmailServer::Default.name}' type."
end

#executeObject



20
21
22
# File 'lib/mlist/email_server/imap.rb', line 20

def execute
  connect { process_folders }
end

#process_folder(folder) ⇒ Object



44
45
46
47
48
49
50
# File 'lib/mlist/email_server/imap.rb', line 44

def process_folder(folder)
  @imap.select(folder)
  @imap.search(['ALL']).each do |message_id|
    process_message_id(message_id)
    archive_message_id(message_id)
  end
end

#process_foldersObject



38
39
40
41
42
# File 'lib/mlist/email_server/imap.rb', line 38

def process_folders
  Array(settings[:source_folders]).each do |folder|
    process_folder(folder)
  end
end

#process_message(content) ⇒ Object



57
58
59
# File 'lib/mlist/email_server/imap.rb', line 57

def process_message(content)
  receive(TMail::Mail.parse(content))
end

#process_message_id(id) ⇒ Object



52
53
54
55
# File 'lib/mlist/email_server/imap.rb', line 52

def process_message_id(id)
  content = @imap.fetch(id, 'RFC822')[0].attr['RFC822']
  process_message(content)
end