如何在自定义Devise电子邮件中设置自定义电子邮件主题?

时间:2013-06-08 19:19:37

标签: ruby-on-rails devise

我在Rails 3应用程序中使用Devise来创建帐户。我有不同类型的用户,因此我想根据用户类型发送自定义密码恢复电子邮件。

我可以发送自定义电子邮件,但我还没有找到在该电子邮件上设置自定义标头的方法。我特别感兴趣的是设置电子邮件的主题。

我做了以下事情:

  • 使用自定义方法创建自定义Devise邮件程序。此方法使用参数调用devise_mail。在这种情况下,自定义邮件程序称为“reset_partner_instructions”。我可以拨打此邮件并成功发送用户模型的电子邮件。
  • 创建了一个自定义电子邮件视图模板,该模板已从devise_mail成功调用。

我的自定义邮件是这样的:

class AccountMailer < Devise::Mailer
  helper :application # gives access to all helpers defined within application_helper.
  def reset_partner_instructions(record, opts={})
    devise_mail(record, :reset_partner_instructions, opts)
  end
end

问题是电子邮件的主题始终是“重置合作伙伴说明”。我相信Devise正在从邮件模板的名称生成这个标题。

在本教程https://github.com/plataformatec/devise/wiki/How-To:-Use-custom-mailer中,他们调用以下代码:

def confirmation_instructions(record, opts={})
  headers["Custom-header"] = "Bar"
  super
end

由于我直接调用“devise_mail”,我没有看到如何将邮件传递给邮件程序。我可以使用简单的设置或方法来设置电子邮件主题吗?

5 个答案:

答案 0 :(得分:15)

请参阅devise helper

class AccountMailer < Devise::Mailer


   def confirmation_instructions(record, opts={})
    headers = {
        :subject => "Subject Here"
    }
    super
  end

end

或者您可以在intilizer目录中的devise.en.yml文件中更改它

设定自己的主题

mailer:
    confirmation_instructions:
        subject: 'Confirmation instructions'

答案 1 :(得分:2)

这是一个非常古老的问题,它可能对你是其他人有帮助,

自定义主题:

  1. 创建文件 config / locales / devise.en.yml
  2. 添加如下所示的内容,确保使用2个空格正确执行缩进,就像在database.yml文件中一样

    en: devise: mailer: confirmation_instructions: subject: 'Verification subject here' reset_password_instructions: subject: 'Reset password subject here'

答案 2 :(得分:0)

我意识到我应该只使用ActionMailer来完成这项任务。 Devise没有给我额外的功能,因为我试图生成一个自定义邮件,我可以在Devise之外做。

答案 3 :(得分:0)

这是一个古老的问题,但仍然出现在搜索的顶部,我能够通过设置devise.rb而不是设置标题来解决此问题:

  config.mailer = 'DeviseMailer'

import { sineOut } from "svelte/easing"; let duration = 250; let delay = duration; let delayZero = 0; export const fadeIn = _ => ({ duration, delay, easing: sineOut, css: t => `opacity: ${t}` }); export const fadeOut = _ => ({ duration, delayZero, easing: sineOut, css: t => `opacity: ${t}` }); 中:

<script>
  import { fadeIn, fadeOut } from "../components/pageFade";

  // All your other JS goes here
</script>

<style>
  /* Styles go here */
</style>

<main in:fadeIn out:fadeOut>
  <!-- All the normal HTML goes here -->
</main>

答案 4 :(得分:-1)

无需设置自定义邮件程序或覆盖Devise的confirmation_instructions方法。

设计让你将可选参数传递给confirmation_instructions方法,该方法将与Devise的默认选项合并(opts哈希传递给Devise的headers_for助手。)

因此,您可以使用以下代码发送包含自定义主题的确认说明:

Devise::Mailer.confirmation_instructions(user, {subject: "Custom Subject"}).deliver