-
Notifications
You must be signed in to change notification settings - Fork 0
How To: Use custom mailer
To use a custom mailer, create a class that extends @Devise::Mailer@, like this:
class MyMailer < Devise::Mailer
helper :application # gives access to all helpers defined within `application_helper`.
include Devise::Controllers::UrlHelpers # Optional. eg. `confirmation_url`
end
Then, in your config/initializers/devise.rb, set @config.mailer@ to @"MyMailer"@.
You may now use your @MyMailer@ in the same way as any other mailer. In case you want to override specific mails to add extra headers, you can do so by simply overriding the method and calling @super@ after (triggering Devise's default behavior). For instance, we can add a new header for the confirmation_instructions e-mail as follow:
You can still use devise views. You basically need to override the methods you mentioned and call @super@ after:
def confirmation_instructions(record, token, opts={})
headers["Custom-header"] = "Bar"
super
end
You will also need to copy the devise mail views from @app/views/devise/mailer@ to your new mailer folder.
For example, with the @MyMailer@ mailer above, you need to copy the devise mail views to @app/views/my_mailer/@. You need to copy over all of the views even if you're only customising one. For example if you are customising @confirmation_instructions.html.erb@ you also need to copy over @reset_password_instructions.html.erb@ and @unlock_instructions.html.erb@, or those emails will silently start being sent as blank emails.
You can also override any of the basic headers (from, reply_to, etc) by manually setting the options hash:
def confirmation_instructions(record, token, opts={})
headers["Custom-header"] = "Bar"
opts[:from] = '[email protected]'
opts[:reply_to] = '[email protected]'
super
end