【问题标题】:Emailing Current User in ActionMailer - Rails 5在 ActionMailer 中向当前用户发送电子邮件 - Rails 5
【发布时间】:2019-02-15 01:07:05
【问题描述】:

我有一个 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 进行身份验证。

【问题讨论】:

    标签: ruby-on-rails devise actionmailer


    【解决方案1】:

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

    要将您想要的任何信息添加到邮件中,请在布局中使用带有条件的部分,就像您为拦截器所做的那样。

    render('sender_info') if Rails.env.staging?
    

    【讨论】:

    • 全局变量是什么意思?由于拦截器在启动过程中作为初始化程序加载,那么此时如何设置 current_user?
    猜你喜欢
    • 2017-08-01
    • 2014-12-31
    • 2011-08-11
    • 1970-01-01
    • 2012-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    相关资源
    最近更新 更多