2013-03-03 2 views
6

Symfony2 использует комплект Swiftmailer для отправки электронных писем.Несколько экземпляров Swiftmailer в Symfony2

Чтобы использовать и настроить Swiftmailer в Symfony2, необходимо использовать такую ​​конфигурацию, как explained в документах, например. с помощью YAML:

swiftmailer: 
    transport: smtp 
    encryption: ssl 
    auth_mode: login 
    host:  smtp.gmail.com 
    username: your_username 
    password: your_password 

SwiftMailer определяется в Symfony2 в качестве службы и экземпляр оно может быть получено в контроллере следующим образом:

$mailerinstance = $this->get('mailer'); 

Теперь предположим, что две различные конфигурации требуется для Swiftmailer, например один, который использует буферизацию электронной почты (например, для запланированного информационного бюллетеня), а другой, который немедленно отправляет все новые электронные письма (например, для утраченного пароля). Таким образом, я предполагаю, что должны быть определены два отдельных экземпляра Swiftmailer. Как я могу это сделать в Symfony2?

+1

Теперь вы можете сделать это с SwiftMailer v2.3.3 +: http://stackoverflow.com/questions/16474822/swiftmailer-configuration-for-more-than-one -accounts-in-symfony-2? answertab = votes # tab-top – Ramazan

ответ

7

Существует не по умолчанию symfony способ иметь 2 разных экземпляра. Но вы можете просто создать новый класс, расширяющий swiftmailer, сделать его сервисом и просто передать родительскому конструктору вашу другую конфигурацию.

+0

Действительно?!?! Омг, это безумие! Кстати ... Я буду следовать вашим предложениям! – JeanValjean

+1

Должно быть что-то вроде менеджеров сущностей! Можно определить несколько менеджеров сущностей ... было бы неплохо определить несколько экземпляров Swiftmailer! – JeanValjean

4
swiftmailer: 
    default_mailer: second_mailer 
    mailers: 
     first_mailer: 
     # ... 
     second_mailer: 
     # ... 

// ... 

// returns the first mailer 
$container->get('swiftmailer.mailer.first_mailer'); 

// also returns the second mailer since it is the default mailer 
$container->get('swiftmailer.mailer'); 

// returns the second mailer 
$container->get('swiftmailer.mailer.second_mailer'); 

http://symfony.com/doc/current/reference/configuration/swiftmailer.html#using-multiple-mailers

+0

Думаю, вам не хватает вкладки со второй строки конфигурации. – user1875631

+0

Кроме того, это не работает на Symfony 2.1. – user1875631

+0

2.1 очень старый. Возможно, вам нужно подумать об обновлении. –

 Смежные вопросы

  • Нет связанных вопросов^_^