zendesk-ar_mailer 1.4.6 → 2.1.5

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,57 @@
1
+ = 2.1.5
2
+
3
+ * Bugs fixed
4
+ * Load ar_mailer after environment to fix issue with lazy loading of ActionMailer in Rails 2.3
5
+
6
+ = 2.1.4
7
+
8
+ * Bugs fixed
9
+ * Explicitly require ar_mailer in ar_sendmail because its not getting loaded by the Rails environment for some reason
10
+
11
+ = 2.1.3
12
+
13
+ * Tests now pass on gem install
14
+ * Removed deprecated ActionMailer::ARMailer class
15
+ * Bugs fixed
16
+ * Fixed issue with pre-loading ActionMailer. No use ActionMailer::Base.email_class directly rather than store in ARSendmail instance var so no need to pre-load ActionMailer.
17
+
18
+ = 2.1.2
19
+
20
+ * Bugs fixed
21
+ * Require ar_mailer in ar_sendmail since the change to remove TableName and use email_class
22
+
23
+ = 2.1.1
24
+
25
+ * Force gem rebuild
26
+
27
+ = 2.1.0
28
+
29
+ * Switched to using a Rails generator for migration and model files. The ar_sendmail options have been removed.
30
+
31
+ = 2.0.2
32
+
33
+ * Removed TableName option from ar_sendmail options as its redundant. The Rails environment gets loaded so the settings for email class also get loaded
34
+ * Bugs fixed
35
+ * Email class reloading issue in development mode causing AR email class defaults to be lost when cached
36
+
37
+ = 2.0.1
38
+
39
+ * Added option to use smtp setting of :tls => false to disable TLS auto start in Ruby 1.8.7+
40
+ * Removed some cruft which can be handled by ActiveSupport
41
+
42
+ = 2.0.0
43
+
44
+ * Removed need to use ARMailer subclass. Just set the delivery method and you are ready to go. Backwards compatible with a deprecation notice if you subclass old ARMailer class.
45
+ * Only include SMTP TLS patch if Ruby version < 1.8.7 as it has an alternative. Changes based on Calvin Yu's [cyu] fork.
46
+ * Renamed default migration name to the modern Rails default
47
+ * Only authenticate if emails waiting to be sent
48
+ * Added --version switch to ar_sendmail binary
49
+ * Created a lighthouse account for this project (adzap fork only). See README.
50
+
51
+ = 1.4.4
52
+
53
+ * Exit init.d script with message if no mailers defined.
54
+
1
55
  = 1.4.3
2
56
 
3
57
  * Bugs fixed
data/README.rdoc ADDED
@@ -0,0 +1,149 @@
1
+ = ar_mailer
2
+
3
+ A two-phase delivery agent for ActionMailer
4
+
5
+ Rubyforge Project:
6
+
7
+ http://rubyforge.org/projects/seattlerb
8
+
9
+ Documentation:
10
+
11
+ http://seattlerb.org/ar_mailer
12
+
13
+ and for forked additions
14
+
15
+ http://github.com/adzap/ar_mailer/wikis
16
+
17
+ Bugs:
18
+
19
+ http://adzap.lighthouseapp.com/projects/26997-ar_mailer
20
+
21
+ == About
22
+
23
+ Even delivering email to the local machine may take too long when you have to
24
+ send hundreds of messages. ar_mailer allows you to store messages into the
25
+ database for later delivery by a separate process, ar_sendmail.
26
+
27
+ == Installing ar_mailer (forked)
28
+
29
+ Before installing you will need to make sure the original gem is uninstalled as they can't coexist:
30
+
31
+ $ sudo gem uninstall ar_mailer
32
+
33
+ Install the gem from GitHub gems server:
34
+
35
+ First, if you haven't already:
36
+
37
+ $ sudo gem sources -a http://gems.github.com
38
+
39
+ Then
40
+
41
+ $ sudo gem install adzap-ar_mailer
42
+
43
+ For Rails >= 2.1, in your environment.rb:
44
+
45
+ config.gem "adzap-ar_mailer", :lib => 'action_mailer/ar_mailer', :source => 'http://gems.github.com'
46
+
47
+ For Rails 2.0, in an initializer file:
48
+
49
+ require 'action_mailer/ar_mailer'
50
+
51
+ == Usage
52
+
53
+ Go to your Rails project:
54
+
55
+ $ cd your_rails_project
56
+
57
+ Create the migration and model:
58
+
59
+ This shows the options which are only the model name, which defaults to Email
60
+
61
+ ./script/generate ar_mailer -h
62
+
63
+ Then run with defaults
64
+
65
+ ./script/generate ar_mailer
66
+
67
+ Or specify a custom model name
68
+
69
+ ./script/generate ar_mailer Newsletter
70
+
71
+ See Alternate Mail Storage if you use a custom model name
72
+
73
+ In your mailer class methods you must be sure to set the From address for your emails.
74
+ Something like:
75
+
76
+ def list_send(recipient)
77
+ from 'no_reply@example.com'
78
+ # ...
79
+
80
+ Edit config/environments/production.rb and set the delivery method:
81
+
82
+ config.action_mailer.delivery_method = :activerecord
83
+
84
+ Or if you need to, you can set each mailer class delivery method individually:
85
+
86
+ class MyMailer < ActionMailer::Base
87
+ self.delivery_method = :activerecord
88
+ end
89
+
90
+ This can be useful when using plugins like ExceptionNotification. Where it
91
+ might be foolish to tie the sending of the email alert to the database when the
92
+ database might be causing the exception being raised. In this instance you could
93
+ override ExceptionNofitier delivery method to be smtp or set the other
94
+ mailer classes to use ARMailer explicitly.
95
+
96
+ Then to run it:
97
+
98
+ $ ar_sendmail
99
+
100
+ You can also run it from cron with -o, or as a daemon with -d.
101
+
102
+ See <tt>ar_sendmail -h</tt> for full details.
103
+
104
+ === Using the --log-header option
105
+
106
+ Ever get complaints from customers who never got that email your system sent? Try this for a strategy:
107
+
108
+ 1. When building the email, add the header "X-Delivery-Context: invite-#{invite.id}"
109
+ 2. Launch ar_sendmail with --log-header X-Delivery-Context
110
+ 3. When emails get sent, you can now associate the email SMTP message id with an record in your DB
111
+
112
+ So when customer X did not ever get invite 4, you now have the means of tracking invite 4 and find out exactly what happened.
113
+
114
+ === Alternate Mail Storage
115
+
116
+ By default ar_mailer assumes you are using an ActiveRecord model called
117
+ Email to store the emails created before sending. If you want to change
118
+ this you alter it in an intializer like so:
119
+
120
+ ActionMailer::Base.email_class = Newsletter
121
+
122
+ === A Word on TLS
123
+
124
+ If you are using Ruby >= 1.8.7, TLS will be enabled automatically if your
125
+ SMTP server supports it. If you do not want it to automatically enabled then
126
+ set the :tls option to false in your smtp_settings.
127
+
128
+ If you are on Ruby <= 1.8.6, then the TLS patch included in this plugin will
129
+ be loaded, so you don't need another TLS plugin to add the capability. This
130
+ patch allows you to explicit set if the server supports TLS by setting the
131
+ :tls option to true in your smtp_settings.
132
+
133
+ === Help
134
+
135
+ See ar_sendmail -h for options to ar_sendmail.
136
+
137
+ NOTE: You may need to delete an smtp_tls.rb file if you have one lying
138
+ around. ar_mailer supplies it own.
139
+
140
+ == Run as a service (init.d/rc.d scripts)
141
+
142
+ For Linux both script and demo config files are in share/linux.
143
+ See ar_sendmail.conf for setting up your config. Copy the ar_sendmail file
144
+ to /etc/init.d/ and make it executable. Then for Debian based distros run
145
+ 'sudo update-rc.d ar_sendmail defaults' and it should work. Make sure you have
146
+ the config file /etc/ar_sendmail.conf in place before starting.
147
+
148
+ For FreeBSD or NetBSD script is share/bsd/ar_sendmail. This is old and does not
149
+ support the config file unless someone wants to submit a patch.
data/Rakefile CHANGED
@@ -8,23 +8,21 @@ $:.unshift(File.expand_path(File.dirname(__FILE__) + '/lib'))
8
8
  require './lib/action_mailer/ar_sendmail'
9
9
 
10
10
  ar_mailer_gemspec = Gem::Specification.new do |s|
11
- s.name = %q{ar_mailer}
11
+ s.name = %q{zendesk-ar_mailer}
12
12
  s.version = ActionMailer::ARSendmail::VERSION
13
13
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
14
- s.authors = ["Eric Hodel"]
15
- s.date = %q{2008-07-04}
14
+ s.authors = ["Eric Hodel", "Adam Meehan", "Morten Primdahl"]
16
15
  s.default_executable = %q{ar_sendmail}
17
16
  s.description = %q{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.}
18
- s.email = %q{drbrain@segment7.net}
17
+ s.email = %q{adam.meehan@gmail.com}
19
18
  s.executables = ["ar_sendmail"]
20
- s.extra_rdoc_files = ["History.txt", "LICENSE.txt", "Manifest.txt", "README.txt"]
21
- s.files = ["History.txt", "LICENSE.txt", "Manifest.txt", "README.txt", "Rakefile", "bin/ar_sendmail", "lib/action_mailer/ar_mailer.rb", "lib/action_mailer/ar_sendmail.rb", "lib/ar_sendmail_logger.rb", "lib/smtp_tls.rb", "share/bsd/ar_sendmail", "share/linux/ar_sendmail", "share/linux/ar_sendmail.conf", "test/action_mailer.rb", "test/test_armailer.rb", "test/test_arsendmail.rb"]
19
+ s.extra_rdoc_files = ["History.txt", "LICENSE.txt", "README.rdoc"]
20
+ s.files = ["History.txt", "LICENSE.txt", "README.rdoc", "Rakefile", "bin/ar_sendmail", "generators/ar_mailer/ar_mailer_generator.rb", "generators/ar_mailer/templates/migration.rb", "generators/ar_mailer/templates/model.rb", "lib/action_mailer/ar_mailer.rb", "lib/action_mailer/ar_sendmail.rb", "lib/smtp_tls.rb", "lib/ar_sendmail_logger.rb", "share/bsd/ar_sendmail", "share/linux/ar_sendmail", "share/linux/ar_sendmail.conf", "test/resources/action_mailer.rb", "test/test_armailer.rb", "test/test_arsendmail.rb", "test/test_helper.rb"]
22
21
  s.has_rdoc = true
23
- s.homepage = %q{http://seattlerb.org/ar_mailer}
24
- s.rdoc_options = ["--main", "README.txt"]
22
+ s.homepage = %q{http://github.com/zendesk/ar_mailer}
23
+ s.rdoc_options = ["--main", "README.rdoc"]
25
24
  s.require_paths = ["lib"]
26
25
  s.rubyforge_project = %q{seattlerb}
27
- s.rubygems_version = %q{1.2.0}
28
26
  s.summary = %q{A two-phase delivery agent for ActionMailer}
29
27
  s.test_files = ["test/test_armailer.rb", "test/test_arsendmail.rb"]
30
28
  end
@@ -33,20 +31,16 @@ Rake::GemPackageTask.new(ar_mailer_gemspec) do |pkg|
33
31
  pkg.gem_spec = ar_mailer_gemspec
34
32
  end
35
33
 
36
- namespace :gem do
37
- namespace :spec do
38
- desc "Update ar_mailer.gemspec"
39
- task :generate do
40
- File.open("ar_mailer.gemspec", "w") do |f|
41
- f.puts(ar_mailer_gemspec.to_ruby)
42
- end
43
- end
34
+ desc "Update ar_mailer.gemspec"
35
+ task :make_spec do
36
+ File.open("ar_mailer.gemspec", "w") do |f|
37
+ f.puts(ar_mailer_gemspec.to_ruby)
44
38
  end
45
39
  end
46
40
 
47
41
  desc "Build packages and install"
48
42
  task :install => :package do
49
- sh %{sudo gem install --local pkg/ar_mailer-#{ActionMailer::ARSendmail::VERSION}}
43
+ sh %{sudo gem install --local --test pkg/ar_mailer-#{ActionMailer::ARSendmail::VERSION}}
50
44
  end
51
45
 
52
46
  desc 'Default: run unit tests.'
@@ -55,6 +49,6 @@ task :default => :test
55
49
  desc 'Test the ar_mailer gem.'
56
50
  Rake::TestTask.new(:test) do |t|
57
51
  t.libs << 'lib' << 'test'
58
- t.pattern = 'test/**/test_*.rb'
52
+ t.test_files = FileList['test/**/test_*.rb'].exclude("test/test_helper.rb")
59
53
  t.verbose = true
60
54
  end
@@ -0,0 +1,25 @@
1
+ class ArMailerGenerator < Rails::Generator::NamedBase
2
+
3
+ def initialize(runtime_args, runtime_options = {})
4
+ runtime_args.unshift('Email') if runtime_args.empty?
5
+ super
6
+ end
7
+
8
+ def manifest
9
+ record do |m|
10
+ m.class_collisions class_name
11
+
12
+ m.template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb")
13
+
14
+ m.migration_template 'migration.rb', 'db/migrate', :assigns => {
15
+ :migration_name => "Create#{class_name.pluralize.gsub(/::/, '')}"
16
+ }, :migration_file_name => "create_#{file_path.gsub(/\//, '_').pluralize}"
17
+ end
18
+ end
19
+
20
+ protected
21
+ def banner
22
+ "Usage: #{$0} #{spec.name} EmailModelName (default: Email)"
23
+ end
24
+
25
+ end
@@ -0,0 +1,15 @@
1
+ class <%= migration_name %> < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :<%= table_name %> do |t|
4
+ t.column :from, :string
5
+ t.column :to, :string
6
+ t.column :last_send_attempt, :integer, :default => 0
7
+ t.column :mail, :text
8
+ t.column :created_on, :datetime
9
+ end
10
+ end
11
+
12
+ def self.down
13
+ drop_table :<%= table_name %>
14
+ end
15
+ end
@@ -0,0 +1,2 @@
1
+ class <%= class_name %> < ActiveRecord::Base
2
+ end
@@ -1,111 +1,31 @@
1
- require 'action_mailer'
2
-
3
1
  ##
4
2
  # Adds sending email through an ActiveRecord table as a delivery method for
5
3
  # ActionMailer.
6
4
  #
7
- # == Converting to ActionMailer::ARMailer
8
- #
9
- # Go to your Rails project:
10
- #
11
- # $ cd your_rails_project
12
- #
13
- # Create a new migration:
14
- #
15
- # $ ar_sendmail --create-migration
16
- #
17
- # You'll need to redirect this into a file. If you want a different name
18
- # provide the --table-name option.
19
- #
20
- # Create a new model:
21
- #
22
- # $ ar_sendmail --create-model
23
- #
24
- # You'll need to redirect this into a file. If you want a different name
25
- # provide the --table-name option.
26
- #
27
- # Change your email classes to inherit from ActionMailer::ARMailer instead of
28
- # ActionMailer::Base:
29
- #
30
- # --- app/model/emailer.rb.orig 2006-08-10 13:16:33.000000000 -0700
31
- # +++ app/model/emailer.rb 2006-08-10 13:16:43.000000000 -0700
32
- # @@ -1,4 +1,4 @@
33
- # -class Emailer < ActionMailer::Base
34
- # +class Emailer < ActionMailer::ARMailer
35
- #
36
- # def comment_notification(comment)
37
- # from comment.author.email
38
- #
39
- # You'll need to be sure to set the From address for your emails. Something
40
- # like:
41
- #
42
- # def list_send(recipient)
43
- # from 'no_reply@example.com'
44
- # # ...
45
- #
46
- # Edit config/environment.rb and require ar_mailer.rb:
47
- #
48
- # require 'action_mailer/ar_mailer'
49
- #
50
- # Edit config/environments/production.rb and set the delivery agent:
51
- #
52
- # $ grep delivery_method config/environments/production.rb
53
- # ActionMailer::Base.delivery_method = :activerecord
54
- #
55
- # Run ar_sendmail:
56
- #
57
- # $ ar_sendmail
58
- #
59
- # You can also run it from cron with -o, or as a daemon with -d.
60
- #
61
- # See <tt>ar_sendmail -h</tt> for full details.
62
- #
63
- # == Alternate Mail Storage
64
- #
65
- # If you want to set the ActiveRecord model that emails will be stored in,
66
- # see ActionMailer::ARMailer::email_class=
67
-
68
- class ActionMailer::ARMailer < ActionMailer::Base
69
-
70
- @@email_class = Email
71
5
 
72
- ##
73
- # Current email class for deliveries.
74
-
75
- def self.email_class
76
- @@email_class
77
- end
6
+ class ActionMailer::Base
78
7
 
79
8
  ##
80
- # Sets the email class for deliveries.
9
+ # Set the email class for deliveries. Handle class reloading issues which prevents caching the email class.
10
+ #
11
+ @@email_class_name = 'Email'
81
12
 
82
13
  def self.email_class=(klass)
83
- @@email_class = klass
14
+ @@email_class_name = klass.to_s
84
15
  end
85
16
 
86
- @@context_header = 'X-Delivery-Context'
87
-
88
- def self.context_header
89
- @@context_header
17
+ def self.email_class
18
+ @@email_class_name.constantize
90
19
  end
91
-
20
+
92
21
  ##
93
22
  # Adds +mail+ to the Email table. Only the first From address for +mail+ is
94
23
  # used.
95
24
 
96
25
  def perform_delivery_activerecord(mail)
97
26
  mail.destinations.each do |destination|
98
- # If the email has the context header set, assume that the caller added a context column
99
- if @@context_header && mail.header_string(@@context_header)
100
- @@email_class.create(
101
- :mail => mail.encoded, :to => destination,
102
- :from => mail.from.first, :context => mail.header_string(@@context_header)
103
- )
104
- else
105
- @@email_class.create(:mail => mail.encoded, :to => destination, :from => mail.from.first)
106
- end
27
+ self.class.email_class.create :mail => mail.encoded, :to => destination, :from => mail.from.first
107
28
  end
108
29
  end
109
30
 
110
31
  end
111
-