如何配置设计以使用自定义电子邮件布局?

Posted

技术标签:

【中文标题】如何配置设计以使用自定义电子邮件布局?【英文标题】:How do I configure devise to use a custom email layout? 【发布时间】:2011-06-27 21:03:04 【问题描述】:

当我说布局时,我不仅仅指视图,而是生成视图。在我自己的所有邮件中,我都使用默认布局。我在 SomeMailer.rb 文件中定义的

#some_mailer.rb
class SomeMailer < ActionMailer::Base
  layout 'sometemplate'

我有什么方法可以为 Devise Mailer 等人做到这一点吗?

【问题讨论】:

【参考方案1】:

在 Devise Github wiki 中找到了答案,

阅读有帮助。 ;-)

config.to_prepare do
  Devise::Mailer.layout "simple" # simple.haml or simple.erb
  Devise::Mailer.helper :mailer
end

这里是维基页面的参考:How To: Create custom layouts

【讨论】:

或者,您可以将Devise::Mailer.layout "simple" 添加到您的devise.rb 初始化程序的顶部,在设置块之前。 您能澄清一下# email.haml or email.erb 的含义吗?你的意思是写# simple.haml or simple.erb 已修复。 (评论应该是 # simple.haml or simple.erb——它是从引用的 Devise wiki 复制和粘贴的,但只有字符串 "simple" 是自定义的。) 仅使用 Devise::Mailer.layout "simple" 。 config.to_prepare 在以后的 gem 版本中会引发错误。 这个答案对 Devise 3.5 仍然有效,但可以使用更多信息。请注意,config.to_prepare 需要进入您的application.rb,或者您可以在devise.rb 中使用Rails.application.config.to_prepare。该链接包含大量详细信息。【参考方案2】:

devise.rb 中还有一个 parent_mailer 选项,假设您在设计之外发送电子邮件,默认情况下此选项设置为 ActionMailer: :Base,但如果您有一个已经从 ActionMailer::Base 继承的 ApplicationMailer,您可以将 parent_mailer 更改为此并让您的所有布局配置开箱即用。

无论如何,如果您不想更改设计邮件控制器中的任何内容,那么使用它来保持应用程序中布局的 Rails 流会更干净。

# devise.rb
config.parent_mailer = 'ApplicationMailer'

# application_mailer.rb
class ApplicationMailer < ActionMailer::Base
    layout 'mailer'
end

【讨论】:

这是最好的答案。【参考方案3】:
# Devise::Mailer inherits from ActionMailer::Base other mail will work fine.

## app/mailers/deviser_mailer.rb

class DeviseMailer < Devise::Mailer
  layout 'email'
  default from: I18n.t("mailer.default.from")
end

## then in config/initializer/devise.rb

# Configure the class responsible to send e-mails.
config.mailer = "DeviseMailer"

确保在更改初始化程序时重新启动 Rails 服务器。

【讨论】:

【参考方案4】:

尝试重新打开 Devise::Mailer 类:

 class Devise::Mailer < ActionMailer::Base
   layout 'sometemplate'
 end

【讨论】:

没用。我还尝试了 Class 的其他几种变体,但它们没有覆盖设计模板或非模板

以上是关于如何配置设计以使用自定义电子邮件布局?的主要内容,如果未能解决你的问题,请参考以下文章

通过 Microsoft 365 SMTP 发送电子邮件时如何使用自定义显示名称? (以 PHP Swift Mailer 为例)

Ruby/Rails:您如何自定义 Devise 的邮件模板?

Ruby/Rails:您如何自定义 Devise 的邮件模板?

如何设计布局以在注册期间获取图像作为输入?

对时事通讯进行 HTML 编码

六十添加自定义监控项目配置邮件告警测试告警不发邮件的问题处理