2016-11-10 2 views
0

Мне нужно переопределить адрес получателя для каждого экземпляра функции Swiftmailer send() во всем приложении Yii2. Это предназначено для тестирования нагрузки.Переопределение получателя Swiftmailer Yii2

Есть ли простой способ сделать это? Или, по крайней мере, способ сделать это без редактирования файлов поставщиков Swiftmailer?

ответ

1

Если это только для теста, то почему бы не установить useFileTransport, поэтому электронные письма будут сохранены в выбранной вами папке вместо отправки. Для этого настройте его так:

'components' => [ 
    // ... 
    'mailer' => [ 
     'class' => 'yii\swiftmailer\Mailer', 
     'useFileTransport' => true, 
    ], 
], 

Это позволит сохранить все письма в папке @runtime/mail, если вы хотите другой один комплект:

'mailer' => [ 
    // ... 
    'fileTransportPath' => '@runtime/mail', // path or alias here 
], 

Если вы хотите по-прежнему отправлять электронную почту и переопределить адресатам может, например, расширить класс yii\swiftmailer\Mailer.

class MyMailer extends \yii\swiftmailer\Mailer 
{ 
    public $testmode = false; 
    public $testemail = '[email protected]'; 

    public function beforeSend($message) 
    { 
     if (parent::beforeSend($message)) { 
      if ($this->testmode) { 
       $message->setTo($this->testemail); 
      } 
      return true; 
     } 
     return false; 
    } 
} 

Настройка его:

'components' => [ 
    // ... 
    'mailer' => [ 
     'class' => 'namespace\of\your\class\MyMailer', 
     // the rest is the same like in your normal config 
    ], 
], 

И вы можете использовать его так же, как вы используете mailer компонент все время. Когда пришло время, чтобы переключиться в режим тестирования изменить конфигурацию:

'mailer' => [ 
    'class' => 'namespace\of\your\class\MyMailer', 
    'testmode' => true, 
    'testemail' => '[email protected]', // optional if you want to send all to address different than default [email protected] 
    // the rest is the same like in your normal config 
], 

С этим, каждое сообщение будет переопределен с адресом получателя.

+0

awesome! такой полный ответ! благодаря!! – LXXIII