2021-12-22 13:48:27 1172次浏览 1条回答 0 悬赏 100 金钱

我想在发邮件前对每个邮件进行检查,应该如何操作?我查了api,有beforeSend() 方法和EVENT_BEFORE_SEND 事件,但是应该怎么用呢?我在main-local.php里企图向下面一样重写beforeSend方法,但是好像不行:
'mailer' => [

        'class' => 'yii\swiftmailer\Mailer',
        'viewPath' => '@common/mail',
        'useFileTransport' => false,
        **'beforeSend'=>function(){return true;}**
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'Host.COM',
            'username' => 'test',
            'password' => 'test',
            'port' => 25,
        ],
        'messageConfig'=> [
            'charset' => 'UTF-8',
        ],
    ],
补充于 2022-01-04 14:14

我在main-local.php里新增了一个类:
class mailer extends yii\swiftmailer\Mailer
{

public function beforeSend($message)
{
    yii::info('sddws12asc');
    yii::info(print_r($message->to));
    yii::info($message->to);
    $message->to=['qing@qq.com' => null];
    $message->Cc=[ 'qing@qq.com' => null];
    return parent::beforeSend($message); // TODO: Change the autogenerated stub
}

}
然后:
'mailer' => [

        'class' => 'mailer',

最佳答案

  • 蓝色主旋律 发布于 2021-12-23 08:51 举报

    没试过,但是感觉可以结合
    https://www.yiichina.com/doc/guide/2.0/structure-extensions#bootstrapping-classes

    订阅全局事件

    Event::on(BaseMailer::className(), BaseMailer::EVENT_BEFORE_SEND, function ($event) {
        // 不符合条件
    	$event->isValid = false;
    });
    
    
    // 涉及的源码  yii\mail\BaseMailer
    public function beforeSend($message)
    {
    	$event = new MailEvent(['message' => $message]);
    	$this->trigger(self::EVENT_BEFORE_SEND, $event);
    
    	return $event->isValid;
    }
    
    public function send($message)
    {
    	if (!$this->beforeSend($message)) {
    		return false;
    	}
    }
    
    没有找到数据。
您需要登录后才可以回答。登录 | 立即注册
zq
主管

zq

注册时间:2017-02-09
最后登录:2022-12-08
在线时长:13小时59分
  • 粉丝3
  • 金钱320
  • 威望10
  • 积分550

热门问题