Index: src/wp-includes/comment-functions.php
===================================================================
--- src/wp-includes/comment-functions.php	(revision 33936)
+++ src/wp-includes/comment-functions.php	(working copy)
@@ -1624,6 +1624,10 @@
 	 *
 	 * @since 1.2.0
 	 *
+	 * Calls {@see 'wp_notify_post_author'} to determine if the post author should be
+	 * notified. Calls {@see 'wp_notify_moderator'} to determine if the site moderator
+	 * should be notified.
+	 *
 	 * @param int $comment_ID       The comment ID.
 	 * @param int $comment_approved 1 (true) if the comment is approved, 0 (false) if not.
 	 */
@@ -1631,12 +1635,36 @@
 
 	if ( 'spam' !== $commentdata['comment_approved'] ) { // If it's spam save it silently for later crunching
 		if ( '0' == $commentdata['comment_approved'] ) {
-			wp_notify_moderator( $comment_ID );
+
+			$maybe_notify = get_option( 'moderation_notify' );
+
+			/**
+			 * Filter the blog moderator email notification setting.
+			 *
+			 * @since 4.4.0
+			 *
+			 * @param bool $maybe_notify Whether to notify blog moderator.
+			 * @param int  $comment_ID   The id of the comment for the notification.
+			 */
+			if ( apply_filters( 'wp_notify_moderator', $maybe_notify, $comment_ID ) ) {
+				wp_notify_moderator( $comment_ID );
+			}
 		}
 
+		$maybe_notify = get_option( 'comments_notify' ) && $commentdata['comment_approved'];
+
+		/**
+		 * Filter the post author email notification setting.
+		 *
+		 * @since 4.4.0
+		 *
+		 * @param bool $maybe_notify Whether to notify post author.
+		 * @param int  $comment_ID   The id of the comment for the notification.
+		 */
+		$maybe_notify = apply_filters( 'wp_notify_post_author', $maybe_notify, $comment_ID );
 		// wp_notify_postauthor() checks if notifying the author of their own comment.
 		// By default, it won't, but filters can override this.
-		if ( get_option( 'comments_notify' ) && $commentdata['comment_approved'] ) {
+		if ( $maybe_notify ) {
 			wp_notify_postauthor( $comment_ID );
 		}
 	}
@@ -1652,6 +1680,9 @@
  *
  * @since 1.0.0
  *
+ * Calls {@see 'wp_notify_post_author'} to determine if the post author should be
+ * notified.
+ *
  * global wpdb $wpdb
  *
  * @param int $comment_id Comment ID.
@@ -1670,7 +1701,11 @@
 		case 'approve':
 		case '1':
 			$status = '1';
-			if ( get_option('comments_notify') ) {
+			$maybe_notify = get_option( 'comments_notify' );
+
+			/** This filter is documented in wp-includes/comment-functions.php */
+			$maybe_notify = apply_filters( 'wp_notify_post_author', $maybe_notify, $comment_id );
+			if ( $maybe_notify ) {
 				wp_notify_postauthor( $comment_id );
 			}
 			break;
Index: src/wp-includes/pluggable.php
===================================================================
--- src/wp-includes/pluggable.php	(revision 33936)
+++ src/wp-includes/pluggable.php	(working copy)
@@ -1546,6 +1546,10 @@
  *
  * @global wpdb $wpdb WordPress database abstraction object.
  *
+ *
+ * @uses apply_filters() Calls 'wp_notify_moderator' to determine if blog moderator
+ *                       should be notified.
+ *
  * @param int $comment_id Comment ID
  * @return true Always returns true
  */
@@ -1552,8 +1556,12 @@
 function wp_notify_moderator($comment_id) {
 	global $wpdb;
 
-	if ( 0 == get_option( 'moderation_notify' ) )
+	$maybe_notify = get_option( 'moderation_notify' );
+
+	/** This filter is documented in wp-includes/comment-functions.php */
+	if ( ! apply_filters( 'wp_notify_moderator', $maybe_notify, $comment_id ) ) {
 		return true;
+	}
 
 	$comment = get_comment($comment_id);
 	$post = get_post($comment->comment_post_ID);
