31

I'm just unable to change "password reset instruction" email's subject. I have changed notifer.rb in Mailer to overwrite Devise default email subject. But it's not working.

Here in my application there is default Email subject inside Devise .yml file. But I want to make it dynamic to change it by pulling data from DB.

Arslan Ali
  • 17,418
  • 8
  • 58
  • 76
rony36
  • 3,277
  • 1
  • 30
  • 42

7 Answers7

63

you can change it in devise.en.yml file in intilizer directory

And set your own subject for any mailer

                   mailer:
                     confirmation_instructions:
                       subject: 'Confirmation instructions'
                     reset_password_instructions:
                       subject: 'Reset password instructions'
                     unlock_instructions:
                       subject: 'Unlock Instructions'
Kashiftufail
  • 10,815
  • 11
  • 45
  • 79
18

I got this to work by creating my own sub-class of 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

And then modifying the devise.rb initializer to use my mailer.

# Configure the class responsible to send e-mails.
config.mailer = 'DeviseMailer'
adambrod
  • 423
  • 3
  • 7
6

Change option :subject:

class DeviseMailer < Devise::Mailer
  def reset_password_instructions(record, token, opts={})
    opts[:subject] = 'SOME DB DATA'
    super
  end
end
Artem P
  • 5,198
  • 5
  • 40
  • 44
1

You can write your own method inside your controller and call the respective mailer template. This will help you.. Else devise views, there will be a view page to send reset instruction. Change the content there..

UserROR
  • 240
  • 3
  • 12
  • I already tried to to pull data from DB to view page (inside devise), and it's not working, it's throwing an error "undefined method" – rony36 Jan 30 '13 at 11:41
1

For default foreign language (example Japanese)

STEP 1 Create a 'ja.yml' in config/locales/ (or whatever filename)

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

STEP 2 On config/environments/development.rb

config.i18n.default_locale = :ja

STEP 3 Restart server

mpalencia
  • 5,481
  • 4
  • 45
  • 59
0

If you're willing to translate your Devise messages, which was my case, a better practice would be creating a new yml file in config/locale and changing your application's locale at config/application.rb

  1. To illustrate, I had to create devise.pt-BR.yml inside config/locale.

  2. Then I copied its translations from internet, on this link.

  3. Finally, I set my application's new locale at config/application.rb as follows:

    config.i18n.default_locale = :'pt-BR'
    

Hope it helps some of you guys having the same problem as mine.

Flavio Wuensche
  • 9,460
  • 1
  • 57
  • 54
0

it worked for me to add the translation in devise.en.yml, but the right key for reset_password_instructions was user_subject instead of subject

  en:
    devise:
      mailer:
        reset_password_instructions:
          user_subject: Reset password instructions
Do D.
  • 1
  • 1