public function testSendEmailSuccessfully() { $userFixture = $this->tester->grabFixture('userAccount', 0); $model = new PasswordResetRequestForm(); $model->email = $userFixture['email']; $user = UserAccount::findOne(['password_reset_token' => $userFixture['password_reset_token']]); expect_that($model->sendEmail()); expect_that($user->password_reset_token); $emailMessage = $this->tester->grabLastSentEmail(); expect('valid email is sent', $emailMessage)->isInstanceOf('yii\\mail\\MessageInterface'); expect($emailMessage->getTo())->hasKey($model->email); expect($emailMessage->getFrom())->hasKey(Yii::$app->params['supportEmail']); }
/** * Sends an email with a link, for resetting the password. * * @return bool whether the email was send */ public function sendEmail() { /* @var $user UserAccount */ $user = UserAccount::findOne(['status' => UserAccount::STATUS_ACTIVE, 'email' => $this->email]); if (!$user) { return false; } if (!UserAccount::isPasswordResetTokenValid($user->password_reset_token)) { $user->generatePasswordResetToken(); } if (!$user->save()) { return false; } return Yii::$app->mailer->compose(['html' => 'password-reset-token-html', 'text' => 'password-reset-token-text'], ['user' => $user])->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name . ' robot'])->setTo($this->email)->setSubject('Password reset for ' . Yii::$app->name)->send(); }