diff --git a/src/wp-includes/pluggable.php b/src/wp-includes/pluggable.php
index 9af88a6ea2..44ebf87ed8 100644
--- a/src/wp-includes/pluggable.php
+++ b/src/wp-includes/pluggable.php
@@ -1950,7 +1950,7 @@ if ( ! function_exists( 'wp_new_user_notification' ) ) :
 		/* translators: %s: user login */
 		$message  = sprintf( __( 'Username: %s' ), $user->user_login ) . "\r\n\r\n";
 		$message .= __( 'To set your password, visit the following address:' ) . "\r\n\r\n";
-		$message .= '<' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user->user_login ), 'login' ) . ">\r\n\r\n";
+		$message .= '<' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . str_replace( ".", "%2E", rawurlencode( $user_login ) ), 'login' ) . ">\r\n\r\n";
 
 		$message .= wp_login_url() . "\r\n";
 
diff --git a/src/wp-login.php b/src/wp-login.php
index 6415b1544a..cb7e845149 100644
--- a/src/wp-login.php
+++ b/src/wp-login.php
@@ -376,7 +376,7 @@ function retrieve_password() {
 	$message .= sprintf( __( 'Username: %s' ), $user_login ) . "\r\n\r\n";
 	$message .= __( 'If this was a mistake, just ignore this email and nothing will happen.' ) . "\r\n\r\n";
 	$message .= __( 'To reset your password, visit the following address:' ) . "\r\n\r\n";
-	$message .= '<' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . rawurlencode( $user_login ), 'login' ) . ">\r\n";
+	$message .= '<' . network_site_url( "wp-login.php?action=rp&key=$key&login=" . str_replace( ".", "%2E", rawurlencode( $user_login ) ), 'login' ) . ">\r\n";
 
 	/* translators: Password reset email subject. %s: Site name */
 	$title = sprintf( __( '[%s] Password Reset' ), $site_name );
