原来看到很多发送邮件的教程,但由于自己是新手,总找不到对应的文件位置,最终搞出来了邮件发送。
1、了解事件
事件跟JavaScript中的时间相同,用户的某种行为触发后,反馈给某种动作。
2、邮件发送(通过事件)
(1)建立回调函数,就是用户触发后的行为
//对应文件位置,不懂的话,自己去参考PHP命名空间
namespace backend\components;
use Yii;
class Mail {
public static function sendMail($event){
$mail=Yii::$app->mailer->compose();
$mail->setTo($event->email);
$mail->setSubject($event->email);
$mail->setTextBody($event->content);
return $mail->send();
}
}
(2)定义事件并触发
namespace backend\controllers;
use Yii;
use yii\web\Controller;
use backend\components\event\MailEvent;
class SendMailController extends Controller{
const SEND_MAIL='send_mail';
public function init(){
parent::init();
$this->on(self::SEND_MAIL,['backend\components\Mail','sendMail']);
}
public function actionSend(){
//触发邮件事件
$event=new MailEvent();
$event->email='1280371035@qq.com';
$event->subject='事件邮件测试';
$event->content='邮件测试内容';
$this->trigger(self::SEND_MAIL,$event);
}
}
(3)在(1)步骤中的回调函数接受了一下参数,需要创建一个类来传递这些参数,参数必须是yii\base\Event或者其子类
namespace backend\components\event;
use yii\base\Event;
class MailEvent extends Event{
public $subject;
public $email;
public $content;
}
(4)配置后可以实现发送邮件\common\config\main-local.php
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'useFileTransport' => false,
'transport'=>[
'class'=>'Swift_SmtpTransport',
'host'=>'smtp.qq.com',
'username'=>'128*******@qq.com',
'password'=>'qq邮箱授权码,百度去',
'port'=>'25',
'encryption'=>'tls',
],
'messageConfig'=>[
'charset'=>'UTF-8',
'from'=>['128******@qq.com'=>'自己想的名字'],
],
],