SwiftMailerでのメール送信を利用していると、環境によっては特定ドメインだけ送るとか送らないとかそういったことをやりたいことがありました。
例えば、ステージング環境でメール送信がされるときは自社ドメイン以外はキャンセルするとかですね。
対処法
プラグインを自作しましょう。
<?php
class FilterDomainPlugin implements \Swift_Events_SendListener
{
public function beforeSendPerformed(Swift_Events_SendEvent $evt)
{
foreach($evt->getMessage()->getTo() as $email => $name) {
if () { // 判定を入れる
$evt->cancelBubble();
}
}
}
public function sendPerformed(Swift_Events_SendEvent $evt)
{
}
}
このようなプラグインを作ることでキャンセルができるようになります。
登録は以下のようにすればおっけー。
$transport->registerPlugin(new FilterDomainPlugin());
Laravelの場合は
Mail::getSwiftMailer()->registerPlugin(new FilterDomainPlugin());
から可能です。