diff --git a/app/services/notification_service.rb b/app/services/notification_service.rb
index b2cc39763f3470fec383dd474793a349038b9557..5a7d5ef874759ae2cc42d80cfc4eb01176641658 100644
--- a/app/services/notification_service.rb
+++ b/app/services/notification_service.rb
@@ -217,7 +217,7 @@ class NotificationService
     recipients = reject_unsubscribed_users(recipients, note.noteable)
     recipients = reject_users_without_access(recipients, note.noteable)
 
-    recipients.delete(note.author)
+    recipients.delete(note.author) unless note.author.notified_of_own_activity?
     recipients = recipients.uniq
 
     notify_method = "note_#{note.to_ability_name}_email".to_sym
@@ -627,7 +627,7 @@ class NotificationService
     recipients = reject_unsubscribed_users(recipients, target)
     recipients = reject_users_without_access(recipients, target)
 
-    recipients.delete(current_user) if skip_current_user
+    recipients.delete(current_user) if skip_current_user && !current_user.try(:notified_of_own_activity?)
 
     recipients.uniq
   end
@@ -636,7 +636,7 @@ class NotificationService
     recipients = add_labels_subscribers([], project, target, labels: labels)
     recipients = reject_unsubscribed_users(recipients, target)
     recipients = reject_users_without_access(recipients, target)
-    recipients.delete(current_user)
+    recipients.delete(current_user) unless current_user.notified_of_own_activity?
     recipients.uniq
   end
 
diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb
index 7cf2cd9968fe4e28bf7e2083bcc6daa7a79ccc18..839250b7d848a58cb0b72f4689f7733ec9292190 100644
--- a/spec/services/notification_service_spec.rb
+++ b/spec/services/notification_service_spec.rb
@@ -146,6 +146,16 @@ describe NotificationService, services: true do
           should_not_email(@u_lazy_participant)
         end
 
+        it "emails the note author if they've opted into notifications about their activity" do
+          add_users_with_subscription(note.project, issue)
+          note.author.notified_of_own_activity = true
+          reset_delivered_emails!
+
+          notification.new_note(note)
+
+          should_email(note.author)
+        end
+
         it 'filters out "mentioned in" notes' do
           mentioned_note = SystemNoteService.cross_reference(mentioned_issue, issue, issue.author)
 
@@ -476,6 +486,20 @@ describe NotificationService, services: true do
         should_not_email(issue.assignee)
       end
 
+      it "emails the author if they've opted into notifications about their activity" do
+        issue.author.notified_of_own_activity = true
+
+        notification.new_issue(issue, issue.author)
+
+        should_email(issue.author)
+      end
+
+      it "doesn't email the author if they haven't opted into notifications about their activity" do
+        notification.new_issue(issue, issue.author)
+
+        should_not_email(issue.author)
+      end
+
       it "emails subscribers of the issue's labels" do
         user_1 = create(:user)
         user_2 = create(:user)
@@ -665,6 +689,19 @@ describe NotificationService, services: true do
         should_email(subscriber_to_label_2)
       end
 
+      it "emails the current user if they've opted into notifications about their activity" do
+        subscriber_to_label_2.notified_of_own_activity = true
+        notification.relabeled_issue(issue, [group_label_2, label_2], subscriber_to_label_2)
+
+        should_email(subscriber_to_label_2)
+      end
+
+      it "doesn't email the current user if they haven't opted into notifications about their activity" do
+        notification.relabeled_issue(issue, [group_label_2, label_2], subscriber_to_label_2)
+
+        should_not_email(subscriber_to_label_2)
+      end
+
       it "doesn't send email to anyone but subscribers of the given labels" do
         notification.relabeled_issue(issue, [group_label_2, label_2], @u_disabled)
 
@@ -818,6 +855,20 @@ describe NotificationService, services: true do
         should_not_email(@u_lazy_participant)
       end
 
+      it "emails the author if they've opted into notifications about their activity" do
+        merge_request.author.notified_of_own_activity = true
+
+        notification.new_merge_request(merge_request, merge_request.author)
+
+        should_email(merge_request.author)
+      end
+
+      it "doesn't email the author if they haven't opted into notifications about their activity" do
+        notification.new_merge_request(merge_request, merge_request.author)
+
+        should_not_email(merge_request.author)
+      end
+
       it "emails subscribers of the merge request's labels" do
         user_1 = create(:user)
         user_2 = create(:user)
@@ -1013,6 +1064,14 @@ describe NotificationService, services: true do
         should_not_email(@u_watcher)
       end
 
+      it "notifies the merger when merge_when_build_succeeds is false but they've opted into notifications about their activity" do
+        merge_request.merge_when_build_succeeds = false
+        @u_watcher.notified_of_own_activity = true
+        notification.merge_mr(merge_request, @u_watcher)
+
+        should_email(@u_watcher)
+      end
+
       it_behaves_like 'participating notifications' do
         let(:participant) { create(:user, username: 'user-participant') }
         let(:issuable) { merge_request }