我在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
但我需要一个配置到一个捆绑包,另一个配置到另一个捆绑包。
我怎么做?
答案 0 :(得分: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);
希望有所帮助