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.




(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. { @type string $slug The extension slug. The plugin or theme's directory. @type string $type The extension type. Either 'plugin' or 'theme'. }


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


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( 'email_failed', __( 'The email could not be sent. Possible reason: your host may have disabled the mail() 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 );


Version Description
5.2.0 Introduced.

© 2003–2019 WordPress Foundation
Licensed under the GNU GPLv2+ License.