【问题标题】:Override ActionMailer::Base.smtp_settings on runtime, only for the current session?在运行时覆盖 ActionMailer::Base.smtp_settings,仅适用于当前会话?
【发布时间】:2019-08-18 11:29:56
【问题描述】:

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

看来我不仅是为那个特定的会话设置它,而且还为即将到来的会话设置它。我怎样才能避免这种情况?如何确保我只是更改此会话的设置?

【问题讨论】:

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


    【解决方案1】:

    我不知道您是否可以整体更改特定会话的 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
    

    如果您的默认电子邮件传送方式是 SMTP,则不必包含delivery_method: :smtp 参数。

    这应该可以按预期工作。在这种情况下,它将仅覆盖一个邮件程序的 smtp 设置。如果您只想为一封特定的电子邮件更改 smtp 设置,则可以通过参数发送 smtp 设置。

    【讨论】:

    • 谢谢@edariedl,但这对我不起作用,因为我不会发送这样的邮件。我正在使用设计和设计处理电子邮件...
    • @JohnSmith1976 抱歉,我无法提供帮助。不幸的是,我认为没有其他方法可以更改 SMTP 设置。根据 ActionMailer 源代码,您可以通过 ActionMailer::Base.smtp_settings 更改全局设置,或者,正如我上面提到的,直接在 Mailer 中为一封电子邮件更改全局设置。这两个选项之间没有任何区别。
    猜你喜欢
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2019-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多