Evaluate mailer from address at runtime
We're reading the value from the database, but the `ApplicationMailer.default` method is evaluated when the application is started. So if we don't use a Proc, we'll need to restart the server every time we change the value in the database, or else the old value will still be used. Using a Proc makes sure the mailer from address is evaluated at runtime, so emails are sent using the from address currently defined in the database. The same situation took place using the devise mailer. Now we don't need to check for the settings table being present because the Proc in the devise initializer won't be evaluated before the settings table is created and populated.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
class ApplicationMailer < ActionMailer::Base
|
||||
helper :settings
|
||||
helper :application
|
||||
default from: "#{Setting["mailer_from_name"]} <#{Setting["mailer_from_address"]}>"
|
||||
default from: Proc.new { "#{Setting["mailer_from_name"]} <#{Setting["mailer_from_address"]}>" }
|
||||
layout "mailer"
|
||||
end
|
||||
|
||||
@@ -12,11 +12,7 @@ Devise.setup do |config|
|
||||
# Configure the e-mail address which will be shown in Devise::Mailer,
|
||||
# note that it will be overwritten if you use your own mailer class
|
||||
# with default "from" parameter.
|
||||
if Rails.env.test? || !ActiveRecord::Base.connection.data_source_exists?("settings")
|
||||
config.mailer_sender = "noreply@consul.dev"
|
||||
else
|
||||
config.mailer_sender = "'#{Setting["mailer_from_name"]}' <#{Setting["mailer_from_address"]}>"
|
||||
end
|
||||
config.mailer_sender = Proc.new { "'#{Setting["mailer_from_name"]}' <#{Setting["mailer_from_address"]}>" }
|
||||
|
||||
# Configure the class responsible to send e-mails.
|
||||
config.mailer = "DeviseMailer"
|
||||
|
||||
@@ -12,5 +12,14 @@ describe DeviseMailer do
|
||||
|
||||
expect(email.subject).to include("confirmación")
|
||||
end
|
||||
|
||||
it "reads the from address at runtime" do
|
||||
Setting["mailer_from_name"] = "New organization"
|
||||
Setting["mailer_from_address"] = "new@consul.dev"
|
||||
|
||||
email = DeviseMailer.confirmation_instructions(create(:user), "ABC")
|
||||
|
||||
expect(email).to deliver_from "'New organization' <new@consul.dev>"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -13,5 +13,14 @@ describe Mailer do
|
||||
|
||||
expect(email.subject).to include("comentado")
|
||||
end
|
||||
|
||||
it "reads the from address at runtime" do
|
||||
Setting["mailer_from_name"] = "New organization"
|
||||
Setting["mailer_from_address"] = "new@consul.dev"
|
||||
|
||||
email = Mailer.comment(create(:comment))
|
||||
|
||||
expect(email).to deliver_from "New organization <new@consul.dev>"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user