ar_mailer 1.3.1 → 1.3.2
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +2 -0
- data/History.txt +9 -0
- data/README.txt +14 -25
- data/Rakefile +7 -9
- data/bin/ar_sendmail +0 -0
- data/lib/action_mailer/ar_mailer.rb +12 -5
- data/lib/action_mailer/ar_sendmail.rb +7 -1
- data/share/ar_sendmail +0 -0
- data/test/test_armailer.rb +3 -2
- data/test/test_arsendmail.rb +82 -83
- metadata +92 -52
- metadata.gz.sig +0 -0
data.tar.gz.sig
ADDED
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
= 1.3.2
|
2
|
+
|
3
|
+
* Terminate SMTP connection on TimeoutError since Net::SMTP may be in a bogus
|
4
|
+
state. Issue by Eric O'Connell.
|
5
|
+
* Don't require Email class to exist. Bug #22843 by Joachim Glauche.
|
6
|
+
* Switched to minitest
|
7
|
+
* Upgraded to modern Hoe
|
8
|
+
* Updated configuration information for Rails > 2.0
|
9
|
+
|
1
10
|
= 1.3.1
|
2
11
|
|
3
12
|
* Fix bug #12530, gmail causes SSL errors. Submitted by Kyle Maxwell
|
data/README.txt
CHANGED
@@ -1,39 +1,28 @@
|
|
1
1
|
= ar_mailer
|
2
2
|
|
3
|
-
|
3
|
+
* http://seattlerb.rubyforge.org/ar_mailer
|
4
|
+
* http://rubyforge.org/projects/seattlerb
|
5
|
+
* http://rubyforge.org/tracker/?func=add&group_id=1513&atid=5921
|
4
6
|
|
5
|
-
|
7
|
+
== DESCRIPTION:
|
6
8
|
|
7
|
-
|
9
|
+
ar_mailer is a two-phase delivery agent for ActionMailer. Even delivering
|
10
|
+
email to the local machine may take too long when you have to send hundreds of
|
11
|
+
messages. ar_mailer allows you to store messages into the database for later
|
12
|
+
delivery by a separate process, ar_sendmail.
|
8
13
|
|
9
|
-
|
14
|
+
== SYNOPSIS:
|
10
15
|
|
11
|
-
|
16
|
+
See ActionMailer::ARMailer for instructions on using ar_mailer.
|
12
17
|
|
13
|
-
|
14
|
-
|
15
|
-
http://rubyforge.org/tracker/?func=add&group_id=1513&atid=5921
|
16
|
-
|
17
|
-
== About
|
18
|
-
|
19
|
-
Even delivering email to the local machine may take too long when you have to
|
20
|
-
send hundreds of messages. ar_mailer allows you to store messages into the
|
21
|
-
database for later delivery by a separate process, ar_sendmail.
|
22
|
-
|
23
|
-
== Installing ar_mailer
|
24
|
-
|
25
|
-
Just install the gem:
|
18
|
+
See ar_sendmail -h for options to ar_sendmail.
|
26
19
|
|
27
|
-
|
20
|
+
An rc.d script is included in share/ar_sendmail for *BSD operating systems.
|
28
21
|
|
29
|
-
|
22
|
+
== INSTALL:
|
30
23
|
|
31
|
-
|
24
|
+
* gem install ar_mailer
|
32
25
|
|
33
26
|
NOTE: You may need to delete an smtp_tls.rb file if you have one lying
|
34
27
|
around. ar_mailer supplies it own.
|
35
28
|
|
36
|
-
=== ar_sendmail on FreeBSD or NetBSD
|
37
|
-
|
38
|
-
An rc.d script is included in share/ar_sendmail.
|
39
|
-
|
data/Rakefile
CHANGED
@@ -1,14 +1,12 @@
|
|
1
1
|
require 'hoe'
|
2
2
|
|
3
|
-
|
3
|
+
$:.unshift 'lib'
|
4
|
+
require 'action_mailer/ar_sendmail'
|
4
5
|
|
5
|
-
Hoe.new 'ar_mailer', ActionMailer::ARSendmail::VERSION do |
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
s.author = 'Eric Hodel'
|
11
|
-
s.email = 'drbrain@segment7.net'
|
12
|
-
s.changes = s.paragraphs_of('History.txt', 0..1).join("\n\n")
|
6
|
+
Hoe.new 'ar_mailer', ActionMailer::ARSendmail::VERSION do |ar_mailer|
|
7
|
+
ar_mailer.rubyforge_name = 'seattlerb'
|
8
|
+
ar_mailer.developer 'Eric Hodel', 'drbrain@segment7.net'
|
9
|
+
ar_mailer.testlib = :minitest
|
10
|
+
ar_mailer.extra_dev_deps << ['minitest', '~> 1.3']
|
13
11
|
end
|
14
12
|
|
data/bin/ar_sendmail
CHANGED
File without changes
|
@@ -50,6 +50,11 @@ require 'action_mailer'
|
|
50
50
|
# Edit config/environments/production.rb and set the delivery agent:
|
51
51
|
#
|
52
52
|
# $ grep delivery_method config/environments/production.rb
|
53
|
+
# config.action_mailer.delivery_method = :activerecord
|
54
|
+
#
|
55
|
+
# For Rails 1.x and older:
|
56
|
+
#
|
57
|
+
# $ grep delivery_method config/environments/production.rb
|
53
58
|
# ActionMailer::Base.delivery_method = :activerecord
|
54
59
|
#
|
55
60
|
# Run ar_sendmail:
|
@@ -67,20 +72,20 @@ require 'action_mailer'
|
|
67
72
|
|
68
73
|
class ActionMailer::ARMailer < ActionMailer::Base
|
69
74
|
|
70
|
-
|
75
|
+
@email_class = nil
|
71
76
|
|
72
77
|
##
|
73
78
|
# Current email class for deliveries.
|
74
79
|
|
75
80
|
def self.email_class
|
76
|
-
|
81
|
+
@email_class ||= Email
|
77
82
|
end
|
78
83
|
|
79
84
|
##
|
80
85
|
# Sets the email class for deliveries.
|
81
86
|
|
82
87
|
def self.email_class=(klass)
|
83
|
-
|
88
|
+
@email_class = klass
|
84
89
|
end
|
85
90
|
|
86
91
|
##
|
@@ -88,9 +93,11 @@ class ActionMailer::ARMailer < ActionMailer::Base
|
|
88
93
|
# used.
|
89
94
|
|
90
95
|
def perform_delivery_activerecord(mail)
|
96
|
+
email_class = ActionMailer::ARMailer.email_class
|
97
|
+
|
91
98
|
mail.destinations.each do |destination|
|
92
|
-
|
93
|
-
|
99
|
+
email_class.create :mail => mail.encoded, :to => destination,
|
100
|
+
:from => mail.from.first
|
94
101
|
end
|
95
102
|
end
|
96
103
|
|
@@ -54,7 +54,7 @@ class ActionMailer::ARSendmail
|
|
54
54
|
##
|
55
55
|
# The version of ActionMailer::ARSendmail you are running.
|
56
56
|
|
57
|
-
VERSION = '1.3.
|
57
|
+
VERSION = '1.3.2'
|
58
58
|
|
59
59
|
##
|
60
60
|
# Maximum number of times authentication will be consecutively retried
|
@@ -432,6 +432,9 @@ end
|
|
432
432
|
email.save rescue nil
|
433
433
|
log "error sending email %d: %p(%s):\n\t%s" %
|
434
434
|
[email.id, e.message, e.class, e.backtrace.join("\n\t")]
|
435
|
+
|
436
|
+
raise e if TimeoutError === e
|
437
|
+
|
435
438
|
smtp.reset
|
436
439
|
end
|
437
440
|
end
|
@@ -447,6 +450,9 @@ end
|
|
447
450
|
sleep delay
|
448
451
|
rescue Net::SMTPServerBusy, SystemCallError, OpenSSL::SSL::SSLError
|
449
452
|
# ignore SMTPServerBusy/EPIPE/ECONNRESET from Net::SMTP.start's ensure
|
453
|
+
rescue TimeoutError
|
454
|
+
# terminate our connection since Net::SMTP may be in a bogus state.
|
455
|
+
sleep delay
|
450
456
|
end
|
451
457
|
|
452
458
|
##
|
data/share/ar_sendmail
CHANGED
File without changes
|
data/test/test_armailer.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
-
require 'test/unit'
|
2
1
|
require 'action_mailer'
|
3
2
|
require 'action_mailer/ar_mailer'
|
3
|
+
require 'rubygems'
|
4
|
+
require 'minitest/autorun'
|
4
5
|
|
5
6
|
##
|
6
7
|
# Pretend mailer
|
@@ -16,7 +17,7 @@ class Mailer < ActionMailer::ARMailer
|
|
16
17
|
|
17
18
|
end
|
18
19
|
|
19
|
-
class TestARMailer <
|
20
|
+
class TestARMailer < MiniTest::Unit::TestCase
|
20
21
|
|
21
22
|
def setup
|
22
23
|
Mailer.email_class = Email
|
data/test/test_arsendmail.rb
CHANGED
@@ -1,8 +1,7 @@
|
|
1
|
-
require 'test/unit'
|
2
1
|
require 'action_mailer'
|
3
2
|
require 'action_mailer/ar_sendmail'
|
4
3
|
require 'rubygems'
|
5
|
-
require '
|
4
|
+
require 'minitest/autorun'
|
6
5
|
|
7
6
|
class ActionMailer::ARSendmail
|
8
7
|
attr_accessor :slept
|
@@ -12,7 +11,7 @@ class ActionMailer::ARSendmail
|
|
12
11
|
end
|
13
12
|
end
|
14
13
|
|
15
|
-
class TestARSendmail <
|
14
|
+
class TestARSendmail < MiniTest::Unit::TestCase
|
16
15
|
|
17
16
|
def setup
|
18
17
|
ActionMailer::Base.reset
|
@@ -31,7 +30,7 @@ class TestARSendmail < Test::Unit::TestCase
|
|
31
30
|
end
|
32
31
|
|
33
32
|
def test_class_create_migration
|
34
|
-
out, =
|
33
|
+
out, = capture_io do
|
35
34
|
ActionMailer::ARSendmail.create_migration 'Mail'
|
36
35
|
end
|
37
36
|
|
@@ -53,11 +52,11 @@ class AddMail < ActiveRecord::Migration
|
|
53
52
|
end
|
54
53
|
EOF
|
55
54
|
|
56
|
-
assert_equal expected, out
|
55
|
+
assert_equal expected, out
|
57
56
|
end
|
58
57
|
|
59
58
|
def test_class_create_model
|
60
|
-
out, =
|
59
|
+
out, = capture_io do
|
61
60
|
ActionMailer::ARSendmail.create_model 'Mail'
|
62
61
|
end
|
63
62
|
|
@@ -66,7 +65,7 @@ class Mail < ActiveRecord::Base
|
|
66
65
|
end
|
67
66
|
EOF
|
68
67
|
|
69
|
-
assert_equal expected, out
|
68
|
+
assert_equal expected, out
|
70
69
|
end
|
71
70
|
|
72
71
|
def test_class_mailq
|
@@ -79,7 +78,7 @@ end
|
|
79
78
|
|
80
79
|
last.last_send_attempt = Time.parse('Thu Aug 10 2006 11:40:05').to_i
|
81
80
|
|
82
|
-
out, err =
|
81
|
+
out, err = capture_io do
|
83
82
|
ActionMailer::ARSendmail.mailq 'Email'
|
84
83
|
end
|
85
84
|
|
@@ -98,15 +97,15 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
98
97
|
-- 0 Kbytes in 3 Requests.
|
99
98
|
EOF
|
100
99
|
|
101
|
-
assert_equal expected, out
|
100
|
+
assert_equal expected, out
|
102
101
|
end
|
103
102
|
|
104
103
|
def test_class_mailq_empty
|
105
|
-
out, err =
|
104
|
+
out, err = capture_io do
|
106
105
|
ActionMailer::ARSendmail.mailq 'Email'
|
107
106
|
end
|
108
107
|
|
109
|
-
assert_equal "Mail queue is empty\n", out
|
108
|
+
assert_equal "Mail queue is empty\n", out
|
110
109
|
end
|
111
110
|
|
112
111
|
def test_class_new
|
@@ -141,20 +140,20 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
141
140
|
|
142
141
|
def test_class_parse_args_chdir
|
143
142
|
argv = %w[-c /tmp]
|
144
|
-
|
143
|
+
|
145
144
|
options = ActionMailer::ARSendmail.process_args argv
|
146
145
|
|
147
146
|
assert_equal '/tmp', options[:Chdir]
|
148
147
|
|
149
148
|
argv = %w[--chdir /tmp]
|
150
|
-
|
149
|
+
|
151
150
|
options = ActionMailer::ARSendmail.process_args argv
|
152
151
|
|
153
152
|
assert_equal '/tmp', options[:Chdir]
|
154
153
|
|
155
154
|
argv = %w[-c /nonexistent]
|
156
|
-
|
157
|
-
out, err =
|
155
|
+
|
156
|
+
out, err = capture_io do
|
158
157
|
assert_raises SystemExit do
|
159
158
|
ActionMailer::ARSendmail.process_args argv
|
160
159
|
end
|
@@ -163,13 +162,13 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
163
162
|
|
164
163
|
def test_class_parse_args_daemon
|
165
164
|
argv = %w[-d]
|
166
|
-
|
165
|
+
|
167
166
|
options = ActionMailer::ARSendmail.process_args argv
|
168
167
|
|
169
168
|
assert_equal true, options[:Daemon]
|
170
169
|
|
171
170
|
argv = %w[--daemon]
|
172
|
-
|
171
|
+
|
173
172
|
options = ActionMailer::ARSendmail.process_args argv
|
174
173
|
|
175
174
|
assert_equal true, options[:Daemon]
|
@@ -177,7 +176,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
177
176
|
|
178
177
|
def test_class_parse_args_delay
|
179
178
|
argv = %w[--delay 75]
|
180
|
-
|
179
|
+
|
181
180
|
options = ActionMailer::ARSendmail.process_args argv
|
182
181
|
|
183
182
|
assert_equal 75, options[:Delay]
|
@@ -187,7 +186,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
187
186
|
assert_equal nil, ENV['RAILS_ENV']
|
188
187
|
|
189
188
|
argv = %w[-e production]
|
190
|
-
|
189
|
+
|
191
190
|
options = ActionMailer::ARSendmail.process_args argv
|
192
191
|
|
193
192
|
assert_equal 'production', options[:RailsEnv]
|
@@ -195,7 +194,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
195
194
|
assert_equal 'production', ENV['RAILS_ENV']
|
196
195
|
|
197
196
|
argv = %w[--environment production]
|
198
|
-
|
197
|
+
|
199
198
|
options = ActionMailer::ARSendmail.process_args argv
|
200
199
|
|
201
200
|
assert_equal 'production', options[:RailsEnv]
|
@@ -203,10 +202,10 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
203
202
|
|
204
203
|
def test_class_parse_args_mailq
|
205
204
|
options = ActionMailer::ARSendmail.process_args []
|
206
|
-
|
205
|
+
refute_includes options, :MailQ
|
207
206
|
|
208
207
|
argv = %w[--mailq]
|
209
|
-
|
208
|
+
|
210
209
|
options = ActionMailer::ARSendmail.process_args argv
|
211
210
|
|
212
211
|
assert_equal true, options[:MailQ]
|
@@ -225,10 +224,10 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
225
224
|
|
226
225
|
def test_class_parse_args_migration
|
227
226
|
options = ActionMailer::ARSendmail.process_args []
|
228
|
-
|
227
|
+
refute_includes options, :Migration
|
229
228
|
|
230
229
|
argv = %w[--create-migration]
|
231
|
-
|
230
|
+
|
232
231
|
options = ActionMailer::ARSendmail.process_args argv
|
233
232
|
|
234
233
|
assert_equal true, options[:Migrate]
|
@@ -236,10 +235,10 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
236
235
|
|
237
236
|
def test_class_parse_args_model
|
238
237
|
options = ActionMailer::ARSendmail.process_args []
|
239
|
-
|
238
|
+
refute_includes options, :Model
|
240
239
|
|
241
240
|
argv = %w[--create-model]
|
242
|
-
|
241
|
+
|
243
242
|
options = ActionMailer::ARSendmail.process_args argv
|
244
243
|
|
245
244
|
assert_equal true, options[:Model]
|
@@ -248,8 +247,8 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
248
247
|
def test_class_parse_args_no_config_environment
|
249
248
|
$".delete 'config/environment.rb'
|
250
249
|
|
251
|
-
out, err =
|
252
|
-
|
250
|
+
out, err = capture_io do
|
251
|
+
assert_raises SystemExit do
|
253
252
|
ActionMailer::ARSendmail.process_args []
|
254
253
|
end
|
255
254
|
end
|
@@ -261,7 +260,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
261
260
|
def test_class_parse_args_no_config_environment_migrate
|
262
261
|
$".delete 'config/environment.rb'
|
263
262
|
|
264
|
-
out, err =
|
263
|
+
out, err = capture_io do
|
265
264
|
ActionMailer::ARSendmail.process_args %w[--create-migration]
|
266
265
|
end
|
267
266
|
|
@@ -274,7 +273,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
274
273
|
def test_class_parse_args_no_config_environment_model
|
275
274
|
$".delete 'config/environment.rb'
|
276
275
|
|
277
|
-
out, err =
|
276
|
+
out, err = capture_io do
|
278
277
|
ActionMailer::ARSendmail.process_args %w[--create-model]
|
279
278
|
end
|
280
279
|
|
@@ -289,13 +288,13 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
289
288
|
|
290
289
|
def test_class_parse_args_once
|
291
290
|
argv = %w[-o]
|
292
|
-
|
291
|
+
|
293
292
|
options = ActionMailer::ARSendmail.process_args argv
|
294
293
|
|
295
294
|
assert_equal true, options[:Once]
|
296
295
|
|
297
296
|
argv = %w[--once]
|
298
|
-
|
297
|
+
|
299
298
|
options = ActionMailer::ARSendmail.process_args argv
|
300
299
|
|
301
300
|
assert_equal true, options[:Once]
|
@@ -303,36 +302,36 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
303
302
|
|
304
303
|
def test_class_parse_args_table_name
|
305
304
|
argv = %w[-t Email]
|
306
|
-
|
305
|
+
|
307
306
|
options = ActionMailer::ARSendmail.process_args argv
|
308
307
|
|
309
308
|
assert_equal 'Email', options[:TableName]
|
310
309
|
|
311
310
|
argv = %w[--table-name=Email]
|
312
|
-
|
311
|
+
|
313
312
|
options = ActionMailer::ARSendmail.process_args argv
|
314
313
|
|
315
314
|
assert_equal 'Email', options[:TableName]
|
316
315
|
end
|
317
316
|
|
318
317
|
def test_class_usage
|
319
|
-
out, err =
|
318
|
+
out, err = capture_io do
|
320
319
|
assert_raises SystemExit do
|
321
320
|
ActionMailer::ARSendmail.usage 'opts'
|
322
321
|
end
|
323
322
|
end
|
324
323
|
|
325
|
-
assert_equal '', out
|
326
|
-
assert_equal "opts\n", err
|
324
|
+
assert_equal '', out
|
325
|
+
assert_equal "opts\n", err
|
327
326
|
|
328
|
-
out, err =
|
327
|
+
out, err = capture_io do
|
329
328
|
assert_raises SystemExit do
|
330
329
|
ActionMailer::ARSendmail.usage 'opts', 'hi'
|
331
330
|
end
|
332
331
|
end
|
333
332
|
|
334
|
-
assert_equal '', out
|
335
|
-
assert_equal "hi\n\nopts\n", err
|
333
|
+
assert_equal '', out
|
334
|
+
assert_equal "hi\n\nopts\n", err
|
336
335
|
end
|
337
336
|
|
338
337
|
def test_cleanup
|
@@ -342,12 +341,12 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
342
341
|
e3 = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
343
342
|
e3.last_send_attempt = Time.now
|
344
343
|
|
345
|
-
out, err =
|
344
|
+
out, err = capture_io do
|
346
345
|
@sm.cleanup
|
347
346
|
end
|
348
347
|
|
349
|
-
assert_equal '', out
|
350
|
-
assert_equal "expired 1 emails from the queue\n", err
|
348
|
+
assert_equal '', out
|
349
|
+
assert_equal "expired 1 emails from the queue\n", err
|
351
350
|
assert_equal 2, Email.records.length
|
352
351
|
|
353
352
|
assert_equal [e1, e2], Email.records
|
@@ -360,18 +359,18 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
360
359
|
|
361
360
|
@sm.max_age = 0
|
362
361
|
|
363
|
-
out, err =
|
362
|
+
out, err = capture_io do
|
364
363
|
@sm.cleanup
|
365
364
|
end
|
366
365
|
|
367
|
-
assert_equal '', out
|
366
|
+
assert_equal '', out
|
368
367
|
assert_equal 2, Email.records.length
|
369
368
|
end
|
370
369
|
|
371
370
|
def test_deliver
|
372
371
|
email = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
373
372
|
|
374
|
-
out, err =
|
373
|
+
out, err = capture_io do
|
375
374
|
@sm.deliver [email]
|
376
375
|
end
|
377
376
|
|
@@ -380,8 +379,8 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
380
379
|
assert_equal 0, Email.records.length
|
381
380
|
assert_equal 0, Net::SMTP.reset_called, 'Reset connection on SyntaxError'
|
382
381
|
|
383
|
-
assert_equal '', out
|
384
|
-
assert_equal "sent email 00000000001 from from to to: \"queued\"\n", err
|
382
|
+
assert_equal '', out
|
383
|
+
assert_equal "sent email 00000000001 from from to to: \"queued\"\n", err
|
385
384
|
end
|
386
385
|
|
387
386
|
def test_deliver_auth_error
|
@@ -395,7 +394,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
395
394
|
|
396
395
|
email = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
397
396
|
|
398
|
-
out, err =
|
397
|
+
out, err = capture_io do
|
399
398
|
@sm.deliver [email]
|
400
399
|
end
|
401
400
|
|
@@ -406,15 +405,15 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
406
405
|
assert_equal 1, @sm.failed_auth_count
|
407
406
|
assert_equal [60], @sm.slept
|
408
407
|
|
409
|
-
assert_equal '', out
|
410
|
-
assert_equal "authentication error, retrying: try again\n", err
|
408
|
+
assert_equal '', out
|
409
|
+
assert_equal "authentication error, retrying: try again\n", err
|
411
410
|
end
|
412
411
|
|
413
412
|
def test_deliver_auth_error_recover
|
414
413
|
email = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
415
414
|
@sm.failed_auth_count = 1
|
416
415
|
|
417
|
-
out, err =
|
416
|
+
out, err = capture_io do @sm.deliver [email] end
|
418
417
|
|
419
418
|
assert_equal 0, @sm.failed_auth_count
|
420
419
|
assert_equal 1, Net::SMTP.deliveries.length
|
@@ -429,14 +428,14 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
429
428
|
|
430
429
|
@sm.failed_auth_count = 1
|
431
430
|
|
432
|
-
out, err =
|
433
|
-
|
431
|
+
out, err = capture_io do
|
432
|
+
assert_raises Net::SMTPAuthenticationError do
|
434
433
|
@sm.deliver []
|
435
434
|
end
|
436
435
|
end
|
437
436
|
|
438
437
|
assert_equal 2, @sm.failed_auth_count
|
439
|
-
assert_equal "authentication error, giving up: try again\n", err
|
438
|
+
assert_equal "authentication error, giving up: try again\n", err
|
440
439
|
end
|
441
440
|
|
442
441
|
def test_deliver_4xx_error
|
@@ -450,7 +449,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
450
449
|
|
451
450
|
email = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
452
451
|
|
453
|
-
out, err =
|
452
|
+
out, err = capture_io do
|
454
453
|
@sm.deliver [email]
|
455
454
|
end
|
456
455
|
|
@@ -459,8 +458,8 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
459
458
|
assert_operator now, :<=, Email.records.first.last_send_attempt
|
460
459
|
assert_equal 1, Net::SMTP.reset_called, 'Reset connection on SyntaxError'
|
461
460
|
|
462
|
-
assert_equal '', out
|
463
|
-
assert_equal "error sending email 1: \"try again\"(Net::SMTPSyntaxError):\n\tone\n\ttwo\n\tthree\n", err
|
461
|
+
assert_equal '', out
|
462
|
+
assert_equal "error sending email 1: \"try again\"(Net::SMTPSyntaxError):\n\tone\n\ttwo\n\tthree\n", err
|
464
463
|
end
|
465
464
|
|
466
465
|
def test_deliver_5xx_error
|
@@ -474,7 +473,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
474
473
|
|
475
474
|
email = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
476
475
|
|
477
|
-
out, err =
|
476
|
+
out, err = capture_io do
|
478
477
|
@sm.deliver [email]
|
479
478
|
end
|
480
479
|
|
@@ -482,8 +481,8 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
482
481
|
assert_equal 0, Email.records.length
|
483
482
|
assert_equal 1, Net::SMTP.reset_called, 'Reset connection on SyntaxError'
|
484
483
|
|
485
|
-
assert_equal '', out
|
486
|
-
assert_equal "5xx error sending email 1, removing from queue: \"unknown recipient\"(Net::SMTPFatalError):\n\tone\n\ttwo\n\tthree\n", err
|
484
|
+
assert_equal '', out
|
485
|
+
assert_equal "5xx error sending email 1, removing from queue: \"unknown recipient\"(Net::SMTPFatalError):\n\tone\n\ttwo\n\tthree\n", err
|
487
486
|
end
|
488
487
|
|
489
488
|
def test_deliver_errno_epipe
|
@@ -495,7 +494,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
495
494
|
|
496
495
|
email = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
497
496
|
|
498
|
-
out, err =
|
497
|
+
out, err = capture_io do
|
499
498
|
@sm.deliver [email]
|
500
499
|
end
|
501
500
|
|
@@ -504,8 +503,8 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
504
503
|
assert_operator now, :>=, Email.records.first.last_send_attempt
|
505
504
|
assert_equal 0, Net::SMTP.reset_called, 'Reset connection on SyntaxError'
|
506
505
|
|
507
|
-
assert_equal '', out
|
508
|
-
assert_equal '', err
|
506
|
+
assert_equal '', out
|
507
|
+
assert_equal '', err
|
509
508
|
end
|
510
509
|
|
511
510
|
def test_deliver_server_busy
|
@@ -519,7 +518,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
519
518
|
|
520
519
|
email = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
521
520
|
|
522
|
-
out, err =
|
521
|
+
out, err = capture_io do
|
523
522
|
@sm.deliver [email]
|
524
523
|
end
|
525
524
|
|
@@ -529,8 +528,8 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
529
528
|
assert_equal 0, Net::SMTP.reset_called, 'Reset connection on SyntaxError'
|
530
529
|
assert_equal [60], @sm.slept
|
531
530
|
|
532
|
-
assert_equal '', out
|
533
|
-
assert_equal "server too busy, sleeping 60 seconds\n", err
|
531
|
+
assert_equal '', out
|
532
|
+
assert_equal "server too busy, sleeping 60 seconds\n", err
|
534
533
|
end
|
535
534
|
|
536
535
|
def test_deliver_syntax_error
|
@@ -546,7 +545,7 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
546
545
|
email1 = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
547
546
|
email2 = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
548
547
|
|
549
|
-
out, err =
|
548
|
+
out, err = capture_io do
|
550
549
|
@sm.deliver [email1, email2]
|
551
550
|
end
|
552
551
|
|
@@ -555,8 +554,8 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
555
554
|
assert_equal 1, Net::SMTP.reset_called, 'Reset connection on SyntaxError'
|
556
555
|
assert_operator now, :<=, Email.records.first.last_send_attempt
|
557
556
|
|
558
|
-
assert_equal '', out
|
559
|
-
assert_equal "error sending email 1: \"blah blah blah\"(Net::SMTPSyntaxError):\n\tone\n\ttwo\n\tthree\nsent email 00000000002 from from to to: \"queued\"\n", err
|
557
|
+
assert_equal '', out
|
558
|
+
assert_equal "error sending email 1: \"blah blah blah\"(Net::SMTPSyntaxError):\n\tone\n\ttwo\n\tthree\nsent email 00000000002 from from to to: \"queued\"\n", err
|
560
559
|
end
|
561
560
|
|
562
561
|
def test_deliver_timeout
|
@@ -570,36 +569,36 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
570
569
|
|
571
570
|
email = Email.create :mail => 'body', :to => 'to', :from => 'from'
|
572
571
|
|
573
|
-
out, err =
|
572
|
+
out, err = capture_io do
|
574
573
|
@sm.deliver [email]
|
575
574
|
end
|
576
575
|
|
577
576
|
assert_equal 0, Net::SMTP.deliveries.length
|
578
577
|
assert_equal 1, Email.records.length
|
579
578
|
assert_operator now, :>=, Email.records.first.last_send_attempt
|
580
|
-
assert_equal
|
579
|
+
assert_equal 0, Net::SMTP.reset_called, 'SMTP terminated on Timeout'
|
581
580
|
|
582
|
-
assert_equal '', out
|
583
|
-
assert_equal "error sending email 1: \"timed out\"(Timeout::Error):\n\tone\n\ttwo\n\tthree\n", err
|
581
|
+
assert_equal '', out
|
582
|
+
assert_equal "error sending email 1: \"timed out\"(Timeout::Error):\n\tone\n\ttwo\n\tthree\n", err
|
584
583
|
end
|
585
584
|
|
586
585
|
def test_do_exit
|
587
|
-
out, err =
|
588
|
-
|
586
|
+
out, err = capture_io do
|
587
|
+
assert_raises SystemExit do
|
589
588
|
@sm.do_exit
|
590
589
|
end
|
591
590
|
end
|
592
591
|
|
593
|
-
assert_equal '', out
|
594
|
-
assert_equal "caught signal, shutting down\n", err
|
592
|
+
assert_equal '', out
|
593
|
+
assert_equal "caught signal, shutting down\n", err
|
595
594
|
end
|
596
595
|
|
597
596
|
def test_log
|
598
|
-
out, err =
|
597
|
+
out, err = capture_io do
|
599
598
|
@sm.log 'hi'
|
600
599
|
end
|
601
600
|
|
602
|
-
assert_equal "hi\n", err
|
601
|
+
assert_equal "hi\n", err
|
603
602
|
end
|
604
603
|
|
605
604
|
def test_find_emails
|
@@ -618,14 +617,14 @@ Last send attempt: Thu Aug 10 11:40:05 -0700 2006
|
|
618
617
|
|
619
618
|
found_emails = []
|
620
619
|
|
621
|
-
out, err =
|
620
|
+
out, err = capture_io do
|
622
621
|
found_emails = @sm.find_emails
|
623
622
|
end
|
624
623
|
|
625
624
|
assert_equal emails, found_emails
|
626
625
|
|
627
|
-
assert_equal '', out
|
628
|
-
assert_equal "found 3 emails to send\n", err
|
626
|
+
assert_equal '', out
|
627
|
+
assert_equal "found 3 emails to send\n", err
|
629
628
|
end
|
630
629
|
|
631
630
|
def test_smtp_settings
|
metadata
CHANGED
@@ -1,39 +1,74 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4.3
|
3
|
-
specification_version: 1
|
4
2
|
name: ar_mailer
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 1.3.
|
7
|
-
date: 2007-07-31 00:00:00 -07:00
|
8
|
-
summary: A two-phase delivery agent for ActionMailer
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: drbrain@segment7.net
|
12
|
-
homepage: http://seattlerb.org/ar_mailer
|
13
|
-
rubyforge_project: seattlerb
|
14
|
-
description: Even delivering email to the local machine may take too long when you have to send hundreds of messages. ar_mailer allows you to store messages into the database for later delivery by a separate process, ar_sendmail.
|
15
|
-
autorequire:
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
25
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
27
|
-
- - ">"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.0.0
|
30
|
-
version:
|
4
|
+
version: 1.3.2
|
31
5
|
platform: ruby
|
32
|
-
signing_key:
|
33
|
-
cert_chain:
|
34
|
-
post_install_message:
|
35
6
|
authors:
|
36
7
|
- Eric Hodel
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain:
|
11
|
+
- |
|
12
|
+
-----BEGIN CERTIFICATE-----
|
13
|
+
MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMRAwDgYDVQQDDAdkcmJy
|
14
|
+
YWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZFgNu
|
15
|
+
ZXQwHhcNMDcxMjIxMDIwNDE0WhcNMDgxMjIwMDIwNDE0WjBBMRAwDgYDVQQDDAdk
|
16
|
+
cmJyYWluMRgwFgYKCZImiZPyLGQBGRYIc2VnbWVudDcxEzARBgoJkiaJk/IsZAEZ
|
17
|
+
FgNuZXQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCbbgLrGLGIDE76
|
18
|
+
LV/cvxdEzCuYuS3oG9PrSZnuDweySUfdp/so0cDq+j8bqy6OzZSw07gdjwFMSd6J
|
19
|
+
U5ddZCVywn5nnAQ+Ui7jMW54CYt5/H6f2US6U0hQOjJR6cpfiymgxGdfyTiVcvTm
|
20
|
+
Gj/okWrQl0NjYOYBpDi+9PPmaH2RmLJu0dB/NylsDnW5j6yN1BEI8MfJRR+HRKZY
|
21
|
+
mUtgzBwF1V4KIZQ8EuL6I/nHVu07i6IkrpAgxpXUfdJQJi0oZAqXurAV3yTxkFwd
|
22
|
+
g62YrrW26mDe+pZBzR6bpLE+PmXCzz7UxUq3AE0gPHbiMXie3EFE0oxnsU3lIduh
|
23
|
+
sCANiQ8BAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
|
24
|
+
BBS5k4Z75VSpdM0AclG2UvzFA/VW5DANBgkqhkiG9w0BAQUFAAOCAQEAHagT4lfX
|
25
|
+
kP/hDaiwGct7XPuVGbrOsKRVD59FF5kETBxEc9UQ1clKWngf8JoVuEoKD774dW19
|
26
|
+
bU0GOVWO+J6FMmT/Cp7nuFJ79egMf/gy4gfUfQMuvfcr6DvZUPIs9P/TlK59iMYF
|
27
|
+
DIOQ3DxdF3rMzztNUCizN4taVscEsjCcgW6WkUJnGdqlu3OHWpQxZBJkBTjPCoc6
|
28
|
+
UW6on70SFPmAy/5Cq0OJNGEWBfgD9q7rrs/X8GGwUWqXb85RXnUVi/P8Up75E0ag
|
29
|
+
14jEc90kN+C7oI/AGCBN0j6JnEtYIEJZibjjDJTSMWlUKKkj30kq7hlUC2CepJ4v
|
30
|
+
x52qPcexcYZR7w==
|
31
|
+
-----END CERTIFICATE-----
|
32
|
+
|
33
|
+
date: 2009-04-29 00:00:00 -07:00
|
34
|
+
default_executable:
|
35
|
+
dependencies:
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: minitest
|
38
|
+
type: :development
|
39
|
+
version_requirement:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: "1.3"
|
45
|
+
version:
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: hoe
|
48
|
+
type: :development
|
49
|
+
version_requirement:
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.12.1
|
55
|
+
version:
|
56
|
+
description: |-
|
57
|
+
ar_mailer is a two-phase delivery agent for ActionMailer. Even delivering
|
58
|
+
email to the local machine may take too long when you have to send hundreds of
|
59
|
+
messages. ar_mailer allows you to store messages into the database for later
|
60
|
+
delivery by a separate process, ar_sendmail.
|
61
|
+
email:
|
62
|
+
- drbrain@segment7.net
|
63
|
+
executables:
|
64
|
+
- ar_sendmail
|
65
|
+
extensions: []
|
66
|
+
|
67
|
+
extra_rdoc_files:
|
68
|
+
- History.txt
|
69
|
+
- LICENSE.txt
|
70
|
+
- Manifest.txt
|
71
|
+
- README.txt
|
37
72
|
files:
|
38
73
|
- History.txt
|
39
74
|
- LICENSE.txt
|
@@ -48,30 +83,35 @@ files:
|
|
48
83
|
- test/action_mailer.rb
|
49
84
|
- test/test_armailer.rb
|
50
85
|
- test/test_arsendmail.rb
|
51
|
-
|
52
|
-
|
53
|
-
|
86
|
+
has_rdoc: true
|
87
|
+
homepage: http://seattlerb.rubyforge.org/ar_mailer
|
88
|
+
licenses: []
|
89
|
+
|
90
|
+
post_install_message:
|
54
91
|
rdoc_options:
|
55
92
|
- --main
|
56
93
|
- README.txt
|
57
|
-
|
58
|
-
-
|
59
|
-
|
60
|
-
|
61
|
-
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: "0"
|
101
|
+
version:
|
102
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: "0"
|
107
|
+
version:
|
66
108
|
requirements: []
|
67
109
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
version: 1.2.2
|
77
|
-
version:
|
110
|
+
rubyforge_project: seattlerb
|
111
|
+
rubygems_version: 1.3.2
|
112
|
+
signing_key:
|
113
|
+
specification_version: 3
|
114
|
+
summary: ar_mailer is a two-phase delivery agent for ActionMailer
|
115
|
+
test_files:
|
116
|
+
- test/test_armailer.rb
|
117
|
+
- test/test_arsendmail.rb
|
metadata.gz.sig
ADDED
Binary file
|