0

config.yml私はSwiftmailerのためにこの設定をしています:

swiftmailer:
    transport: gmail
    username: xxx@gmail.com
    password: xxx
    delivery_address: xxx@gmail.com
    spool:
        type: file
        path: %kernel.cache_dir%/swiftmailer/spool
    antiflood:
        threshold:            99
        sleep:                0

しかし、1 つのバンドルに対して 1 つの構成が必要であり、別のバンドルに対して別の構成が必要です。

どうすればそれができますか?

4

1 に答える 1

1

ええと...実際には、メーラー サービスをバンドル内に取得して、必要な方法で構成できます。トランスポート インスタンスを取得し、そのハンドラーを構成し、そこmailerに注入を構成して新しいインスタンスを作成するだけです。transport

    $transport = $this->get('swiftmailer.transport');
    $transport->setHost('smtp.gmail.com');
    $transport->setEncryption('ssl');

    $handlers = $transport->getExtensionHandlers();

    $handler = $handlers[0];
    $handler->setUsername('');
    $handler->setPassword('');
    $handler->setAuthMode('login');

    $mailer = \Swift_Mailer::newInstance($transport);

gmailトランスポートを使用することを想定して、上記のいくつかのプロパティを設定しました。このvendor/symfony/swiftmailer-bundle/Symfony/Bundle/SwiftmailerBundle/DependencyInjection/SwiftmailerExtension.phpトランスポートの簡単なチェックがあります。

    //...
    } elseif ('gmail' === $config['transport']) {
        $config['encryption'] = 'ssl';
        $config['auth_mode'] = 'login';
        $config['host'] = 'smtp.gmail.com';
        $transport = 'smtp';
    } else {
    //...

spoolコンテナを取得して構成を試みることができます(mailerサービスを取得する前に行う必要があります)。

$this->getContainer()
    ->setParameter('swiftmailer.spool.file.path, '%kernel.cache_dir%/swiftmailer/spool');

ただし、このファイルパスはデフォルトで使用する必要があります。スプーリングを有効にするだけです。

$this->getContainer()->setParameter('swiftmailer.spool.enabled', true);

antiflood同様の方法で構成できます。

$this->getContainer()->setParameter('swiftmailer.plugin.antiflood.threshold', 99);
$this->getContainer()->setParameter('swiftmailer.plugin.antiflood.sleep', 0);

それが役に立てば幸い

于 2012-09-23T21:12:46.223 に答える