mlist 0.1.12 → 0.1.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +5 -1
- data/VERSION.yml +1 -1
- data/lib/mlist/email_server/imap.rb +63 -0
- data/spec/integration/imap_email_server_spec.rb +72 -0
- metadata +5 -3
data/CHANGELOG
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
*0.1.12 [Enhancement] (2010-03-26)
|
2
|
+
|
3
|
+
* Added footers to html parts of email. [aiwilliams]
|
4
|
+
|
1
5
|
*0.1.10 [Enhancement] (2010-01-11)
|
2
6
|
|
3
7
|
* Delegating back to the list the question of whether an email has been to the list before (X-BeenThere checking). [aiwilliams]
|
@@ -60,4 +64,4 @@
|
|
60
64
|
* Including display_name in from address of EmailPost. [aiwilliams]
|
61
65
|
* Improved extraction of text when it is nested inside parts. [aiwilliams]
|
62
66
|
|
63
|
-
*0.1.1 [First Working Release] (January 5, 2009)
|
67
|
+
*0.1.1 [First Working Release] (January 5, 2009)
|
data/VERSION.yml
CHANGED
@@ -0,0 +1,63 @@
|
|
1
|
+
require 'net/imap'
|
2
|
+
|
3
|
+
module MList
|
4
|
+
module EmailServer
|
5
|
+
|
6
|
+
class Imap < Base
|
7
|
+
def initialize(settings)
|
8
|
+
super(settings)
|
9
|
+
@imap = Net::IMAP.new(
|
10
|
+
settings[:server],
|
11
|
+
settings[:port],
|
12
|
+
settings[:ssl]
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def deliver(tmail)
|
17
|
+
raise "Mail delivery is not presently supported by the Imap server. Please use the '#{MList::EmailServer::Default.name}' type."
|
18
|
+
end
|
19
|
+
|
20
|
+
def execute
|
21
|
+
connect { process_folders }
|
22
|
+
end
|
23
|
+
|
24
|
+
def archive_message_id(id)
|
25
|
+
@imap.copy(id, settings[:archive_folder])
|
26
|
+
@imap.store(id, '+FLAGS', [:Deleted])
|
27
|
+
end
|
28
|
+
|
29
|
+
def connect
|
30
|
+
@imap.login(settings[:username], settings[:password])
|
31
|
+
begin
|
32
|
+
yield
|
33
|
+
ensure
|
34
|
+
@imap.close
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def process_folders
|
39
|
+
Array(settings[:source_folders]).each do |folder|
|
40
|
+
process_folder(folder)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def process_folder(folder)
|
45
|
+
@imap.select(folder)
|
46
|
+
@imap.search(['ALL']).each do |message_id|
|
47
|
+
process_message_id(message_id)
|
48
|
+
archive_message_id(message_id)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def process_message_id(id)
|
53
|
+
content = @imap.fetch(id, 'RFC822')[0].attr['RFC822']
|
54
|
+
process_message(content)
|
55
|
+
end
|
56
|
+
|
57
|
+
def process_message(content)
|
58
|
+
receive(TMail::Mail.parse(content))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
|
2
|
+
require 'mlist/email_server/imap'
|
3
|
+
|
4
|
+
describe MList::EmailServer::Imap, 'settings' do
|
5
|
+
it 'should use the provided credentials' do
|
6
|
+
mock(Net::IMAP).new('host', 993, true) { mock('imap') }
|
7
|
+
MList::EmailServer::Imap.new(:server => 'host', :port => 993, :ssl => true)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'should login with the provided credentials, process the folders, close on completion' do
|
11
|
+
imap_server = Object.new
|
12
|
+
stub(Net::IMAP).new { imap_server }
|
13
|
+
|
14
|
+
mock(imap_server).login('aahh', 'eeya')
|
15
|
+
mock(imap_server).close
|
16
|
+
|
17
|
+
imap = MList::EmailServer::Imap.new(
|
18
|
+
:username => 'aahh', :password => 'eeya'
|
19
|
+
)
|
20
|
+
mock(imap).process_folders
|
21
|
+
imap.execute
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should process the provided folders' do
|
25
|
+
imap_server = Object.new
|
26
|
+
stub(Net::IMAP).new { imap_server }
|
27
|
+
imap = MList::EmailServer::Imap.new(
|
28
|
+
:source_folders => ['Inbox', 'Spam']
|
29
|
+
)
|
30
|
+
mock(imap).process_folder('Inbox')
|
31
|
+
mock(imap).process_folder('Spam')
|
32
|
+
imap.process_folders
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe MList::EmailServer::Imap, 'processing' do
|
37
|
+
before do
|
38
|
+
@imap_server = 'mock_imap_server'
|
39
|
+
stub(Net::IMAP).new { @imap_server }
|
40
|
+
@imap = MList::EmailServer::Imap.new({:archive_folder => 'Archive'})
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'should examine the specified folder and process all the messages' do
|
44
|
+
message_ids = [1,2]
|
45
|
+
mock(@imap_server).select('folder')
|
46
|
+
mock(@imap_server).search(['ALL']) { message_ids }
|
47
|
+
mock(@imap).process_message_id(1)
|
48
|
+
mock(@imap).archive_message_id(1)
|
49
|
+
mock(@imap).process_message_id(2)
|
50
|
+
mock(@imap).archive_message_id(2)
|
51
|
+
@imap.process_folder('folder')
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should process the RFC822 message content' do
|
55
|
+
mock(@imap_server).fetch(1, 'RFC822').mock![0].mock!.attr.mock!['RFC822'].returns('email content')
|
56
|
+
mock(@imap).process_message('email content')
|
57
|
+
@imap.process_message_id(1)
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'should wrap up RFC822 content in a TMail::Mail object' do
|
61
|
+
tmail = 'mock_tmail'
|
62
|
+
mock(TMail::Mail).parse('email content') { tmail }
|
63
|
+
mock(@imap).receive(tmail)
|
64
|
+
@imap.process_message('email content')
|
65
|
+
end
|
66
|
+
|
67
|
+
it 'should archive to the specified folder' do
|
68
|
+
mock(@imap_server).copy(1, 'Archive')
|
69
|
+
mock(@imap_server).store(1, '+FLAGS', [:Deleted])
|
70
|
+
@imap.archive_message_id(1)
|
71
|
+
end
|
72
|
+
end
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 13
|
9
|
+
version: 0.1.13
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Adam Williams
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-
|
17
|
+
date: 2010-04-02 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- lib/mlist/email_server/base.rb
|
41
41
|
- lib/mlist/email_server/default.rb
|
42
42
|
- lib/mlist/email_server/fake.rb
|
43
|
+
- lib/mlist/email_server/imap.rb
|
43
44
|
- lib/mlist/email_server/pop.rb
|
44
45
|
- lib/mlist/email_server/smtp.rb
|
45
46
|
- lib/mlist/email_subscriber.rb
|
@@ -92,6 +93,7 @@ summary: A Ruby mailing list library designed to be integrated into other applic
|
|
92
93
|
test_files:
|
93
94
|
- spec/fixtures/schema.rb
|
94
95
|
- spec/integration/date_formats_spec.rb
|
96
|
+
- spec/integration/imap_email_server_spec.rb
|
95
97
|
- spec/integration/mlist_spec.rb
|
96
98
|
- spec/integration/pop_email_server_spec.rb
|
97
99
|
- spec/integration/proof_spec.rb
|