diff --git a/lib/devise/models/confirmable.rb b/lib/devise/models/confirmable.rb
index <HASH>..<HASH> 100644
--- a/lib/devise/models/confirmable.rb
+++ b/lib/devise/models/confirmable.rb
@@ -50,6 +50,7 @@ module Devise
 
       # Send confirmation instructions by email
       def send_confirmation_instructions
+        generate_confirmation_token if self.confirmation_token.nil?
         ::Devise::Mailer.confirmation_instructions(self).deliver
       end
 
diff --git a/test/models/confirmable_test.rb b/test/models/confirmable_test.rb
index <HASH>..<HASH> 100644
--- a/test/models/confirmable_test.rb
+++ b/test/models/confirmable_test.rb
@@ -127,6 +127,14 @@ class ConfirmableTest < ActiveSupport::TestCase
       User.send_confirmation_instructions(:email => user.email)
     end
   end
+  
+  test 'should always have confirmation token when email is sent' do
+    user = new_user
+    user.instance_eval { def confirmation_required?; false end }
+    user.save
+    user.send_confirmation_instructions
+    assert_not_nil user.confirmation_token
+  end
 
   test 'should not resend email instructions if the user change his email' do
     user = create_user
Automatically create the confirmation_token when email is sent for optionally confirmable models