yii发邮件可以调用yii自带的邮件类,只需要自己有一个邮箱然后做一些相关的配置然后调用即可。
我这里以163网易邮箱为例。

设置邮箱

进入邮箱主页面 设置->POP3/SMTP/IMAP

进入POP3/SMTP/IMAP 把邮箱服务器打开然后点 确定

进入 客户端授权密码

输入手机验证码后点确定,跳转到输入授权密码这个授权密码就好像你的支付密码一样很重要一定要记住。

配置web.php

然后配置web.php 文件位置就在 yii根目录下的config文件夹下 ./config/web.php
加上下图红框内的配置

下面是完整配置

        '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' => '18648000000@163.com',  //用户名'password' => '123456789000',         //授权码'port' => '465',                      //端口465就可以'encryption' => 'ssl',                //因为选择的是465所以这里填ssl因为这个会更安全 ,如果端口是25那这里要填 tls],]

控制器

发送
$model−>seekPass($post)$model−>seekPass($post)\$model->seekPass(\$post); 调用模型seekPass()方法,所有的发送操作都在这个方法里

    //发送邮件public function actionSeekpassword(){$this->layout = false;$model = new Admin;//判断是否POST提交if (Yii::$app->request->isPost){//接收post数据$post = Yii::$app->request->post();//调用model,if ($model->seekPass($post)) {Yii::$app->session->setFlash('info', '电子邮件已经发送成功,请查收');}}return $this->render("seekpassword", ['model' => $model]);}

控制器完整代码

<?php
namespace app\modules\controllers;use yii\web\Controller;
use app\modules\models\Admin;
use Yii;  //引入Yii类
class PublicController extends Controller
{//发送邮件public function actionSeekpassword(){$this->layout = false;$model = new Admin;//判断是否POST提交if (Yii::$app->request->isPost){//接收post数据$post = Yii::$app->request->post();//调用model,if ($model->seekPass($post)) {Yii::$app->session->setFlash('info', '电子邮件已经发送成功,请查收');}}return $this->render("seekpassword", ['model' => $model]);}//邮箱找回密码public function actionMailchangepass(){$this->layout = false;//接收时间戳$time = Yii::$app->request->get("timestamp");//接收用户名$adminuser = Yii::$app->request->get("adminuser");//接收token$token = Yii::$app->request->get("token");$model = new Admin;//用同样的方法 把接收到的用户名和时间生成Token。$myToken = $model->createToken($adminuser, $time);//验证tokenif ($token != $myToken){//验证没通过,直接调到登录界面$this->redirect(['public/login']);Yii::$app->end();}//计算是否超时if (time() - $time > 3000){//超时直接跳到登录界面$this->redirect(['public/login']);Yii::$app->end();}//如果是post数据if (Yii::$app->request->isPost){$post = Yii::$app->request->post();if ($model->changePass($post)) {Yii::$app->session->setFlash('info', '密码修改成功');}}$model->adminuser = $adminuser;return $this->render("mailchangepass", ['model' => $model]);}}

模型类

邮箱模板:

Yii::$app->mailer->compose(模板名, [模板参数]);

例:

Yii::$app->mailer->compose('seekpass', ['adminuser' => $data['Admin']['adminuser'], 'time' => $time, 'token' => $token])

发送邮箱:

$mailer->setFrom(发件人的邮箱地址);    

例:
$mailer->setFrom("18648000000@163.com"); //发件人

接收的邮箱地址:

$mailer->setTo(收件人邮箱地址);

例:

$mailer->setTo("14315*****@qq.com");     //收件人

发送

seekPass()seekPass()seekPass() 方法

    //发送邮件找回密码public function seekPass($data){   //场景属性$this->scenario = "seekpass";//验证if ($this->load($data) && $this->validate()) {//时间$time = time();//签名函数$token = $this->createToken($data['Admin']['adminuser'], $time);//邮件内容//seekpass 邮箱模板 ,模板的位置是 mail/seekpass.php$mailer = Yii::$app->mailer->compose('seekpass', ['adminuser' => $data['Admin']['adminuser'], 'time' => $time, 'token' => $token]);$mailer->setFrom("18648000000@163.com");            //发件人$mailer->setTo($data['Admin']['adminemail']);       //收件人$mailer->setSubject("商城-找回密码");                 //邮件标题if ($mailer->send()){return true;}}return false;}

模型完整代码

<?phpnamespace app\modules\models;
use yii\db\ActiveRecord;
use Yii;class Admin extends ActiveRecord
{public $rememberMe = true;public $repass;public static function tableName(){return "{{%admin}}";}public function attributeLabels(){return ['adminuser' => '管理员账号','adminemail' => '管理员邮箱','adminpass' => '管理员密码','repass' => '确认密码',];}//验证信息public function rules(){return [//验证 adminuser//  'on' =>['seekpass',....] 指定场景,表示在on数组内的场景都会用到这条验证。['adminuser', 'required', 'message' => '管理员账号不能为空', 'on' => ['seekpass', 'changepass']],['adminpass', 'required', 'message' => '管理员密码不能为空', 'on' => ['changepass']],['adminemail', 'required', 'message' => '电子邮箱不能为空', 'on' => ['seekpass']],['adminemail', 'email', 'message' => '电子邮箱格式不正确', 'on' => ['seekpass']],['adminemail', 'validateEmail', 'on' => 'seekpass'],['repass', 'required', 'message' => '确认密码不能为空', 'on' => ['changepass']],['repass', 'compare', 'compareAttribute' => 'adminpass', 'message' => '两次密码输入不一致', 'on' => ['changepass']],];}//邮箱验证public function validateEmail(){   //如果验证没有错误if (!$this->hasErrors()) {$data = self::find()->where('adminuser = :user and adminemail = :email', [':user' => $this->adminuser, ':email' => $this->adminemail])->one();if (is_null($data)) {//定义错误信息$this->addError("adminemail", "管理员电子邮箱不匹配");        }}}//发送邮件找回密码public function seekPass($data){   //场景属性$this->scenario = "seekpass";//验证if ($this->load($data) && $this->validate()) {//做点有意义的事//时间$time = time();//签名函数$token = $this->createToken($data['Admin']['adminuser'], $time);//邮件内容//seekpass 邮箱模板 ,模板的位置是 mail/seekpass.php$mailer = Yii::$app->mailer->compose('seekpass', ['adminuser' => $data['Admin']['adminuser'], 'time' => $time, 'token' => $token]);$mailer->setFrom("18648000000@163.com");      //发件人$mailer->setTo($data['Admin']['adminemail']);       //收件人$mailer->setSubject("慕课商城-找回密码");    //邮件标题if ($mailer->send()){return true;}}return false;}// 签名public function createToken($adminuser, $time){return md5(md5($adminuser).base64_encode(Yii::$app->request->userIP).md5($time));}//修改密码public function changePass($data) {   //场景属性$this->scenario = "changepass";if ($this->load($data) && $this->validate()){return (bool)$this->updateAll(['adminpass' => md5($this->adminpass)], 'adminuser = :user', [':user' => $this->adminuser]);}return false;}}

邮箱信息内容模板

邮箱模板需要在mail目录下创建
mail/seekpass.php
生成URL地址连带参数

 Yii::$app->urlManager->createAbsoluteUrl(['admin/manage/mailchangepass', 'timestamp' => $time, 'adminuser' => $adminuser, 'token' => $token]);
<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>

html发送信息到邮箱模板
接收成功信息提示

Yii::$app->session->getFlash('info');

生成type=text 的input

<?php echo $form->field($model, 'adminuser')->textInput(["class" => "span12", "placeholder" => "管理员账号"]); ?>

form表单开始
{error} 是每个input的验证错误信息

        <?php $form = ActiveForm::begin(['fieldConfig' => ['template' => '{error}{input}',],]); ?>

form表单结束

 <?php ActiveForm::end(); ?>
<?php//引入form表单组件use yii\bootstrap\ActiveForm;//引入html组件use yii\helpers\Html;
?><!DOCTYPE html>
<html class="login-bg">
<head><title>后台管理</title><meta name="viewport" content="width=device-width, initial-scale=1.0" /><!-- bootstrap --><link href="assets/admin/css/bootstrap/bootstrap.css" rel="stylesheet" /><link href="assets/admin/css/bootstrap/bootstrap-responsive.css" rel="stylesheet" /><link href="assets/admin/css/bootstrap/bootstrap-overrides.css" type="text/css" rel="stylesheet" /><!-- global styles --><link rel="stylesheet" type="text/css" href="assets/admin/css/layout.css" /><link rel="stylesheet" type="text/css" href="assets/admin/css/elements.css" /><link rel="stylesheet" type="text/css" href="assets/admin/css/icons.css" /><!-- libraries --><link rel="stylesheet" type="text/css" href="assets/admin/css/lib/font-awesome.css" /><!-- this page specific styles --><link rel="stylesheet" href="assets/admin/css/compiled/signin.css" type="text/css" media="screen" /><!-- open sans font --><!--[if lt IE 9]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body><div class="row-fluid login-wrapper"><!-- yii\helpers\Url::to  生成URL地址 --><a class="brand" href="<?php echo yii\helpers\Url::to(['/index/index']) ?>"></a><!-- form 开始标签   {error} 验证错误信息--><?php $form = ActiveForm::begin(['fieldConfig' => ['template' => '{error}{input}',],]); ?><div class="span4 box"><div class="content-wrap"><h6> 找回密码</h6><!--发送成功信息--><?php if (Yii::$app->session->hasFlash('info')) {echo Yii::$app->session->getFlash('info');} ?><!--发送成功信息--><!-- 生成 text input --><?php echo $form->field($model, 'adminuser')->textInput(["class" => "span12", "placeholder" => "管理员账号"]); ?><?php echo $form->field($model, 'adminemail')->textInput(["class" => "span12", "placeholder" => "管理员电子邮箱"]); ?><!-- yii\helpers\Url::to  生成URL地址到 public/login --><a href="<?php echo yii\helpers\Url::to(['public/login']); ?>" class="forgot">返回登录</a><!--生成Button 按钮组件--><?php echo Html::submitButton('找回密码', ["class" => "btn-glow primary login"]); ?></div></div><?php ActiveForm::end(); ?><!--form 结束标签 --></div><!-- scripts --><script src="assets/admin/js/jquery-latest.js"></script><script src="assets/admin/js/bootstrap.min.js"></script><script src="assets/admin/js/theme.js"></script><!-- pre load bg imgs --><script type="text/javascript">$(function () {// bg switchervar $btns = $(".bg-switch .bg");$btns.click(function (e) {e.preventDefault();$btns.removeClass("active");$(this).addClass("active");var bg = $(this).data("img");$("html").css("background-image", "url('img/bgs/" + bg + "')");});});</script></body>
</html>

发送成功后

html修改密码模板

<?php//引入form组件use yii\bootstrap\ActiveForm;//引入html组件use yii\helpers\Html;
?><!DOCTYPE html>
<html class="login-bg">
<head><title> 后台管理</title><meta name="viewport" content="width=device-width, initial-scale=1.0" /><!-- bootstrap --><link href="assets/admin/css/bootstrap/bootstrap.css" rel="stylesheet" /><link href="assets/admin/css/bootstrap/bootstrap-responsive.css" rel="stylesheet" /><link href="assets/admin/css/bootstrap/bootstrap-overrides.css" type="text/css" rel="stylesheet" /><!-- global styles --><link rel="stylesheet" type="text/css" href="assets/admin/css/layout.css" /><link rel="stylesheet" type="text/css" href="assets/admin/css/elements.css" /><link rel="stylesheet" type="text/css" href="assets/admin/css/icons.css" /><!-- libraries --><link rel="stylesheet" type="text/css" href="assets/admin/css/lib/font-awesome.css" /><!-- this page specific styles --><link rel="stylesheet" href="assets/admin/css/compiled/signin.css" type="text/css" media="screen" /><!-- open sans font --><!--[if lt IE 9]><script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></head>
<body><div class="row-fluid login-wrapper"><!-- 生成URL地址 --><a class="brand" href="<?php echo yii\helpers\Url::to(['/index/index']) ?>"></a><!--form 开始 {error} 错误验证信息 --><?php $form = ActiveForm::begin(['fieldConfig' => ['template' => '{error}{input}',],]); ?><div class="span4 box"><div class="content-wrap"><h6> 修改密码</h6><?php//修改成功信息if (Yii::$app->session->hasFlash('info')) {echo Yii::$app->session->getFlash('info');}?><!-- 生成 text input --><?php echo $form->field($model, 'adminuser')->hiddenInput(); ?><!-- 生成 type=password input --><?php echo $form->field($model, 'adminpass')->passwordInput(["class" => "span12", "placeholder" => "新密码"]); ?><?php echo $form->field($model, 'repass')->passwordInput(["class" => "span12", "placeholder" => "确认密码"]); ?><!-- yii\helpers\Url::to  生成URL地址到 public/login --><a href="<?php echo yii\helpers\Url::to(['public/login']); ?>" class="forgot">返回登录</a><?php echo Html::submitButton('修改', ["class" => "btn-glow primary login"]); ?></div></div><!--form 结束 --><?php ActiveForm::end(); ?></div><!-- scripts --><script src="assets/admin/js/jquery-latest.js"></script><script src="assets/admin/js/bootstrap.min.js"></script><script src="assets/admin/js/theme.js"></script><!-- pre load bg imgs --><script type="text/javascript">$(function () {// bg switchervar $btns = $(".bg-switch .bg");$btns.click(function (e) {e.preventDefault();$btns.removeClass("active");$(this).addClass("active");var bg = $(this).data("img");$("html").css("background-image", "url('img/bgs/" + bg + "')");});});</script></body>
</html>

Yii2.0-发邮件找回密码相关推荐

  1. python 发邮件 无需密码_Django实现发送邮件找回密码功能

    在各大网站上,一定都遇到过找回密码的问题,通常采用的方式是通过发送带有验证码的邮件进行身份验证,本文将介绍通过Django实现邮件找回密码功能. 找回密码流程 功能流程: 1.首先在用户登录界面,添加 ...

  2. 找回密码功能 java_Java实现邮件找回密码功能

    本文实例为大家分享了Java实现邮件找回密码功能的具体代码,供大家参考,具体内容如下 1.有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回, ...

  3. java 邮箱找回密码_【JavaWeb】通过邮件找回密码

    前言 本文将介绍忘记密码时通过发送重置密码邮件找回密码的实现思路.整个实现过程中最重要的就是以下三点: 如何发送邮件到用户指定邮箱 邮件中的重置密码链接构成是怎么样的 验证重置密码链接的合法性(是否过 ...

  4. magento会员邮件找回密码连接无效

    magento 版本1.62 会员邮件找回密码 页面返回500 报错 Fatal error: Call to a member function setCustomerId() on a non-o ...

  5. Java实现邮件找回密码功能

    具体内容如下 1.有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. ...

  6. javaWeb实现使用邮箱邮件找回密码功能

    JSP+Jmail+JavaBean 发邮件(转)2010-08-23 18:052007年04月14日 14:32/* * SendMail.java * * Created on 2007年3月3 ...

  7. java通过邮件找回密码_SpringMVC实现通过邮件找回密码功能

    最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密码. ...

  8. java实现通过绑定邮箱找回密码功能_SpringMVC通过邮件找回密码功能的实现

    1.最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回.通过java发送邮件的功能我就不说了,重点讲找回密 ...

  9. 通过邮件找回密码功能的实现

    .最近开发一个系统,有个需求就是,忘记密码后通过邮箱找回.现在的系统在注册的时候都会强制输入邮箱,其一目的就是 通过邮件绑定找回,可以进行密码找回. 通过java发送邮件的功能我就不说了,重点讲找回密 ...

最新文章

  1. 使用Intellij中的Spring Initializr来快速构建Spring Boot/Cloud工程(十五)
  2. Spring之AOP由浅入深
  3. Kobe Bryant crash report
  4. ubuntu16下vue-cli安装
  5. python的网页解析器_Python网页解析器使用实例详解
  6. [2013-08-19] nohup的使用
  7. Struts2初始化过程代码分析
  8. odoo10参考系列--QWeb
  9. python分词训练_python练习17:用jieba分词做关键词提取,用matplotlib做可视化
  10. python编程输入,Python编程:输入变量返回nam
  11. 软件开发中的需求种类
  12. 九大Python处理PDF操作
  13. Oracle执行计划——查看执行计划的方法
  14. 关于 MySQL bug 91418 一些看法
  15. 1-5分钟上手自动化测试——Airtest+Poco快速上手
  16. SVN :Cannot verify lock on path XXX,no username available
  17. 拼装机器人感想_拼装机器人 感受未来科技
  18. php 按位与运算,PHP 按位与()运算符应用实践
  19. ibatis代码自动生成-ibatis使用者的福音来了
  20. 普中科技16引脚LCD12864使用说明

热门文章

  1. 苹果M1芯片其实没有那么好?英特尔做了套PPT官方反击
  2. No qualifying bean of type ‘javax.servlet.Filter‘ available: expected at least 1 bean which qualif
  3. 画一个带统计检验的PcOA分析结果 (再进一步,配对比较)
  4. 小程序点击video暂停/开始
  5. 开工第一周,我劝你离开“独裁”的老板
  6. Java中值得注意的『运算符、逻辑控制、输入输出』
  7. 丹麦公司发布MR显示器,酷似全息投影
  8. 扯一下关于魔兽改键的蛋
  9. Unity shader 关于卡通渲染阴影闭塞的实现
  10. SICE:基于CNN的多曝光图像增强网络论文解读