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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过电子邮件发送ActionMailer中的当前用户 - Rails 5相关的知识,希望对你有一定的参考价值。

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

答案

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

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

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

以上是关于通过电子邮件发送ActionMailer中的当前用户 - Rails 5的主要内容,如果未能解决你的问题,请参考以下文章

使用 ActionMailer 在 Rails 中发送给多个收件人

使用 ActionMailer 的电子邮件注册确认

ActionMailer在测试模式下发送真实的电子邮件! - 如何关闭?

使用 rspec 进行 ActionMailer 测试 [关闭]

使用 ActionMailer 发送多部分邮件时出现问题

Rails - 你如何测试 ActionMailer 在测试中发送了特定的电子邮件