ruby-on-rails - 在运行时覆盖 ActionMailer::Base.smtp_settings,仅适用于当前 session ?

标签 ruby-on-rails ruby-on-rails-5 actionmailer

在某些情况下,我会在运行时覆盖 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/

相关文章:

ruby-on-rails - Rails 5 ActionCable 应用程序未定义

ruby-on-rails - 在非开发层预览邮件程序

ruby-on-rails - 在Rails中,为什么仅在测试中我的邮件正文为空?

ruby-on-rails - ActiveRecord 验证 :uniqueness on association

ruby-on-rails - 如何防止 rails_admin gem 将导航侧栏中的某些标签复数

ruby-on-rails - 将 Heroku Postgres 数据库从开发计划迁移到基本计划

ruby-on-rails - Rails 5. 跟踪模型之间关联的顺序

ruby-on-rails - Rails 5 通过整数值获取枚举键

ruby-on-rails - 我可以根据环境为 ActionMailer 电子邮件指定不同的收件人吗?

ruby-on-rails - 未定义的局部变量或方法 `articles_path'