我有一个具有多个环境(开发,登台,生产)的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进行身份验证。
答案 0 :(得分:0)
我看到的唯一方法是将当前用户添加到某个全局变量中,然后您就可以从Interceptor中访问它了。这是一个选项:https://stackoverflow.com/a/2513456/740394
要将所需的任何信息添加到邮件发件人,请在布局中使用带有条件的不完整部分,就像对拦截器所做的那样。
anyNA(list(c(1, 2), c(NA, 1)), recursive = TRUE)
#[1] TRUE