mailman 0.5.2 → 0.5.3

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -3,14 +3,16 @@
3
3
  Mailman is an incoming mail processing microframework (with POP3 and Maildir
4
4
  support), that works with Rails "out of the box".
5
5
 
6
- require 'mailman'
7
- Mailman::Application.run do
8
- to 'ticket-%id%@example.org' do
9
- Ticket.find(params[:id]).add_reply(message)org' do

10
- end
11
- end
6
+ ```ruby
7
+ require 'mailman'
8
+ Mailman::Application.run do
9
+ to 'ticket-%id%@example.org' do

10
+ Ticket.find(params[:id]).add_reply(message)
11
+ end
12
+ end
13
+ ```
12
14
 
13
- See the [User Guide](http://rubydoc.info/github/titanous/mailman/master/file/USER_GUIDE.md) for more information.
15
+ See the [User Guide](https://github.com/titanous/mailman/blob/master/USER_GUIDE.md) for more information.
14
16
 
15
17
  There is also a great [Getting Started Guide](http://dansowter.com/mailman-guide/) written by Dan Sowter.
16
18
 
@@ -21,7 +23,7 @@ There is also a great [Getting Started Guide](http://dansowter.com/mailman-guide
21
23
 
22
24
  ## Compatibility
23
25
 
24
- Tested on all Ruby versions with Travis CI.
26
+ Tested on Ruby 1.8.7, 1.9.2, 1.9.3, REE, JRuby 1.7, and Rubinius.
25
27
 
26
28
  ### Dependencies
27
29
 
@@ -41,13 +43,17 @@ and my mentor was [Steven Soroka](http://github.com/ssoroka).
41
43
  - [Nicolas Aguttes](http://github.com/tranquiliste)
42
44
  - [Nathan Broadbent](https://github.com/ndbroadbent)
43
45
  - [Tim Carey-Smith](http://github.com/halorgium)
46
+ - [Dan Cheail](https://github.com/DanCheail)
44
47
  - [Francis Chong](https://github.com/siuying)
45
48
  - [Kevin Glowacz](https://github.com/kjg)
46
49
  - [Cyril Mougel](http://github.com/shingara)
50
+ - [Brian Palmer](https://github.com/codekitchen)
47
51
  - [Phillip Ridlen](https://github.com/philtr)
48
52
  - [Daniel Schierbeck](http://github.com/dasch)
49
53
  - [Steven Soroka](http://github.com/ssoroka)
54
+ - [Benjamin Waldher](https://github.com/lgbr)
50
55
  - [Ian White](http://github.com/ianwhite)
56
+ - [Andreas Wolff](https://github.com/rubyphunk)
51
57
 
52
58
 
53
59
  ## Copyright
data/USER_GUIDE.md CHANGED
@@ -5,16 +5,18 @@ Mailman is a microframework for processing incoming email.
5
5
  Here is an example Mailman app that takes incoming messages to a support
6
6
  email account, and adds them to a database.
7
7
 
8
- # mailman_app.rb
9
- require 'mailman'
8
+ ```ruby
9
+ # mailman_app.rb
10
+ require 'mailman'
10
11
 
11
- Mailman.config.maildir = '~/Maildir'
12
+ Mailman.config.maildir = '~/Maildir'
12
13
 
13
- Mailman::Application.run do
14
- to 'support@example.org' do
15
- Ticket.new_from_message(message)
16
- end
17
- end
14
+ Mailman::Application.run do
15
+ to 'support@example.org' do
16
+ Ticket.new_from_message(message)
17
+ end
18
+ end
19
+ ```
18
20
 
19
21
  The Mailman app could then be started by running `ruby mailman_app.rb`.
20
22
 
@@ -63,9 +65,11 @@ the params helper (`params[:captures]`) as an Array, and as block arguments.
63
65
 
64
66
  Routes are defined within a Mailman application block:
65
67
 
66
- Mailman::Application.run do
67
- # routes here
68
- end
68
+ ```ruby
69
+ Mailman::Application.run do
70
+ # routes here
71
+ end
72
+ ```
69
73
 
70
74
  Messages are passed through routes in the order they are defined in the
71
75
  application from top to bottom. The first matching route's block will be
@@ -76,42 +80,54 @@ called.
76
80
  Conditions can be chained so that the route will only be executed if all
77
81
  conditions pass:
78
82
 
79
- to('support@example.org').subject(/urgent/) do
80
- # process urgent message here
81
- end
83
+ ```ruby
84
+ to('support@example.org').subject(/urgent/) do
85
+ # process urgent message here
86
+ end
87
+ ```
82
88
 
83
89
  #### Special routes
84
90
 
85
91
  The `default` route is a catch-all that is run if no other routes match:
86
92
 
87
- default do
88
- # process non-matching messages
89
- end
93
+ ```ruby
94
+ default do
95
+ # process non-matching messages
96
+ end
97
+ ```
90
98
 
91
99
  #### Block Arguments
92
100
 
93
101
  All captures from matchers are available as block arguments:
94
102
 
95
- from('%user%@example.org').subject(/Ticket (\d+)/) do |username, ticket_id|
96
- puts "Got message from #{username} about Ticket #{ticket_id}"
97
- end
103
+ ```ruby
104
+ from('%user%@example.org').subject(/Ticket (\d+)/) do |username, ticket_id|
105
+ puts "Got message from #{username} about Ticket #{ticket_id}"
106
+ end
107
+ ```
98
108
 
99
109
  #### Class Routing
100
110
 
101
111
  Messages can also be routed to methods. For instance, to route to an
102
112
  Object with a `receive` instance method defined, this will work:
103
113
 
104
- from '%user%@example.org', Sample
114
+ ```ruby
115
+ from '%user%@example.org', Sample
116
+ ```
105
117
 
106
118
  Messages can also be routed to arbitrary instance methods:
107
119
 
108
- from '%user%@example.org', 'ExampleClass#new_message'
120
+ ```ruby
121
+ from '%user%@example.org', 'ExampleClass#new_message'
122
+ ```
109
123
 
110
124
  The method should accept two arguments, the message object, and the params:
111
125
 
112
- def receive(message, params)
113
- # process message here
114
- end
126
+ ```ruby
127
+ def receive(message, params)
128
+ # process message here
129
+ end
130
+ ```
115
131
 
116
132
  #### Route Helpers
117
133
 
@@ -119,12 +135,14 @@ There are two helpers available inside of route blocks:
119
135
 
120
136
  The `params` hash holds all captures from matchers:
121
137
 
122
- from('%user%@example.org').subject(/RE: (.*)/) do
123
- params[:user] #=> 'chunkybacon'
124
- # it is an indifferent hash, so you can use strings and symbols
125
- # interchangeably as keys
126
- params['captures'][0] #=> 'A very important message about pigs'
127
- end
138
+ ```ruby
139
+ from('%user%@example.org').subject(/RE: (.*)/) do
140
+ params[:user] #=> 'chunkybacon'
141
+ # it is an indifferent hash, so you can use strings and symbols
142
+ # interchangeably as keys
143
+ params['captures'][0] #=> 'A very important message about pigs'
144
+ end
145
+ ```
128
146
 
129
147
  The `message` helper is a `Mail::Message` object that contains the entire
130
148
  message. See the [mail](http://github.com/mikel/mail/) docs for information on
@@ -201,13 +219,15 @@ set, Mailman will use POP3 polling as the receiver.
201
219
 
202
220
  **Example**:
203
221
 
204
- Mailman.config.pop3 = {
205
- :username => 'chunkybacon@gmail.com',
206
- :password => 'foobar',
207
- :server => 'pop.gmail.com',
208
- :port => 995, # defaults to 110
209
- :ssl => true # defaults to false
210
- }
222
+ ```ruby
223
+ Mailman.config.pop3 = {
224
+ :username => 'chunkybacon@gmail.com',
225
+ :password => 'foobar',
226
+ :server => 'pop.gmail.com',
227
+ :port => 995, # defaults to 110
228
+ :ssl => true # defaults to false
229
+ }
230
+ ```
211
231
 
212
232
 
213
233
  ### Polling
@@ -68,20 +68,23 @@ module Mailman
68
68
  # Maildir
69
69
  elsif Mailman.config.maildir
70
70
  require 'maildir'
71
- require 'listen'
72
71
 
73
72
  Mailman.logger.info "Maildir receiver enabled (#{Mailman.config.maildir})."
74
73
  @maildir = Maildir.new(Mailman.config.maildir)
74
+
75
75
  process_maildir
76
76
 
77
- Mailman.logger.debug "Monitoring the Maildir for new messages..."
77
+ if Mailman.config.watch_maildir
78
+ require 'listen'
79
+ Mailman.logger.debug "Monitoring the Maildir for new messages..."
78
80
 
79
- callback = Proc.new do |modified, added, removed|
80
- process_maildir
81
- end
81
+ callback = Proc.new do |modified, added, removed|
82
+ process_maildir
83
+ end
82
84
 
83
- @listener = Listen.to(File.join(Mailman.config.maildir, 'new')).change(&callback)
84
- @listener.start
85
+ @listener = Listen.to(File.join(Mailman.config.maildir, 'new')).change(&callback)
86
+ @listener.start
87
+ end
85
88
  end
86
89
  end
87
90
 
@@ -14,6 +14,10 @@ module Mailman
14
14
  # @return [String] the path to the maildir
15
15
  attr_accessor :maildir
16
16
 
17
+ # @return [boolean] whether or not to watch for new messages in the maildir.
18
+ # Settings this to false disables listening for file changes if using the Maildir receiver.
19
+ attr_accessor :watch_maildir
20
+
17
21
  # @return [String] the path to the rails root. Setting this to false to stop
18
22
  # the rails environment from loading
19
23
  attr_accessor :rails_root
@@ -35,6 +39,10 @@ module Mailman
35
39
  @poll_interval ||= 60
36
40
  end
37
41
 
42
+ def watch_maildir
43
+ @watch_maildir.nil? ? true : @watch_maildir
44
+ end
45
+
38
46
  def rails_root
39
47
  @rails_root.nil? ? '.' : @rails_root
40
48
  end
@@ -13,22 +13,28 @@ module Mailman
13
13
  # messages to
14
14
  # @option options [String] :server the server to connect to
15
15
  # @option options [Integer] :port the port to connect to
16
+ # @option options [Boolean] :ssl whether or not to use ssl
16
17
  # @option options [String] :username the username to authenticate with
17
18
  # @option options [String] :password the password to authenticate with
19
+ # @option options [String] :folder the mail folder to search
18
20
  def initialize(options)
19
21
  @processor = options[:processor]
22
+ @server = options[:server]
20
23
  @username = options[:username]
21
24
  @password = options[:password]
22
25
  @filter = options[:filter] || ['NEW']
23
26
  @port = options[:port] || 143
24
-
25
- @connection = Net::IMAP.new(options[:server], @port)
27
+ @ssl = options[:ssl] || false
28
+ @folder = options[:folder] || "INBOX"
26
29
  end
27
30
 
28
31
  # Connects to the IMAP server.
29
32
  def connect
30
- @connection.login(@username, @password)
31
- @connection.examine("INBOX")
33
+ if @connection.nil? or @connection.disconnected?
34
+ @connection = Net::IMAP.new(@server, @port, @ssl)
35
+ @connection.login(@username, @password)
36
+ end
37
+ @connection.select(@folder)
32
38
  end
33
39
 
34
40
  # Disconnects from the IMAP server.
@@ -1,3 +1,3 @@
1
1
  module Mailman
2
- VERSION = '0.5.2'
2
+ VERSION = '0.5.3'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mailman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.2
4
+ version: 0.5.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-06-13 00:00:00.000000000 Z
12
+ date: 2012-08-30 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: mail
16
- requirement: &70211186601640 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: 2.0.3
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70211186601640
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 2.0.3
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: activesupport
27
- requirement: &70211186600220 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: 2.3.4
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70211186600220
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: 2.3.4
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: listen
38
- requirement: &70211186599220 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: 0.4.1
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70211186599220
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.4.1
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: maildir
49
- requirement: &70211186598540 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: 0.5.0
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *70211186598540
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 0.5.0
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: i18n
60
- requirement: &70211186597440 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: 0.4.1
66
86
  type: :runtime
67
87
  prerelease: false
68
- version_requirements: *70211186597440
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: 0.4.1
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: rspec
71
- requirement: &70211186596820 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ~>
@@ -76,7 +101,12 @@ dependencies:
76
101
  version: '2.10'
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70211186596820
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ~>
108
+ - !ruby/object:Gem::Version
109
+ version: '2.10'
80
110
  description: Mailman makes it easy to process incoming emails with a simple routing
81
111
  DSL
82
112
  email:
@@ -124,7 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
154
  version: '0'
125
155
  requirements: []
126
156
  rubyforge_project: mailman
127
- rubygems_version: 1.8.11
157
+ rubygems_version: 1.8.23
128
158
  signing_key:
129
159
  specification_version: 3
130
160
  summary: A incoming email processing microframework