1.配置发件邮箱的信息,在项目目录下的config文件夹下的web.php,找到‘mailer’这个配置项目,配置内容如下:
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'useFileTransport' => false,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.163.com',
'username' => 'shenlu12205@163.com',
'password' => 'ak403852386',
'port' => '465',
'encryption' => 'ssl',
],
],
注意:你发邮件的邮箱必须开启ssl,这个功能要登录你的邮箱的设置上可以开启。
2.控制器里面找回密码的方法,这里发送邮件用到的方法定义在Admin的model里面,这个方法主要是接受用户输入的邮箱,就是收件人邮箱,最后放回邮件是否发送成功。
public function actionSeekpassword()
{
$this->layout = false;
$model = new Admin;
if (Yii::$app->request->isPost) {
$post = Yii::$app->request->post();
if ($model->seekPass($post)) {
Yii::$app->session->setFlash('info', '电子邮件已经发送成功,请查收');
}
}
return $this->render("seekpassword", ['model' => $model]);
}
3.Admin的model的发送邮箱验证的方法,接受收件人的邮箱,这里还游动这个发送邮件的模板文件seekpass.php
public function seekPass($data)
{
$this->scenario = "seekpass";
if ($this->load($data) && $this->validate()) {
//做点有意义的事
$time = time();
$token = $this->createToken($data['Admin']['adminuser'], $time);//邮件验证有效时间
$mailer = Yii::$app->mailer->compose('seekpass', ['adminuser' => $data['Admin']['adminuser'], 'time' => $time, 'token' => $token]);
$mailer->setFrom("shenlu12205@163.com");
$mailer->setTo($data['Admin']['adminemail']);
$mailer->setSubject("测试-找回密码");
if ($mailer->send()) {
return true;
}
}
return false;
}
4.发送邮件的模板文件seekpass.php,存放在项目目录下的mail目录里面
<p>尊敬的<?php echo $adminuser; ?>,您好:</p>
<p>您的找回密码链接如下:</p>
<?php $url = Yii::$app->urlManager->createAbsoluteUrl(['admin/manage/mailchangepass', 'timestamp' => $time, 'adminuser' => $adminuser, 'token' => $token]); ?>
<p><a href="<?php echo $url; ?>"><?php echo $url; ?></a></p>
<p>该链接5分钟内有效,请勿传递给别人!</p>
<p>该邮件为系统自动发送,请勿回复!</p>