Index: wp-admin/includes/class-wp-upgrader.php
===================================================================
--- wp-admin/includes/class-wp-upgrader.php	(revision 37199)
+++ wp-admin/includes/class-wp-upgrader.php	(working copy)
@@ -3461,7 +3461,8 @@
 	 */
 	protected function send_debug_email() {
 		$update_count = 0;
-		foreach ( $this->update_results as $type => $updates )
+		$update_results = $this->update_results;
+		foreach ( $update_results as $type => $updates )
 			$update_count += count( $updates );
 
 		$body = array();
@@ -3470,8 +3471,8 @@
 		$body[] = sprintf( __( 'WordPress site: %s' ), network_home_url( '/' ) );
 
 		// Core
-		if ( isset( $this->update_results['core'] ) ) {
-			$result = $this->update_results['core'][0];
+		if ( isset( $update_results['core'] ) ) {
+			$result = $update_results['core'][0];
 			if ( $result->result && ! is_wp_error( $result->result ) ) {
 				$body[] = sprintf( __( 'SUCCESS: WordPress was successfully updated to %s' ), $result->name );
 			} else {
@@ -3483,9 +3484,34 @@
 
 		// Plugins, Themes, Translations
 		foreach ( array( 'plugin', 'theme', 'translation' ) as $type ) {
-			if ( ! isset( $this->update_results[ $type ] ) )
-				continue;
-			$success_items = wp_list_filter( $this->update_results[ $type ], array( 'result' => true ) );
+			
+			/**  
+			* Filter to disable notification emails on plugins/themes/translation.  
+			*  
+			* By default, administrators are notified when the update offer received  
+			* from WordPress.org sets a particular flag. This allows some discretion  
+			* in if and when to notify. This can be used to disabe automatic
+			* update notifications.  
+			*  
+			* This filter is only evaluated once per update  
+			*.  
+			*  
+			* @since 4.6.0  
+			*  
+			* @param bool   $notify Whether the site administrator is notified.  
+			* @param string $type   The type of update (plugin, theme, translation).  
+			* @param object $this   WP_Automatic_Updater instance  
+			*/  
+			if ( ! apply_filters( 'send_update_notification_email', true, $type, $this ) ) { 
+				if ( isset( $update_results[ $type ] ) ) { 
+					unset( $update_results[ $type ] ); 
+				}  
+			}  
+
+			if ( ! isset( $update_results[ $type ] ) ) 
+				continue; 
+
+			$success_items = wp_list_filter( $update_results[ $type ], array( 'result' => true ) );
 			if ( $success_items ) {
 				$messages = array(
 					'plugin'      => __( 'The following plugins were successfully updated:' ),
@@ -3498,7 +3524,7 @@
 					$body[] = ' * ' . sprintf( __( 'SUCCESS: %s' ), $name );
 				}
 			}
-			if ( $success_items != $this->update_results[ $type ] ) {
+			if ( $success_items != $update_results[ $type ] ) {
 				// Failed updates
 				$messages = array(
 					'plugin'      => __( 'The following plugins failed to update:' ),
@@ -3507,7 +3533,7 @@
 				);
 
 				$body[] = $messages[ $type ];
-				foreach ( $this->update_results[ $type ] as $item ) {
+				foreach ( $update_results[ $type ] as $item ) {
 					if ( ! $item->result || is_wp_error( $item->result ) ) {
 						$body[] = ' * ' . sprintf( __( 'FAILED: %s' ), $item->name );
 						$failures++;
@@ -3517,6 +3543,10 @@
 			$body[] = '';
 		}
 
+		if ( empty( $update_results ) ) {  
+			return; 
+		}
+
 		$site_title = wp_specialchars_decode( get_bloginfo( 'name' ), ENT_QUOTES );
 		if ( $failures ) {
 			$body[] = trim( __(
@@ -3543,9 +3573,10 @@
 		$body[] = '';
 
 		foreach ( array( 'core', 'plugin', 'theme', 'translation' ) as $type ) {
-			if ( ! isset( $this->update_results[ $type ] ) )
+			if ( ! isset( $update_results[ $type ] ) )
 				continue;
-			foreach ( $this->update_results[ $type ] as $update ) {
+
+			foreach ( $update_results[ $type ] as $update ) {
 				$body[] = $update->name;
 				$body[] = str_repeat( '-', strlen( $update->name ) );
 				foreach ( $update->messages as $message )
