2016-11-10 8 views
0

Ich muss die Empfänger-E-Mail für jede Instanz von Swiftmailer send() Funktion in meiner gesamten Yii2-Anwendung überschreiben. Dies dient dem Zweck der Belastungsprüfung.Override Yii2 Swiftmailer Empfänger

Gibt es eine einfache Möglichkeit, dies zu tun? Oder zumindest eine Möglichkeit, dies zu tun, ohne Swiftmailers Vendor-Dateien zu bearbeiten?

Antwort

1

Wenn dies nur für den Test ist, warum setzen Sie nicht useFileTransport so E-Mails werden in den Ordner Ihrer Wahl statt gesendet werden gespeichert. Gehen Sie so konfigurieren, dass es wie folgt aus:

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

Dadurch werden alle E-Mails im @runtime/mail Ordner speichern, wenn Sie anderes Set wollen:

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

Wenn Sie wollen immer noch E-Mails senden und Empfänger Sie außer Kraft setzen kann zum Beispiel yii\swiftmailer\Mailer Klasse erweitern.

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; 
    } 
} 

konfigurieren es:

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

Und Sie können es auf die gleiche Weise verwenden Sie mailer Komponente die ganze Zeit verwenden. Wenn es Zeit ist, den Testmodus zu wechseln, die die Konfiguration ändern:

'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 
], 

Damit wird jede E-Mail mit Ihrer Empfängeradresse außer Kraft gesetzt werden.

+0

genial! so eine vollständige Antwort! Vielen Dank!! – LXXIII