session = $customerSession; $this->customerAccountManagement = $customerAccountManagement; $this->escaper = $escaper; parent::__construct($context); } /** * Forgot customer password action * * @return \Magento\Framework\Controller\Result\Redirect */ public function execute() { /** @var \Magento\Framework\Controller\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); $email = (string)$this->getRequest()->getPost('email'); if ($email) { if (!\Zend_Validate::is($email, \Magento\Framework\Validator\EmailAddress::class)) { $this->session->setForgottenEmail($email); $this->messageManager->addErrorMessage( __('The email address is incorrect. Verify the email address and try again.') ); return $resultRedirect->setPath('*/*/forgotpassword'); } try { $this->customerAccountManagement->initiatePasswordReset( $email, AccountManagement::EMAIL_RESET ); } catch (NoSuchEntityException $exception) { // Do nothing, we don't want anyone to use this action to determine which email accounts are registered. } catch (SecurityViolationException $exception) { $this->messageManager->addErrorMessage($exception->getMessage()); return $resultRedirect->setPath('*/*/forgotpassword'); } catch (\Exception $exception) { $this->messageManager->addExceptionMessage( $exception, __('We\'re unable to send the password reset email.') ); return $resultRedirect->setPath('*/*/forgotpassword'); } $this->messageManager->addSuccessMessage($this->getSuccessMessage($email)); return $resultRedirect->setPath('*/*/'); } else { $this->messageManager->addErrorMessage(__('Please enter your email.')); return $resultRedirect->setPath('*/*/forgotpassword'); } } /** * Retrieve success message * * @param string $email * @return \Magento\Framework\Phrase */ protected function getSuccessMessage($email) { return __( 'If there is an account associated with %1 you will receive an email with a link to reset your password.', $this->escaper->escapeHtml($email) ); } }