通过发email找回密码
config文件夹里的配置文件,如main.php,配置如下:
点击(此处)折叠或打开
'mail' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
//'useFileTransport' => true, //放在本地的邮件列表,测试邮件的时候可以开启这个
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.126.com',
'username' => 'your email',
'password' => 'password',
'port' => '25',
'encryption' => 'tls',
],
],
controllers文件夹里的siteController.php,增加actionRequestPasswordReset,如下:
点击(此处)折叠或打开
public function actionRequestPasswordReset() {
$model = new PasswordResetRequestForm();
if ($model->load(Yii::$app->request->post())) {
if ($model->sendEmail()) {
Yii::$app->getSession()->setFlash('success', 'Check your email for further instructions.');
return $this->goHome();
} else {
Yii::$app->getSession()->setFlash('error', 'Sorry, we are unable to reset password for email provided.');
}
}
return $this->render('requestPasswordResetToken', [
'model' => $model,
]);
}
models文件夹里的PasswordResetRequestForm.php文件,增加sendEmail函数,如下:
点击(此处)折叠或打开
public function sendEmail()
{
/** @var User $user */
$user = User::find([
'status' => User::STATUS_ACTIVE,
'email' => $this->email,
]);
if (!$user) {
return false;
}
$user->generatePasswordResetToken();
if ($user->save()) {
return \Yii::$app->mail->compose()
->setFrom('from email')
->setTo('to email')
->setSubject('subject ')
->setTextBody('内容')
->send();
}
return false;
}