actionmailer 7.0.8.1 → 7.1.0.beta1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +85 -103
- data/MIT-LICENSE +1 -1
- data/README.rdoc +2 -2
- data/lib/action_mailer/base.rb +46 -35
- data/lib/action_mailer/callbacks.rb +31 -0
- data/lib/action_mailer/delivery_methods.rb +5 -3
- data/lib/action_mailer/deprecator.rb +7 -0
- data/lib/action_mailer/gem_version.rb +4 -4
- data/lib/action_mailer/inline_preview_interceptor.rb +2 -0
- data/lib/action_mailer/log_subscriber.rb +4 -0
- data/lib/action_mailer/mail_delivery_job.rb +7 -2
- data/lib/action_mailer/mail_helper.rb +2 -0
- data/lib/action_mailer/message_delivery.rb +20 -12
- data/lib/action_mailer/parameterized.rb +7 -1
- data/lib/action_mailer/preview.rb +32 -8
- data/lib/action_mailer/queued_delivery.rb +12 -0
- data/lib/action_mailer/railtie.rb +21 -16
- data/lib/action_mailer/rescuable.rb +2 -0
- data/lib/action_mailer/test_case.rb +9 -4
- data/lib/action_mailer/test_helper.rb +134 -11
- data/lib/action_mailer/version.rb +1 -1
- data/lib/action_mailer.rb +10 -2
- data/lib/rails/generators/mailer/USAGE +12 -8
- metadata +21 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 201e9f4b5b87758d889f7de794ef57e593a1c29b45dba85b637b4efa968e82d8
|
4
|
+
data.tar.gz: d82bf93a9b2dc6c5f3984eee4c926a1e62944e3ae879049bfe049fa2310840af
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b083225f05366cf307292e36152672635f96ec03e29f883de1761e3077b4031d0c16ca7521d4d68230e1d72871ed5a07572bf429656f640d793e8fe02d0e7f1c
|
7
|
+
data.tar.gz: a18ee76751cc90e5aded8835a6abb5ff472c45f8afd4ae7acdccac5f07611dbd896962fd473517891abfa3ecbc6f48e6ba3318fca70d534e20cbc590aec814bf
|
data/CHANGELOG.md
CHANGED
@@ -1,141 +1,123 @@
|
|
1
|
-
## Rails 7.0.
|
1
|
+
## Rails 7.1.0.beta1 (September 13, 2023) ##
|
2
2
|
|
3
|
-
*
|
3
|
+
* Mailers are listed in alphabetical order on the mailer preview page now.
|
4
4
|
|
5
|
+
*Martin Spickermann*
|
5
6
|
|
6
|
-
|
7
|
+
* Deprecate passing params to `assert_enqueued_email_with` via the `:args`
|
8
|
+
kwarg. `assert_enqueued_email_with` now supports a `:params` kwarg, so use
|
9
|
+
that to pass params:
|
7
10
|
|
8
|
-
|
11
|
+
```ruby
|
12
|
+
# BEFORE
|
13
|
+
assert_enqueued_email_with MyMailer, :my_method, args: { my_param: "value" }
|
9
14
|
|
15
|
+
# AFTER
|
16
|
+
assert_enqueued_email_with MyMailer, :my_method, params: { my_param: "value" }
|
17
|
+
```
|
10
18
|
|
11
|
-
|
19
|
+
To specify named mailer args as a Hash, wrap the Hash in an array:
|
12
20
|
|
13
|
-
|
21
|
+
```ruby
|
22
|
+
assert_enqueued_email_with MyMailer, :my_method, args: [{ my_arg: "value" }]
|
23
|
+
# OR
|
24
|
+
assert_enqueued_email_with MyMailer, :my_method, args: [my_arg: "value"]
|
25
|
+
```
|
14
26
|
|
27
|
+
*Jonathan Hefner*
|
15
28
|
|
16
|
-
|
29
|
+
* Accept procs for args and params in `assert_enqueued_email_with`
|
17
30
|
|
18
|
-
|
31
|
+
```ruby
|
32
|
+
assert_enqueued_email_with DeliveryJob, params: -> p { p[:token] =~ /\w+/ } do
|
33
|
+
UserMailer.with(token: user.generate_token).email_verification.deliver_later
|
34
|
+
end
|
35
|
+
```
|
19
36
|
|
37
|
+
*Max Chernyak*
|
20
38
|
|
21
|
-
|
39
|
+
* Added `*_deliver` callbacks to `ActionMailer::Base` that wrap mail message delivery.
|
22
40
|
|
23
|
-
|
41
|
+
Example:
|
24
42
|
|
43
|
+
```ruby
|
44
|
+
class EventsMailer < ApplicationMailer
|
45
|
+
after_deliver do
|
46
|
+
User.find_by(email: message.to.first).update(email_provider_id: message.message_id, emailed_at: Time.current)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
```
|
25
50
|
|
26
|
-
|
51
|
+
*Ben Sheldon*
|
27
52
|
|
28
|
-
*
|
53
|
+
* Added `deliver_enqueued_emails` to `ActionMailer::TestHelper`. This method
|
54
|
+
delivers all enqueued email jobs.
|
29
55
|
|
56
|
+
Example:
|
30
57
|
|
31
|
-
|
58
|
+
```ruby
|
59
|
+
def test_deliver_enqueued_emails
|
60
|
+
deliver_enqueued_emails do
|
61
|
+
ContactMailer.welcome.deliver_later
|
62
|
+
end
|
63
|
+
assert_emails 1
|
64
|
+
end
|
65
|
+
```
|
32
66
|
|
33
|
-
*
|
67
|
+
*Andrew Novoselac*
|
34
68
|
|
69
|
+
* The `deliver_later_queue_name` used by the default mailer job can now be
|
70
|
+
configured on a per-mailer basis. Previously this was only configurable
|
71
|
+
for all mailers via `ActionMailer::Base`.
|
35
72
|
|
36
|
-
|
73
|
+
Example:
|
37
74
|
|
38
|
-
|
75
|
+
```ruby
|
76
|
+
class EventsMailer < ApplicationMailer
|
77
|
+
self.deliver_later_queue_name = :throttled_mailer
|
78
|
+
end
|
79
|
+
```
|
39
80
|
|
81
|
+
*Jeffrey Hardy*
|
40
82
|
|
41
|
-
|
83
|
+
* Email previews now include an expandable section to show all headers.
|
42
84
|
|
43
|
-
|
85
|
+
Headers like `Message-ID` for threading or email service provider specific
|
86
|
+
features like analytics tags or account metadata can now be viewed directly
|
87
|
+
in the mailer preview.
|
44
88
|
|
89
|
+
*Matt Swanson*
|
45
90
|
|
46
|
-
|
91
|
+
* Default `ActionMailer::Parameterized#params` to an empty `Hash`
|
47
92
|
|
48
|
-
*
|
93
|
+
*Sean Doyle*
|
49
94
|
|
95
|
+
* Introduce the `capture_emails` test helper.
|
50
96
|
|
51
|
-
|
97
|
+
Returns all emails that are sent in a block.
|
52
98
|
|
53
|
-
|
99
|
+
```ruby
|
100
|
+
def test_emails
|
101
|
+
emails = capture_emails do
|
102
|
+
ContactMailer.welcome.deliver_now
|
103
|
+
ContactMailer.welcome.deliver_later
|
104
|
+
end
|
105
|
+
assert_email "Hi there", emails.first.subject
|
106
|
+
end
|
107
|
+
```
|
54
108
|
|
109
|
+
*Alex Ghiculescu*
|
55
110
|
|
56
|
-
|
111
|
+
* Added ability to download `.eml` file for the email preview.
|
57
112
|
|
58
|
-
*
|
113
|
+
*Igor Kasyanchuk*
|
59
114
|
|
115
|
+
* Support multiple preview paths for mailers.
|
60
116
|
|
61
|
-
|
117
|
+
Option `config.action_mailer.preview_path` is deprecated in favor of
|
118
|
+
`config.action_mailer.preview_paths`. Appending paths to this configuration option
|
119
|
+
will cause those paths to be used in the search for mailer previews.
|
62
120
|
|
63
|
-
*
|
121
|
+
*fatkodima*
|
64
122
|
|
65
|
-
|
66
|
-
## Rails 7.0.3 (May 09, 2022) ##
|
67
|
-
|
68
|
-
* No changes.
|
69
|
-
|
70
|
-
|
71
|
-
## Rails 7.0.2.4 (April 26, 2022) ##
|
72
|
-
|
73
|
-
* No changes.
|
74
|
-
|
75
|
-
|
76
|
-
## Rails 7.0.2.3 (March 08, 2022) ##
|
77
|
-
|
78
|
-
* No changes.
|
79
|
-
|
80
|
-
|
81
|
-
## Rails 7.0.2.2 (February 11, 2022) ##
|
82
|
-
|
83
|
-
* No changes.
|
84
|
-
|
85
|
-
|
86
|
-
## Rails 7.0.2.1 (February 11, 2022) ##
|
87
|
-
|
88
|
-
* No changes.
|
89
|
-
|
90
|
-
|
91
|
-
## Rails 7.0.2 (February 08, 2022) ##
|
92
|
-
|
93
|
-
* No changes.
|
94
|
-
|
95
|
-
|
96
|
-
## Rails 7.0.1 (January 06, 2022) ##
|
97
|
-
|
98
|
-
* Keep configuration of `smtp_settings` consistent between 6.1 and 7.0.
|
99
|
-
|
100
|
-
*André Luis Leal Cardoso Junior*
|
101
|
-
|
102
|
-
|
103
|
-
## Rails 7.0.0 (December 15, 2021) ##
|
104
|
-
|
105
|
-
* No changes.
|
106
|
-
|
107
|
-
|
108
|
-
## Rails 7.0.0.rc3 (December 14, 2021) ##
|
109
|
-
|
110
|
-
* No changes.
|
111
|
-
|
112
|
-
|
113
|
-
## Rails 7.0.0.rc2 (December 14, 2021) ##
|
114
|
-
|
115
|
-
* No changes.
|
116
|
-
|
117
|
-
## Rails 7.0.0.rc1 (December 06, 2021) ##
|
118
|
-
|
119
|
-
* Remove deprecated `ActionMailer::DeliveryJob` and `ActionMailer::Parameterized::DeliveryJob`
|
120
|
-
in favor of `ActionMailer::MailDeliveryJob`.
|
121
|
-
|
122
|
-
*Rafael Mendonça França*
|
123
|
-
|
124
|
-
* `email_address_with_name` returns just the address if name is blank.
|
125
|
-
|
126
|
-
*Thomas Hutterer*
|
127
|
-
|
128
|
-
|
129
|
-
## Rails 7.0.0.alpha2 (September 15, 2021) ##
|
130
|
-
|
131
|
-
* No changes.
|
132
|
-
|
133
|
-
|
134
|
-
## Rails 7.0.0.alpha1 (September 15, 2021) ##
|
135
|
-
|
136
|
-
* Configures a default of 5 for both `open_timeout` and `read_timeout` for SMTP Settings.
|
137
|
-
|
138
|
-
*André Luis Leal Cardoso Junior*
|
139
|
-
|
140
|
-
|
141
|
-
Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/actionmailer/CHANGELOG.md) for previous changes.
|
123
|
+
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actionmailer/CHANGELOG.md) for previous changes.
|
data/MIT-LICENSE
CHANGED
data/README.rdoc
CHANGED
@@ -13,7 +13,7 @@ Additionally, an Action Mailer class can be used to process incoming email,
|
|
13
13
|
such as allowing a blog to accept new posts from an email (which could even
|
14
14
|
have been sent from a phone).
|
15
15
|
|
16
|
-
You can read more about Action Mailer in the {Action Mailer Basics}[https://
|
16
|
+
You can read more about Action Mailer in the {Action Mailer Basics}[https://guides.rubyonrails.org/action_mailer_basics.html] guide.
|
17
17
|
|
18
18
|
== Sending emails
|
19
19
|
|
@@ -78,7 +78,7 @@ Or you can just chain the methods together like:
|
|
78
78
|
|
79
79
|
It is possible to set default values that will be used in every method in your
|
80
80
|
Action Mailer class. To implement this functionality, you just call the public
|
81
|
-
class method +default+ which you get for free from
|
81
|
+
class method +default+ which you get for free from ActionMailer::Base.
|
82
82
|
This method accepts a Hash as the parameter. You can use any of the headers,
|
83
83
|
email messages have, like +:from+ as the key. You can also pass in a string as
|
84
84
|
the key, like "Content-Type", but Action Mailer does this out of the box for you,
|
data/lib/action_mailer/base.rb
CHANGED
@@ -10,6 +10,8 @@ require "action_mailer/log_subscriber"
|
|
10
10
|
require "action_mailer/rescuable"
|
11
11
|
|
12
12
|
module ActionMailer
|
13
|
+
# = Action Mailer \Base
|
14
|
+
#
|
13
15
|
# Action Mailer allows you to send email from your application using a mailer model and views.
|
14
16
|
#
|
15
17
|
# = Mailer Models
|
@@ -19,7 +21,7 @@ module ActionMailer
|
|
19
21
|
# $ bin/rails generate mailer Notifier
|
20
22
|
#
|
21
23
|
# The generated model inherits from <tt>ApplicationMailer</tt> which in turn
|
22
|
-
# inherits from
|
24
|
+
# inherits from +ActionMailer::Base+. A mailer model defines methods
|
23
25
|
# used to generate an email message. In these methods, you can set up variables to be used in
|
24
26
|
# the mailer views, options on the mail itself such as the <tt>:from</tt> address, and attachments.
|
25
27
|
#
|
@@ -56,7 +58,7 @@ module ActionMailer
|
|
56
58
|
#
|
57
59
|
# * <tt>mail</tt> - Allows you to specify email to be sent.
|
58
60
|
#
|
59
|
-
# The hash passed to the mail method allows you to specify any header that a
|
61
|
+
# The hash passed to the mail method allows you to specify any header that a +Mail::Message+
|
60
62
|
# will accept (any valid email header including optional fields).
|
61
63
|
#
|
62
64
|
# The +mail+ method, if not passed a block, will inspect your views and send all the views with
|
@@ -150,7 +152,7 @@ module ActionMailer
|
|
150
152
|
# mail.deliver_now # generates and sends the email now
|
151
153
|
#
|
152
154
|
# The ActionMailer::MessageDelivery class is a wrapper around a delegate that will call
|
153
|
-
# your method to generate the mail. If you want direct access to the delegator, or
|
155
|
+
# your method to generate the mail. If you want direct access to the delegator, or +Mail::Message+,
|
154
156
|
# you can call the <tt>message</tt> method on the ActionMailer::MessageDelivery object.
|
155
157
|
#
|
156
158
|
# NotifierMailer.welcome(User.first).message # => a Mail::Message object
|
@@ -213,7 +215,7 @@ module ActionMailer
|
|
213
215
|
# end
|
214
216
|
# end
|
215
217
|
#
|
216
|
-
# You can also send attachments with
|
218
|
+
# You can also send attachments with HTML template, in this case you need to add body, attachments,
|
217
219
|
# and custom content type like this:
|
218
220
|
#
|
219
221
|
# class NotifierMailer < ApplicationMailer
|
@@ -263,9 +265,9 @@ module ActionMailer
|
|
263
265
|
# An interceptor class must implement the <tt>:delivering_email(message)</tt> method which will be
|
264
266
|
# called before the email is sent, allowing you to make modifications to the email before it hits
|
265
267
|
# the delivery agents. Your class should make any needed modifications directly to the passed
|
266
|
-
# in
|
268
|
+
# in +Mail::Message+ instance.
|
267
269
|
#
|
268
|
-
# = Default Hash
|
270
|
+
# = Default \Hash
|
269
271
|
#
|
270
272
|
# Action Mailer provides some intelligent defaults for your emails, these are usually specified in a
|
271
273
|
# default method inside the class definition:
|
@@ -274,15 +276,15 @@ module ActionMailer
|
|
274
276
|
# default sender: 'system@example.com'
|
275
277
|
# end
|
276
278
|
#
|
277
|
-
# You can pass in any header value that a
|
278
|
-
#
|
279
|
+
# You can pass in any header value that a +Mail::Message+ accepts. Out of the box,
|
280
|
+
# +ActionMailer::Base+ sets the following:
|
279
281
|
#
|
280
282
|
# * <tt>mime_version: "1.0"</tt>
|
281
283
|
# * <tt>charset: "UTF-8"</tt>
|
282
284
|
# * <tt>content_type: "text/plain"</tt>
|
283
285
|
# * <tt>parts_order: [ "text/plain", "text/enriched", "text/html" ]</tt>
|
284
286
|
#
|
285
|
-
# <tt>parts_order</tt> and <tt>charset</tt> are not actually valid
|
287
|
+
# <tt>parts_order</tt> and <tt>charset</tt> are not actually valid +Mail::Message+ header fields,
|
286
288
|
# but Action Mailer translates them appropriately and sets the correct values.
|
287
289
|
#
|
288
290
|
# As you can pass in any header, you need to either quote the header as a string, or pass it in as
|
@@ -314,14 +316,16 @@ module ActionMailer
|
|
314
316
|
#
|
315
317
|
# config.action_mailer.default_options = { from: "no-reply@example.org" }
|
316
318
|
#
|
317
|
-
# = Callbacks
|
319
|
+
# = \Callbacks
|
318
320
|
#
|
319
|
-
# You can specify callbacks using <tt>before_action</tt> and <tt>after_action</tt> for configuring your messages
|
320
|
-
#
|
321
|
-
#
|
321
|
+
# You can specify callbacks using <tt>before_action</tt> and <tt>after_action</tt> for configuring your messages,
|
322
|
+
# and using <tt>before_deliver</tt> and <tt>after_deliver</tt> for wrapping the delivery process.
|
323
|
+
# For example, when you want to add default inline attachments and log delivery for all messages
|
324
|
+
# sent out by a certain mailer class:
|
322
325
|
#
|
323
326
|
# class NotifierMailer < ApplicationMailer
|
324
327
|
# before_action :add_inline_attachment!
|
328
|
+
# after_deliver :log_delivery
|
325
329
|
#
|
326
330
|
# def welcome
|
327
331
|
# mail
|
@@ -331,9 +335,13 @@ module ActionMailer
|
|
331
335
|
# def add_inline_attachment!
|
332
336
|
# attachments.inline["footer.jpg"] = File.read('/path/to/filename.jpg')
|
333
337
|
# end
|
338
|
+
#
|
339
|
+
# def log_delivery
|
340
|
+
# Rails.logger.info "Sent email with message id '#{message.message_id}' at #{Time.current}."
|
341
|
+
# end
|
334
342
|
# end
|
335
343
|
#
|
336
|
-
#
|
344
|
+
# Action callbacks in Action Mailer are implemented using
|
337
345
|
# AbstractController::Callbacks, so you can define and configure
|
338
346
|
# callbacks in the same manner that you would use callbacks in classes that
|
339
347
|
# inherit from ActionController::Base.
|
@@ -368,7 +376,7 @@ module ActionMailer
|
|
368
376
|
# = Previewing emails
|
369
377
|
#
|
370
378
|
# You can preview your email templates visually by adding a mailer preview file to the
|
371
|
-
# <tt>ActionMailer::Base.
|
379
|
+
# <tt>ActionMailer::Base.preview_paths</tt>. Since most emails do something interesting
|
372
380
|
# with database data, you'll need to write some scenarios to load messages with fake data:
|
373
381
|
#
|
374
382
|
# class NotifierMailerPreview < ActionMailer::Preview
|
@@ -377,12 +385,12 @@ module ActionMailer
|
|
377
385
|
# end
|
378
386
|
# end
|
379
387
|
#
|
380
|
-
# Methods must return a
|
388
|
+
# Methods must return a +Mail::Message+ object which can be generated by calling the mailer
|
381
389
|
# method without the additional <tt>deliver_now</tt> / <tt>deliver_later</tt>. The location of the
|
382
|
-
# mailer
|
390
|
+
# mailer preview directories can be configured using the <tt>preview_paths</tt> option which has a default
|
383
391
|
# of <tt>test/mailers/previews</tt>:
|
384
392
|
#
|
385
|
-
# config.action_mailer.
|
393
|
+
# config.action_mailer.preview_paths << "#{Rails.root}/lib/mailer_previews"
|
386
394
|
#
|
387
395
|
# An overview of all previews is accessible at <tt>http://localhost:3000/rails/mailers</tt>
|
388
396
|
# on a running development server instance.
|
@@ -425,20 +433,21 @@ module ActionMailer
|
|
425
433
|
# This is a symbol and one of <tt>:plain</tt> (will send the password Base64 encoded), <tt>:login</tt> (will
|
426
434
|
# send the password Base64 encoded) or <tt>:cram_md5</tt> (combines a Challenge/Response mechanism to exchange
|
427
435
|
# information and a cryptographic Message Digest 5 algorithm to hash important information)
|
428
|
-
# * <tt>:enable_starttls</tt> - Use STARTTLS when connecting to your SMTP server and fail if unsupported. Defaults
|
436
|
+
# * <tt>:enable_starttls</tt> - Use STARTTLS when connecting to your SMTP server and fail if unsupported. Defaults
|
437
|
+
# to <tt>false</tt>. Requires at least version 2.7 of the Mail gem.
|
429
438
|
# * <tt>:enable_starttls_auto</tt> - Detects if STARTTLS is enabled in your SMTP server and starts
|
430
439
|
# to use it. Defaults to <tt>true</tt>.
|
431
440
|
# * <tt>:openssl_verify_mode</tt> - When using TLS, you can set how OpenSSL checks the certificate. This is
|
432
441
|
# really useful if you need to validate a self-signed and/or a wildcard certificate. You can use the name
|
433
442
|
# of an OpenSSL verify constant (<tt>'none'</tt> or <tt>'peer'</tt>) or directly the constant
|
434
|
-
# (
|
443
|
+
# (+OpenSSL::SSL::VERIFY_NONE+ or +OpenSSL::SSL::VERIFY_PEER+).
|
435
444
|
# * <tt>:ssl/:tls</tt> Enables the SMTP connection to use SMTP/TLS (SMTPS: SMTP over direct TLS connection)
|
436
445
|
# * <tt>:open_timeout</tt> Number of seconds to wait while attempting to open a connection.
|
437
446
|
# * <tt>:read_timeout</tt> Number of seconds to wait until timing-out a read(2) call.
|
438
447
|
#
|
439
448
|
# * <tt>sendmail_settings</tt> - Allows you to override options for the <tt>:sendmail</tt> delivery method.
|
440
449
|
# * <tt>:location</tt> - The location of the sendmail executable. Defaults to <tt>/usr/sbin/sendmail</tt>.
|
441
|
-
# * <tt>:arguments</tt> - The command line arguments. Defaults to <tt
|
450
|
+
# * <tt>:arguments</tt> - The command line arguments. Defaults to <tt>%w[ -i ]</tt> with <tt>-f sender@address</tt>
|
442
451
|
# added automatically before the message is sent.
|
443
452
|
#
|
444
453
|
# * <tt>file_settings</tt> - Allows you to override options for the <tt>:file</tt> delivery method.
|
@@ -459,12 +468,15 @@ module ActionMailer
|
|
459
468
|
# * <tt>deliveries</tt> - Keeps an array of all the emails sent out through the Action Mailer with
|
460
469
|
# <tt>delivery_method :test</tt>. Most useful for unit and functional testing.
|
461
470
|
#
|
462
|
-
# * <tt>delivery_job</tt> - The job class used with <tt>deliver_later</tt>.
|
463
|
-
# +ActionMailer::MailDeliveryJob+.
|
471
|
+
# * <tt>delivery_job</tt> - The job class used with <tt>deliver_later</tt>. Mailers can set this to use a
|
472
|
+
# custom delivery job. Defaults to +ActionMailer::MailDeliveryJob+.
|
464
473
|
#
|
465
|
-
# * <tt>deliver_later_queue_name</tt> - The name
|
474
|
+
# * <tt>deliver_later_queue_name</tt> - The queue name used by <tt>deliver_later</tt> with the default
|
475
|
+
# <tt>delivery_job</tt>. Mailers can set this to use a custom queue name.
|
466
476
|
class Base < AbstractController::Base
|
477
|
+
include Callbacks
|
467
478
|
include DeliveryMethods
|
479
|
+
include QueuedDelivery
|
468
480
|
include Rescuable
|
469
481
|
include Parameterized
|
470
482
|
include Previews
|
@@ -486,7 +498,6 @@ module ActionMailer
|
|
486
498
|
|
487
499
|
helper ActionMailer::MailHelper
|
488
500
|
|
489
|
-
class_attribute :delivery_job, default: ::ActionMailer::MailDeliveryJob
|
490
501
|
class_attribute :default_params, default: {
|
491
502
|
mime_version: "1.0",
|
492
503
|
charset: "UTF-8",
|
@@ -576,11 +587,11 @@ module ActionMailer
|
|
576
587
|
# config.action_mailer.default_options = { from: "no-reply@example.org" }
|
577
588
|
alias :default_options= :default
|
578
589
|
|
579
|
-
# Wraps an email delivery inside of
|
590
|
+
# Wraps an email delivery inside of ActiveSupport::Notifications instrumentation.
|
580
591
|
#
|
581
|
-
# This method is actually called by the
|
582
|
-
# through a callback when you call <tt>:deliver</tt> on the
|
583
|
-
# calling +deliver_mail+ directly and passing a
|
592
|
+
# This method is actually called by the +Mail::Message+ object itself
|
593
|
+
# through a callback when you call <tt>:deliver</tt> on the +Mail::Message+,
|
594
|
+
# calling +deliver_mail+ directly and passing a +Mail::Message+ will do
|
584
595
|
# nothing except tell the logger you sent the email.
|
585
596
|
def deliver_mail(mail) # :nodoc:
|
586
597
|
ActiveSupport::Notifications.instrument("deliver.action_mailer") do |payload|
|
@@ -674,18 +685,18 @@ module ActionMailer
|
|
674
685
|
self.class.email_address_with_name(address, name)
|
675
686
|
end
|
676
687
|
|
677
|
-
# Allows you to pass random and unusual headers to the new
|
688
|
+
# Allows you to pass random and unusual headers to the new +Mail::Message+
|
678
689
|
# object which will add them to itself.
|
679
690
|
#
|
680
691
|
# headers['X-Special-Domain-Specific-Header'] = "SecretValue"
|
681
692
|
#
|
682
693
|
# You can also pass a hash into headers of header field names and values,
|
683
|
-
# which will then be set on the
|
694
|
+
# which will then be set on the +Mail::Message+ object:
|
684
695
|
#
|
685
696
|
# headers 'X-Special-Domain-Specific-Header' => "SecretValue",
|
686
697
|
# 'In-Reply-To' => incoming.message_id
|
687
698
|
#
|
688
|
-
# The resulting
|
699
|
+
# The resulting +Mail::Message+ will have the following in its header:
|
689
700
|
#
|
690
701
|
# X-Special-Domain-Specific-Header: SecretValue
|
691
702
|
#
|
@@ -772,7 +783,7 @@ module ActionMailer
|
|
772
783
|
# the most used headers in an email message, these are:
|
773
784
|
#
|
774
785
|
# * +:subject+ - The subject of the message, if this is omitted, Action Mailer will
|
775
|
-
# ask the Rails I18n class for a translated +:subject+ in the scope of
|
786
|
+
# ask the \Rails I18n class for a translated +:subject+ in the scope of
|
776
787
|
# <tt>[mailer_scope, action_name]</tt> or if this is missing, will translate the
|
777
788
|
# humanized version of the +action_name+
|
778
789
|
# * +:to+ - Who the message is destined for, can be a string of addresses, or an array
|
@@ -809,7 +820,7 @@ module ActionMailer
|
|
809
820
|
# templates in the view paths using by default the mailer name and the
|
810
821
|
# method name that it is being called from, it will then create parts for
|
811
822
|
# each of these templates intelligently, making educated guesses on correct
|
812
|
-
# content type and sequence, and return a fully prepared
|
823
|
+
# content type and sequence, and return a fully prepared +Mail::Message+
|
813
824
|
# ready to call <tt>:deliver</tt> on to send.
|
814
825
|
#
|
815
826
|
# For example:
|
@@ -918,7 +929,7 @@ module ActionMailer
|
|
918
929
|
end
|
919
930
|
end
|
920
931
|
|
921
|
-
# Translates the +subject+ using Rails I18n class under <tt>[mailer_scope, action_name]</tt> scope.
|
932
|
+
# Translates the +subject+ using \Rails I18n class under <tt>[mailer_scope, action_name]</tt> scope.
|
922
933
|
# If it does not find a translation for the +subject+ under the specified scope it will default to a
|
923
934
|
# humanized version of the <tt>action_name</tt>.
|
924
935
|
# If the subject has interpolations, you can pass them through the +interpolations+ parameter.
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActionMailer
|
4
|
+
module Callbacks
|
5
|
+
extend ActiveSupport::Concern
|
6
|
+
|
7
|
+
included do
|
8
|
+
include ActiveSupport::Callbacks
|
9
|
+
define_callbacks :deliver, skip_after_callbacks_if_terminated: true
|
10
|
+
end
|
11
|
+
|
12
|
+
module ClassMethods
|
13
|
+
# Defines a callback that will get called right before the
|
14
|
+
# message is sent to the delivery method.
|
15
|
+
def before_deliver(*filters, &blk)
|
16
|
+
set_callback(:deliver, :before, *filters, &blk)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Defines a callback that will get called right after the
|
20
|
+
# message's delivery method is finished.
|
21
|
+
def after_deliver(*filters, &blk)
|
22
|
+
set_callback(:deliver, :after, *filters, &blk)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Defines a callback that will get called around the message's deliver method.
|
26
|
+
def around_deliver(*filters, &blk)
|
27
|
+
set_callback(:deliver, :around, *filters, &blk)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
require "tmpdir"
|
4
4
|
|
5
5
|
module ActionMailer
|
6
|
+
# = Action Mailer \DeliveryMethods
|
7
|
+
#
|
6
8
|
# This module handles everything related to mail delivery, from registering
|
7
9
|
# new delivery methods to configuring the mail object to be sent.
|
8
10
|
module DeliveryMethods
|
@@ -12,7 +14,6 @@ module ActionMailer
|
|
12
14
|
# Do not make this inheritable, because we always want it to propagate
|
13
15
|
cattr_accessor :raise_delivery_errors, default: true
|
14
16
|
cattr_accessor :perform_deliveries, default: true
|
15
|
-
cattr_accessor :deliver_later_queue_name, default: :mailers
|
16
17
|
|
17
18
|
class_attribute :delivery_methods, default: {}.freeze
|
18
19
|
class_attribute :delivery_method, default: :smtp
|
@@ -31,7 +32,8 @@ module ActionMailer
|
|
31
32
|
|
32
33
|
add_delivery_method :sendmail, Mail::Sendmail,
|
33
34
|
location: "/usr/sbin/sendmail",
|
34
|
-
|
35
|
+
# See breaking change in the mail gem - https://github.com/mikel/mail/commit/7e1196bd29815a0901d7290c82a332c0959b163a
|
36
|
+
arguments: Gem::Version.new(Mail::VERSION.version) >= Gem::Version.new("2.8.0") ? %w[-i] : "-i"
|
35
37
|
|
36
38
|
add_delivery_method :test, Mail::TestMailer
|
37
39
|
end
|
@@ -46,7 +48,7 @@ module ActionMailer
|
|
46
48
|
#
|
47
49
|
# add_delivery_method :sendmail, Mail::Sendmail,
|
48
50
|
# location: '/usr/sbin/sendmail',
|
49
|
-
# arguments:
|
51
|
+
# arguments: %w[ -i ]
|
50
52
|
def add_delivery_method(symbol, klass, default_options = {})
|
51
53
|
class_attribute(:"#{symbol}_settings") unless respond_to?(:"#{symbol}_settings")
|
52
54
|
public_send(:"#{symbol}_settings=", default_options)
|
@@ -1,16 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ActionMailer
|
4
|
-
# Returns the currently loaded version of Action Mailer as a
|
4
|
+
# Returns the currently loaded version of Action Mailer as a +Gem::Version+.
|
5
5
|
def self.gem_version
|
6
6
|
Gem::Version.new VERSION::STRING
|
7
7
|
end
|
8
8
|
|
9
9
|
module VERSION
|
10
10
|
MAJOR = 7
|
11
|
-
MINOR =
|
12
|
-
TINY =
|
13
|
-
PRE = "
|
11
|
+
MINOR = 1
|
12
|
+
TINY = 0
|
13
|
+
PRE = "beta1"
|
14
14
|
|
15
15
|
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
16
16
|
end
|
@@ -3,6 +3,8 @@
|
|
3
3
|
require "base64"
|
4
4
|
|
5
5
|
module ActionMailer
|
6
|
+
# = Action Mailer \InlinePreviewInterceptor
|
7
|
+
#
|
6
8
|
# Implements a mailer preview interceptor that converts image tag src attributes
|
7
9
|
# that use inline cid: style URLs to data: style URLs so that they are visible
|
8
10
|
# when previewing an HTML email in a web browser.
|
@@ -3,6 +3,8 @@
|
|
3
3
|
require "active_support/log_subscriber"
|
4
4
|
|
5
5
|
module ActionMailer
|
6
|
+
# = Action Mailer \LogSubscriber
|
7
|
+
#
|
6
8
|
# Implements the ActiveSupport::LogSubscriber for logging notifications when
|
7
9
|
# email is delivered or received.
|
8
10
|
class LogSubscriber < ActiveSupport::LogSubscriber
|
@@ -19,6 +21,7 @@ module ActionMailer
|
|
19
21
|
|
20
22
|
debug { event.payload[:mail] }
|
21
23
|
end
|
24
|
+
subscribe_log_level :deliver, :debug
|
22
25
|
|
23
26
|
# An email was generated.
|
24
27
|
def process(event)
|
@@ -28,6 +31,7 @@ module ActionMailer
|
|
28
31
|
"#{mailer}##{action}: processed outbound mail in #{event.duration.round(1)}ms"
|
29
32
|
end
|
30
33
|
end
|
34
|
+
subscribe_log_level :process, :debug
|
31
35
|
|
32
36
|
# Use the logger configured for ActionMailer::Base.
|
33
37
|
def logger
|