在ActionMailer中通过电子邮件发送当前用户-Rails 5

时间:2018-09-10 14:53:28

标签: ruby-on-rails devise actionmailer

我有一个具有多个环境(开发,登台,生产)的Ruby on Rails应用程序。在我的暂存环境中,我希望能够覆盖从系统发送的所有电子邮件,以登录到current_user。我读到的所有内容都告诉我,我必须继续将current_user传递到我的邮件程序中。但是,这对我来说似乎不合逻辑,因为有数百个邮件程序代码需要更改。

我理想地要做的是设置一个电子邮件拦截器,覆盖mail.to并始终发送给current_user。有没有办法做到这一点?到目前为止,这是我的初始化器中的内容:

if Rails.env.staging?
 class OverrideMailRecipient
   def self.delivering_email(mail)
     mail.to = ['development@xxx.com']
   end
 end
 ActionMailer::Base.register_interceptor(OverrideMailRecipient)
end

这可行,但是现在我想做到这一点,以便将其发送给当前用户,而不是硬编码的电子邮件。

作为奖励,我想将电子邮件的原始收件人添加到电子邮件的正文中,以便当前用户知道应该在生产中接收该电子邮件的人。

我希望这是有道理的,感谢您的帮助! :)

我正在使用Rails 5.1.4和Devise进行身份验证。

1 个答案:

答案 0 :(得分:0)

我看到的唯一方法是将当前用户添加到某个全局变量中,然后您就可以从Interceptor中访问它了。这是一个选项:https://stackoverflow.com/a/2513456/740394

要将所需的任何信息添加到邮件发件人,请在布局中使用带有条件的不完整部分,就像对拦截器所做的那样。

anyNA(list(c(1, 2), c(NA, 1)), recursive = TRUE)
#[1] TRUE