Index: /trunk/src/wp-admin/includes/admin-filters.php
===================================================================
--- /trunk/src/wp-admin/includes/admin-filters.php	(revision 64227)
+++ /trunk/src/wp-admin/includes/admin-filters.php	(revision 64228)
@@ -122,5 +122,4 @@
 
 add_action( 'admin_notices', 'default_password_nag' );
-add_action( 'admin_notices', 'new_user_email_admin_notice' );
 
 add_action( 'profile_update', 'default_password_nag_edit_user', 10, 2 );
Index: /trunk/src/wp-admin/options-general.php
===================================================================
--- /trunk/src/wp-admin/options-general.php	(revision 64227)
+++ /trunk/src/wp-admin/options-general.php	(revision 64228)
@@ -22,4 +22,7 @@
 /* translators: Date and time format for exact current time, mainly about timezones, see https://www.php.net/manual/datetime.format.php */
 $timezone_format = _x( 'Y-m-d H:i:s', 'timezone date format' );
+
+$new_admin_email         = get_option( 'new_admin_email' );
+$pending_new_admin_email = $new_admin_email && get_option( 'admin_email' ) !== $new_admin_email;
 
 add_action( 'admin_head', 'options_general_add_js' );
@@ -67,4 +70,34 @@
 <div class="wrap">
 <h1><?php echo esc_html( $title ); ?></h1>
+
+<?php
+if ( isset( $_GET['admin_email_updated'] ) ) {
+	$message = '<strong>' . __( 'Administration email updated.' ) . '</strong>';
+	wp_admin_notice(
+		$message,
+		array(
+			'id'          => 'message',
+			'dismissible' => true,
+			'type'        => 'success',
+		)
+	);
+}
+
+$pending_admin_email_cancel_request_link = sprintf(
+	' <a href="%1$s">%2$s</a>',
+	esc_url( wp_nonce_url( admin_url( 'options.php?dismiss=new_admin_email' ), 'dismiss-' . get_current_blog_id() . '-new_admin_email' ) ),
+	_x( 'Cancel request', 'admin email change' )
+);
+
+if ( $pending_new_admin_email ) {
+	$message = sprintf(
+		/* translators: %s: New administration email address. */
+		__( 'The administration email address has not been updated yet. Please check the inbox at %s for a confirmation email.' ),
+		'<code>' . esc_html( $new_admin_email ) . '</code>'
+	);
+	$message .= $pending_admin_email_cancel_request_link;
+	wp_admin_notice( $message, array( 'type' => 'info' ) );
+}
+?>
 
 <form method="post" action="options.php" novalidate="novalidate">
@@ -267,20 +300,16 @@
 <p class="description" id="new-admin-email-description"><?php _e( 'This address is used for admin purposes. If you change this, an email will be sent to your new address to confirm it. <strong>The new address will not become active until confirmed.</strong>' ); ?></p>
 <?php
-$new_admin_email = get_option( 'new_admin_email' );
-if ( $new_admin_email && get_option( 'admin_email' ) !== $new_admin_email ) {
+if ( $pending_new_admin_email ) {
 	$pending_admin_email_message = sprintf(
-		/* translators: %s: New admin email. */
-		__( 'There is a pending change of the admin email to %s.' ),
+		/* translators: %s: New administration email address. */
+		__( 'There is a pending change of the administration email to %s.' ),
 		'<code>' . esc_html( $new_admin_email ) . '</code>'
 	);
-	$pending_admin_email_message .= sprintf(
-		' <a href="%1$s">%2$s</a>',
-		esc_url( wp_nonce_url( admin_url( 'options.php?dismiss=new_admin_email' ), 'dismiss-' . get_current_blog_id() . '-new_admin_email' ) ),
-		__( 'Cancel' )
-	);
+	$pending_admin_email_message .= $pending_admin_email_cancel_request_link;
 	wp_admin_notice(
 		$pending_admin_email_message,
 		array(
-			'additional_classes' => array( 'updated', 'inline' ),
+			'type'               => 'info',
+			'additional_classes' => array( 'inline' ),
 		)
 	);
Index: /trunk/src/wp-admin/options.php
===================================================================
--- /trunk/src/wp-admin/options.php	(revision 64227)
+++ /trunk/src/wp-admin/options.php	(revision 64228)
@@ -58,5 +58,5 @@
 if ( ! empty( $_GET['adminhash'] ) ) {
 	$new_admin_details = get_option( 'adminhash' );
-	$redirect          = 'options-general.php?updated=false';
+	$redirect          = add_query_arg( array( 'updated' => 'false' ), 'options-general.php' );
 
 	if ( is_array( $new_admin_details )
@@ -67,5 +67,11 @@
 		delete_option( 'adminhash' );
 		delete_option( 'new_admin_email' );
-		$redirect = 'options-general.php?updated=true';
+		$redirect = add_query_arg(
+			array(
+				'updated'             => 'true',
+				'admin_email_updated' => 'true',
+			),
+			'options-general.php',
+		);
 	}
 
Index: /trunk/src/wp-admin/user-edit.php
===================================================================
--- /trunk/src/wp-admin/user-edit.php	(revision 64227)
+++ /trunk/src/wp-admin/user-edit.php	(revision 64228)
@@ -267,6 +267,12 @@
 		<div class="wrap" id="profile-page">
 			<h1 class="wp-heading-inline">
-					<?php echo esc_html( $title ); ?>
+				<?php echo esc_html( $title ); ?>
 			</h1>
+
+			<?php
+			if ( IS_PROFILE_PAGE ) {
+				new_user_email_admin_notice();
+			}
+			?>
 
 			<?php if ( ! IS_PROFILE_PAGE ) : ?>
@@ -597,10 +603,11 @@
 									' <a href="%1$s">%2$s</a>',
 									esc_url( wp_nonce_url( self_admin_url( 'profile.php?dismiss=' . $current_user->ID . '_new_email' ), 'dismiss-' . $current_user->ID . '_new_email' ) ),
-									__( 'Cancel' )
+									_x( 'Cancel request', 'user email change' )
 								);
 								wp_admin_notice(
 									$pending_change_message,
 									array(
-										'additional_classes' => array( 'updated', 'inline' ),
+										'type' => 'info',
+										'additional_classes' => array( 'inline' ),
 									)
 								);
Index: /trunk/src/wp-includes/functions.php
===================================================================
--- /trunk/src/wp-includes/functions.php	(revision 64227)
+++ /trunk/src/wp-includes/functions.php	(revision 64228)
@@ -1267,4 +1267,5 @@
 		'activated',
 		'admin_email_remind_later',
+		'admin_email_updated',
 		'approved',
 		'core-major-auto-updates-saved',
Index: /trunk/src/wp-includes/user.php
===================================================================
--- /trunk/src/wp-includes/user.php	(revision 64227)
+++ /trunk/src/wp-includes/user.php	(revision 64228)
@@ -4018,6 +4018,7 @@
 	global $pagenow;
 
-	if ( 'profile.php' === $pagenow && isset( $_GET['updated'] ) ) {
-		$email = get_user_meta( get_current_user_id(), '_new_email', true );
+	if ( 'profile.php' === $pagenow ) {
+		$current_user_id = get_current_user_id();
+		$email           = get_user_meta( $current_user_id, '_new_email', true );
 		if ( $email ) {
 			$message = sprintf(
@@ -4025,4 +4026,9 @@
 				__( 'Your email address has not been updated yet. Please check your inbox at %s for a confirmation email.' ),
 				'<code>' . esc_html( $email['newemail'] ) . '</code>'
+			);
+			$message .= sprintf(
+				' <a href="%1$s">%2$s</a>',
+				esc_url( wp_nonce_url( self_admin_url( 'profile.php?dismiss=' . $current_user_id . '_new_email' ), 'dismiss-' . $current_user_id . '_new_email' ) ),
+				_x( 'Cancel request', 'user email change' ),
 			);
 			wp_admin_notice( $message, array( 'type' => 'info' ) );
