WP_Recovery_Mode_Email_Service::maybe_send_recovery_mode_email( int $rate_limit, array $error, array $extension )

Sends the recovery mode email if the rate limit has not been sent.

Parameters Parameters


(int) (Required) Number of seconds before another email can be sent.


(array) (Required) Error details from error_get_last()


(array) (Required) The extension that caused the error.

  • 'slug'
    (string) The extension slug. The plugin or theme's directory.
  • 'type'
    (string) The extension type. Either 'plugin' or 'theme'.

Top ↑

Return Return

(true|WP_Error) True if email sent, WP_Error otherwise.

Top ↑

Source Source

File: wp-includes/class-wp-recovery-mode-email-service.php

	public function maybe_send_recovery_mode_email( $rate_limit, $error, $extension ) {

		$last_sent = get_option( self::RATE_LIMIT_OPTION );

		if ( ! $last_sent || time() > $last_sent + $rate_limit ) {
			if ( ! update_option( self::RATE_LIMIT_OPTION, time() ) ) {
				return new WP_Error( 'storage_error', __( 'Could not update the email last sent time.' ) );

			$sent = $this->send_recovery_mode_email( $rate_limit, $error, $extension );

			if ( $sent ) {
				return true;

			return new WP_Error(
					/* translators: %s: mail() */
					__( 'The email could not be sent. Possible reason: your host may have disabled the %s function.' ),

		$err_message = sprintf(
			/* translators: 1: Last sent as a human time diff, 2: Wait time as a human time diff. */
			__( 'A recovery link was already sent %1$s ago. Please wait another %2$s before requesting a new email.' ),
			human_time_diff( $last_sent ),
			human_time_diff( $last_sent + $rate_limit )

		return new WP_Error( 'email_sent_already', $err_message );

Top ↑

Changelog Changelog

Version Description
5.2.0 Introduced.

Top ↑

User Contributed Notes User Contributed Notes

You must log in before being able to contribute a note or feedback.