0

我在config.ymlSwiftmailer 中有这个配置:

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

但是我需要对一个捆绑包进行一种配置,对另一个捆绑包进行另一种配置。

我该怎么做?

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 回答