Yii2.0-advanced-9—使用事件发送邮件

事件可以将自定义代码“注入”到现有代码中的特定执行点。 附加自定义代码到某个事件,当这个事件被触发时,这些代码就会自动执行。 

使用事件发送邮件步骤如下:

1、事件定义 和 绑定

事件绑定使用 yii\base\Component 的on方法,yii的controller控制器已经继承component,可以直接使用

如下代码:

class SiteController extends Controller
{
    //定义事件
    const SEND_MAIL = 'send_mail';
    public function init()
    {
        parent::init();
        //初始化绑定事件
        $this->on(self::SEND_MAIL,['common\components\Mail','sendMail']);
    }
以上代码定义了SEND_MAIL事件,并绑定了 common\components\Mail 类的 sendMail 静态方法,当触发该事件就会调用此方法。

2、事件触发

事件触发使用yii\base\Component 的 trigger 方法,

如下代码:

//邮件发送
    public function actionSendMail()
    {
        $event = new MailEvent();
        $event->email = '270077706@qq.com';
        $event->subject = '测试邮件';
        $event->content = '事件发送邮件内容';
        
        $this->trigger(self::SEND_MAIL,$event);
    }
如果不需要传参,只要最后一行就可以了,如果需要传参,那么参数必须是一个事件对象;
这里因为要传email的相关参数,所以需要创建一个 MailEvent 类,参考 3

3、事件传参

$event 作为 yii\base\Component::trigger() 方法的第二个参数。 这个事件对象必须是yii\base\Event 类或其子类的实例。 因此创建一个子类继承它:

代码如下:

<?php
/**
 * 邮件事件类
 */

namespace common\components;
use yii\base\Event;

class MailEvent extends Event
{
    public $email;
    public $subject;
    public $content;
}
有了MailEvent类,只需要定义需要的属性就可以了,需要使用的时候,给他的对象属性赋值,然后作为trigger方法的参数传递给Mail类。
4、邮件发送

最后使用common\components\Mail 类的 sendMail 静态方法,发送邮件,

代码如下:

<?php
/**
 * 邮件发送类
 */
namespace common\components;
use Yii;

class Mail
{
    public static function sendMail($event)
    {
        $mail= Yii::$app->mailer->compose();
        $mail->setTo($event->email); //要发送给那个人的邮箱
        $mail->setSubject($event->subject); //邮件主题
        $mail->setTextBody($event->content); //发布纯文字文本
        return $mail->send();
    }
}
注意,这里的sendMail是静态方法;

附:邮件发送的配置,在 common\config\main.php['components'] 下

//邮件
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'viewPath' => '@common/mail',
            'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'smtp.163.com',
                'username' => '123456@163.com',
                'password' => '123456',     //这里是授权码非密码
                'port' => '25',
                'encryption' => 'tls',
            ],
            'messageConfig'=>[
                'charset'=>'UTF-8',
                'from'=>['123456@163.com'=>'Blog站点']
            ],
        ],

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值