5

Both devise confirmable (email confirmation when user signs up) and reconfirmable (email confirmation when user changes email) modules send the same email template, "confirmation_instructions". How do I get it so that a different email template is used for confirmable?

Shaan
  • 863
  • 2
  • 12
  • 25

3 Answers3

9

You can override options[:template_name] in the #confirmation_instructions method of your mailer.

class AuthMailer < Devise::Mailer
  helper :application
  include Devise::Controllers::UrlHelpers
  default template_path: 'devise/mailer'

  def confirmation_instructions(record, token, options={})
    # Use different e-mail templates for signup e-mail confirmation and for when a user changes e-mail address.
    if record.pending_reconfirmation?
      options[:template_name] = 'reconfirmation_instructions'
    else
      options[:template_name] = 'confirmation_instructions'
    end

    super
  end
end

Also change this line from device.rb

# config.mailer = 'Devise::Mailer'
config.mailer = 'AuthMailer'
Azmat Rana
  • 532
  • 3
  • 11
richard
  • 14,050
  • 8
  • 37
  • 39
  • It was a long time ago, for sure, but how to preview both (reconfirmation and confirmation)? – maiconsanson Feb 22 '16 at 21:08
  • @maiconsanson you can set the `unconfirmed_email` of your model instance in your preview method: `record.update(unconfirmed_email: 'my@email.com')`. This marks the record as pending_confirmation. – richard Feb 24 '16 at 09:08
7
#Devise Mailer

def confirmation_instructions(record)
  @resource = record
    if @resource.pending_reconfirmation?
      mail(to: @resource.unconfirmed_email, subject: "Confirm new email") do |format|
        format.html { render ... }
      end
    else
      mail(to: @resource.email, subject: "Confirm new account") do |format|
        format.html { render .... }
      end
    end
end
ryaz
  • 316
  • 1
  • 8
0

Just looked at the docs and there's a send_on_create_notification method that you can override in the model. So just need to override this method so that the confirmation email is not sent and a different one is sent instead. In that email, I'll just have the confirmation link.

Shaan
  • 863
  • 2
  • 12
  • 25