diff --git a/app/controllers/concerns/toggle_subscription_action.rb b/app/controllers/concerns/toggle_subscription_action.rb
new file mode 100644
index 0000000000000000000000000000000000000000..8a43c0b93c4c2b759d4c96530dff6ef81de10ca1
--- /dev/null
+++ b/app/controllers/concerns/toggle_subscription_action.rb
@@ -0,0 +1,17 @@
+module ToggleSubscriptionAction
+  extend ActiveSupport::Concern
+
+  def toggle_subscription
+    return unless current_user
+
+    subscribable_resource.toggle_subscription(current_user)
+
+    render nothing: true
+  end
+
+  private
+
+  def subscribable_resource
+    raise NotImplementedError
+  end
+end
diff --git a/app/mailers/emails/issues.rb b/app/mailers/emails/issues.rb
index 160b6df0b97d7ceaab7d850e18d9991133844e80..5f9adb32e0094faae023f1dff14dfcc9a9fc4176 100644
--- a/app/mailers/emails/issues.rb
+++ b/app/mailers/emails/issues.rb
@@ -21,7 +21,7 @@ module Emails
     end
 
     def relabeled_issue_email(recipient_id, issue_id, label_names, updated_by_user_id)
-      setup_issue_mail(issue_id, recipient_id, sent_notification: false)
+      setup_issue_mail(issue_id, recipient_id)
 
       @label_names = label_names
       @labels_url = namespace_project_labels_url(@project.namespace, @project)
@@ -38,14 +38,12 @@ module Emails
 
     private
 
-    def setup_issue_mail(issue_id, recipient_id, sent_notification: true)
+    def setup_issue_mail(issue_id, recipient_id)
       @issue = Issue.find(issue_id)
       @project = @issue.project
       @target_url = namespace_project_issue_url(@project.namespace, @project, @issue)
 
-      if sent_notification
-        @sent_notification = SentNotification.record(@issue, recipient_id, reply_key)
-      end
+      @sent_notification = SentNotification.record(@issue, recipient_id, reply_key)
     end
 
     def issue_thread_options(sender_id, recipient_id)
diff --git a/app/mailers/emails/merge_requests.rb b/app/mailers/emails/merge_requests.rb
index 334bad4e2f85513ce99e8a750236411bd4190633..55bb4f652705826da7ab7d75a7c30f4d192dcb19 100644
--- a/app/mailers/emails/merge_requests.rb
+++ b/app/mailers/emails/merge_requests.rb
@@ -14,7 +14,7 @@ module Emails
     end
 
     def relabeled_merge_request_email(recipient_id, merge_request_id, label_names, updated_by_user_id)
-      setup_merge_request_mail(merge_request_id, recipient_id, sent_notification: false)
+      setup_merge_request_mail(merge_request_id, recipient_id)
 
       @label_names = label_names
       @labels_url = namespace_project_labels_url(@project.namespace, @project)
@@ -44,14 +44,12 @@ module Emails
 
     private
 
-    def setup_merge_request_mail(merge_request_id, recipient_id, sent_notification: true)
+    def setup_merge_request_mail(merge_request_id, recipient_id)
       @merge_request = MergeRequest.find(merge_request_id)
       @project = @merge_request.project
       @target_url = namespace_project_merge_request_url(@project.namespace, @project, @merge_request)
 
-      if sent_notification
-        @sent_notification = SentNotification.record(@merge_request, recipient_id, reply_key)
-      end
+      @sent_notification = SentNotification.record(@merge_request, recipient_id, reply_key)
     end
 
     def merge_request_thread_options(sender_id, recipient_id)