diff --git a/app/models/mailer.rb b/app/models/mailer.rb
index 53c01e1cd..9cb6ca5eb 100644
--- a/app/models/mailer.rb
+++ b/app/models/mailer.rb
@@ -31,6 +31,12 @@ class Mailer < ActionMailer::Base
   class DeliveryJob < ActionMailer::MailDeliveryJob
     include Redmine::JobWrapper
 
+    # Do not enqueue the job when deliveries are disabled
+    before_enqueue {throw :abort unless ActionMailer::Base.perform_deliveries}
+
     around_enqueue :keep_current_user
   end
 
diff --git a/test/unit/mailer_test.rb b/test/unit/mailer_test.rb
index ab880ef45..2d36ef327 100644
--- a/test/unit/mailer_test.rb
+++ b/test/unit/mailer_test.rb
@@ -1103,6 +1103,18 @@ class MailerTest < ActiveSupport::TestCase
     assert ActionMailer::Base.perform_deliveries
   end
 
+  def test_with_deliveries_off_should_not_enqueue_delivery_jobs
+    previous_adapter = ActionMailer::MailDeliveryJob.queue_adapter
+    ActionMailer::MailDeliveryJob.queue_adapter = :test
+    Mailer.with_deliveries false do
+      Mailer.test_email(User.find(1)).deliver_later
+    end
+    assert_empty ActionMailer::MailDeliveryJob.queue_adapter.enqueued_jobs
+    assert ActionMailer::Base.deliveries.empty?
+  ensure
+    ActionMailer::MailDeliveryJob.queue_adapter = previous_adapter
+  end
+
   def test_token_for_should_strip_trailing_gt_from_address_with_full_name
     with_settings :mail_from => "Redmine Mailer<no-reply@redmine.org>" do
       assert_match /\Aredmine.issue-\d+\.\d+\.3@redmine.org\z/,
