如何更改“Devise:密码重置指令电子邮件的主题”

32

我无法更改“密码重置说明”电子邮件的主题。 我已经更改了 Mailer 中的 notifier.rb 文件以覆盖 Devise 默认电子邮件主题。但是它没有起作用。

在我的应用程序中,Devise .yml 文件中有默认的电子邮件主题。 但是我想使它动态变化,通过从数据库中提取数据来更改它。

7个回答

64
你可以在initializer目录下的devise.en.yml文件中更改它。
并为任何邮件设置自己的主题。
                   mailer:
                     confirmation_instructions:
                       subject: 'Confirmation instructions'
                     reset_password_instructions:
                       subject: 'Reset password instructions'
                     unlock_instructions:
                       subject: 'Unlock Instructions'

4
config/locales 目录是什么? - Chris Bosco
4
config/locales/devise.en.yml 翻译为英文意思是“配置/本地化/设备.英文.yml”。 - lostphilosopher
你应该有一个路径 en.devise.mailer.confirmation_instructions.subject,参考链接:https://github.com/heartcombo/devise/blob/main/lib/devise/mailers/helpers.rb#L70 - duleorlovic

18
我通过创建自己的 Devise::Mailer 子类,使它工作了。
class DeviseMailer < Devise::Mailer
  def reset_password_instructions(record, token, opts={})
    mail = super
    # your custom logic
    mail.subject = "[SOME DB DATA]"
    mail
  end
end

然后修改devise.rb初始化程序以使用我的邮件服务器。

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

1
截至今天,唯一能正常工作的示例。谢谢。 - Ben
仍然是2020年的首选。 - Mark Meyer

6

更改选项:subject

class DeviseMailer < Devise::Mailer
  def reset_password_instructions(record, token, opts={})
    opts[:subject] = 'SOME DB DATA'
    super
  end
end

这是一个很棒的答案。 - williamlopes

1
你可以在控制器中编写自己的方法并调用相应的邮件模板。这将有所帮助。否则,如果使用devise视图,则会有一个视图页面来发送重置指令。在那里更改内容即可。

我已经尝试从数据库中提取数据到视图页面(在设备内部),但它不起作用,它抛出一个“未定义的方法”错误。 - rony36

1

对于默认的外语(例如日语)

步骤1 在config/locales/目录下创建一个“ja.yml”文件(或任意其他文件名)

ja:
  devise:    
    mailer:
      confirmation_instructions:
        subject: '仮会員登録完了のお知らせ'
      reset_password_instructions:
        subject: 'パスワード再設定手順のお知らせ'

第二步:在config/environments/development.rb中进行设置。
config.i18n.default_locale = :ja

步骤三 重新启动服务器

0
如果你想翻译 Devise 的信息,就像我的情况一样,更好的做法是在 config/locale 中创建一个新的 yml 文件,并在 config/application.rb 中更改你的应用程序语言环境。
  1. 举个例子,我不得不在config/locale中创建devise.pt-BR.yml

  2. 然后我从this link上复制了它的翻译。

  3. 最后,我在config/application.rb中设置了我的应用程序的新语言环境,如下所示:

    config.i18n.default_locale = :'pt-BR'
    
希望这能帮助到一些和我有相同问题的人。

0

我在devise.en.yml文件中添加翻译内容时成功了,但是重设密码的正确键值应该是user_subject而不是subject

  en:
    devise:
      mailer:
        reset_password_instructions:
          user_subject: 重设密码说明

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接