aboutsummaryrefslogtreecommitdiffstats
path: root/actionmailer
diff options
context:
space:
mode:
authorGeorge Claghorn <george@basecamp.com>2018-12-27 21:15:10 -0500
committerGeorge Claghorn <george@basecamp.com>2018-12-27 21:17:58 -0500
commite3f832a7433a291a51c5df397dc3dd654c1858cb (patch)
tree3137f4fcdd79768e24e1a6778a1cc5ae1c9e74de /actionmailer
parent22a6ff68b1264de693364dd89be651dda9626284 (diff)
downloadrails-e3f832a7433a291a51c5df397dc3dd654c1858cb.tar.gz
rails-e3f832a7433a291a51c5df397dc3dd654c1858cb.tar.bz2
rails-e3f832a7433a291a51c5df397dc3dd654c1858cb.zip
Deprecate ActionMailer::Base.receive in favor of Action Mailbox
Diffstat (limited to 'actionmailer')
-rw-r--r--actionmailer/CHANGELOG.md4
-rw-r--r--actionmailer/README.rdoc36
-rw-r--r--actionmailer/actionmailer.gemspec4
-rw-r--r--actionmailer/lib/action_mailer/base.rb5
-rw-r--r--actionmailer/test/log_subscriber_test.rb5
5 files changed, 14 insertions, 40 deletions
diff --git a/actionmailer/CHANGELOG.md b/actionmailer/CHANGELOG.md
index 5f3fc44e6e..06b4744d31 100644
--- a/actionmailer/CHANGELOG.md
+++ b/actionmailer/CHANGELOG.md
@@ -1,3 +1,7 @@
+* Deprecate `ActionMailer::Base.receive` in favor of [Action Mailbox](https://github.com/rails/rails/tree/master/actionmailbox).
+
+ *George Claghorn*
+
* Add `MailDeliveryJob` for delivering both regular and parameterized mail. Deprecate using `DeliveryJob` and `Parameterized::DeliveryJob`.
*Gannon McGibbon*
diff --git a/actionmailer/README.rdoc b/actionmailer/README.rdoc
index 14dfb82234..74d7ea65ce 100644
--- a/actionmailer/README.rdoc
+++ b/actionmailer/README.rdoc
@@ -93,42 +93,6 @@ Example:
.....
end
-== Receiving emails
-
-To receive emails, you need to implement a public instance method called
-+receive+ that takes an email object as its single parameter. The Action Mailer
-framework has a corresponding class method, which is also called +receive+, that
-accepts a raw, unprocessed email as a string, which it then turns into the email
-object and calls the receive instance method.
-
-Example:
-
- class Mailman < ActionMailer::Base
- def receive(email)
- page = Page.find_by(address: email.to.first)
- page.emails.create(
- subject: email.subject, body: email.body
- )
-
- if email.has_attachments?
- email.attachments.each do |attachment|
- page.attachments.create({
- file: attachment, description: email.subject
- })
- end
- end
- end
- end
-
-This Mailman can be the target for Postfix or other MTAs. In Rails, you would use
-the runner in the trivial case like this:
-
- rails runner 'Mailman.receive(STDIN.read)'
-
-However, invoking Rails in the runner for each mail to be received is very
-resource intensive. A single instance of Rails should be run within a daemon, if
-it is going to process more than just a limited amount of email.
-
== Configuration
The Base class has the full list of configuration options. Here's an example:
diff --git a/actionmailer/actionmailer.gemspec b/actionmailer/actionmailer.gemspec
index a6c482f1a0..c76cb3ec72 100644
--- a/actionmailer/actionmailer.gemspec
+++ b/actionmailer/actionmailer.gemspec
@@ -6,8 +6,8 @@ Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = "actionmailer"
s.version = version
- s.summary = "Email composition, delivery, and receiving framework (part of Rails)."
- s.description = "Email on Rails. Compose, deliver, receive, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments."
+ s.summary = "Email composition and delivery framework (part of Rails)."
+ s.description = "Email on Rails. Compose, deliver, and test emails using the familiar controller/view pattern. First-class support for multipart email and attachments."
s.required_ruby_version = ">= 2.5.0"
diff --git a/actionmailer/lib/action_mailer/base.rb b/actionmailer/lib/action_mailer/base.rb
index 8ddc90b9df..650dd8bbda 100644
--- a/actionmailer/lib/action_mailer/base.rb
+++ b/actionmailer/lib/action_mailer/base.rb
@@ -565,6 +565,11 @@ module ActionMailer
# end
# end
def receive(raw_mail)
+ ActiveSupport::Deprecation.warn(<<~MESSAGE.squish)
+ ActionMailer::Base.receive is deprecated and will be removed in Rails 6.1.
+ Use Action Mailbox to process inbound email.
+ MESSAGE
+
ActiveSupport::Notifications.instrument("receive.action_mailer") do |payload|
mail = Mail.new(raw_mail)
set_payload_for_mail(payload, mail)
diff --git a/actionmailer/test/log_subscriber_test.rb b/actionmailer/test/log_subscriber_test.rb
index 7686fd10c9..e984dcdbdb 100644
--- a/actionmailer/test/log_subscriber_test.rb
+++ b/actionmailer/test/log_subscriber_test.rb
@@ -3,10 +3,11 @@
require "abstract_unit"
require "mailers/base_mailer"
require "active_support/log_subscriber/test_helper"
+require "active_support/testing/stream"
require "action_mailer/log_subscriber"
class AMLogSubscriberTest < ActionMailer::TestCase
- include ActiveSupport::LogSubscriber::TestHelper
+ include ActiveSupport::LogSubscriber::TestHelper, ActiveSupport::Testing::Stream
def setup
super
@@ -53,7 +54,7 @@ class AMLogSubscriberTest < ActionMailer::TestCase
def test_receive_is_notified
fixture = File.read(File.expand_path("fixtures/raw_email", __dir__))
- TestMailer.receive(fixture)
+ silence_stream(STDERR) { TestMailer.receive(fixture) }
wait
assert_equal(1, @logger.logged(:info).size)
assert_match(/Received mail/, @logger.logged(:info).first)