在某些情况下,我会在运行时覆盖 ActionMailer::Base.smtp_settings
:
class RegistrationsController < Devise::RegistrationsController
def create
ActionMailer::Base.smtp_settings = {
:address => "address.example.com",
:port => "123",
:domain => "example.com",
:authentication => "login",
:user_name => "foo",
:password => "bar"
}
super
end
end
看来我不仅为该特定 session 设置它,而且还为即将到来的 session 设置它。我怎样才能避免这种情况?如何确保我只更改本次 session 的设置?
最佳答案
我不知道您是否可以更改整个特定 session 的 ActionMailer 设置,但您可以更改一封电子邮件传送的 SMTP 设置。
在您的邮件程序中,您可以执行以下操作:
class UserMailer < ApplicationMailer
def registration(params)
smtp_settings = {
:address => "address.example.com",
:port => "123",
:domain => "example.com",
:authentication => "login",
:user_name => "foo",
:password => "bar"
}
mail(
to: params[:to],
subject: "Welcome",
delivery_method: :smtp,
delivery_method_options: smtp_settings
)
end
end
delivery_method: :smtp
如果您的默认电子邮件传送方法是 SMTP,则不必包含参数。
这应该按预期工作。在这种情况下,它将覆盖仅一个邮件程序的 smtp 设置。如果您只想更改一封特定电子邮件的 smtp 设置,您可以通过参数发送 smtp 设置。
关于ruby-on-rails - 在运行时覆盖 ActionMailer::Base.smtp_settings,仅适用于当前 session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57544116/