diff -u b/core/modules/user/src/Form/UserPasswordForm.php b/core/modules/user/src/Form/UserPasswordForm.php
--- b/core/modules/user/src/Form/UserPasswordForm.php
+++ b/core/modules/user/src/Form/UserPasswordForm.php
@@ -141,23 +141,17 @@
       $users = $this->userStorage->loadByProperties(['name' => $name]);
     }
     $account = reset($users);
-    if ($account && $account->id()) {
-      // Blocked accounts cannot request a new password.
-      if (!$account->isActive()) {
-        $form_state->setErrorByName('name', $this->t('%name is blocked or has not been activated yet.', ['%name' => $name]));
-      }
-      else {
-        // Register flood events based on the uid only, so they apply for any
-        // IP address. This allows them to be cleared on successful reset (from
-        // any IP).
-        $identifier = $account->id();
-        if (!$this->flood->isAllowed('user.password_request_user', $flood_config->get('user_limit'), $flood_config->get('user_window'), $identifier)) {
-          $form_state->setErrorByName('name', $this->t('Too many password recovery requests for this account. It is temporarily blocked. Try again later or contact the site administrator.'));
-          return;
-        }
-        $this->flood->register('user.password_request_user', $flood_config->get('user_window'), $identifier);
-        $form_state->setValueForElement(['#parents' => ['account']], $account);
+    // Blocked accounts cannot request a new password.
+    if ($account && $account->id() && $account->isActive()) {
+      // Register flood events based on the uid only, so they apply for any
+      // IP address. This allows them to be cleared on successful reset (from
+      // any IP).
+      $identifier = $account->id();
+      if (!$this->flood->isAllowed('user.password_request_user', $flood_config->get('user_limit'), $flood_config->get('user_window'), $identifier)) {
+        return;
       }
+      $this->flood->register('user.password_request_user', $flood_config->get('user_window'), $identifier);
+      $form_state->setValueForElement(['#parents' => ['account']], $account);
     }
   }

diff -u b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
--- b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
+++ b/core/modules/user/tests/src/Functional/UserPasswordResetTest.php
@@ -175,7 +175,6 @@
     $before = count($this->drupalGetMails(['id' => 'user_password_reset']));
     $edit = ['name' => $blocked_account->getAccountName()];
     $this->submitForm($edit, 'Submit');
-    $this->assertRaw(t('%name is blocked or has not been activated yet.', ['%name' => $blocked_account->getAccountName()]));
     $this->assertCount($before, $this->drupalGetMails(['id' => 'user_password_reset']), 'No email was sent when requesting password reset for a blocked account');

     // Verify a password reset link is invalidated when the user's email address changes.
@@ -379,18 +378,25 @@

     $edit = ['name' => $this->account->getAccountName()];

+    // Count email messages before to compare with after.
+    $before = count($this->drupalGetMails(['id' => 'user_password_reset']));
+
     // Try 3 requests that should not trigger flood control.
     for ($i = 0; $i < 3; $i++) {
       $this->drupalGet('user/password');
       $this->submitForm($edit, 'Submit');
       $this->assertValidPasswordReset($edit['name']);
-      $this->assertNoPasswordUserFlood();
     }

+    // Ensure 3 emails were sent.
+    $this->assertCount($before + 3, $this->drupalGetMails(['id' => 'user_password_reset']), '3 emails sent without triggering flood control.');
+
     // The next request should trigger flood control.
     $this->drupalGet('user/password');
     $this->submitForm($edit, 'Submit');
-    $this->assertPasswordUserFlood();
+
+    // Ensure no further emails was sent.
+    $this->assertCount($before + 3, $this->drupalGetMails(['id' => 'user_password_reset']), 'No further email was sent after triggering flood control.');
   }

   /**
@@ -428,14 +434,19 @@

     $edit = ['name' => $this->account->getAccountName()];

+    // Count email messages before to compare with after.
+    $before = count($this->drupalGetMails(['id' => 'user_password_reset']));
+
     // Try 3 requests that should not trigger flood control.
     for ($i = 0; $i < 3; $i++) {
       $this->drupalGet('user/password');
       $this->submitForm($edit, 'Submit');
       $this->assertValidPasswordReset($edit['name']);
-      $this->assertNoPasswordUserFlood();
     }

+    // Ensure 3 emails were sent.
+    $this->assertCount($before + 3, $this->drupalGetMails(['id' => 'user_password_reset']), '3 emails sent without triggering flood control.');
+
     // Use the last password reset URL which was generated.
     $reset_url = $this->getResetURL();
     $this->drupalGet($reset_url . '/login');
@@ -448,7 +459,9 @@
     $this->drupalGet('user/password');
     $this->submitForm($edit, 'Submit');
     $this->assertValidPasswordReset($edit['name']);
-    $this->assertNoPasswordUserFlood();
+
+    // Ensure a further email was sent.
+    $this->assertCount($before + 4, $this->drupalGetMails(['id' => 'user_password_reset']), 'A further email was sent after clearing flood control.');
   }

   /**
@@ -474,18 +487,4 @@

   /**
-   * Makes assertions about a password reset triggering user flood control.
-   */
-  public function assertPasswordUserFlood() {
-    $this->assertText('Too many password recovery requests for this account. It is temporarily blocked. Try again later or contact the site administrator.', 'User password reset flood error message shown.');
-  }
-
-  /**
-   * Makes assertions about a password reset not triggering user flood control.
-   */
-  public function assertNoPasswordUserFlood() {
-    $this->assertNoText('Too many password recovery requests for this account. It is temporarily blocked. Try again later or contact the site administrator.', 'User password reset flood error message not shown.');
-  }
-
-  /**
    * Makes assertions about a password reset triggering IP flood control.
    */
