2012-09-04 5 views
6

W mojej aplikacji internetowej Symfony2 mam wysyłać dwa rodzaje wiadomości e-mail: natychmiastowe i zbiorcze. Natychmiastowe wiadomości e-mail powinny być wysyłane natychmiast, a masowe wiadomości e-mail powinny być wysyłane za pomocą szpuli. Przy domyślnej konfiguracji Swiftmailer w Symfony2 nie można tego zrobić, ponieważ istnieje tylko jedna usługa pocztowa.Jak zdefiniować dodatkową usługę pocztową do korzystania ze szpuli i wysyłać natychmiastowe wiadomości e-mail w Symfony2

Podobne pytania zadawano tutaj w SO (How to spool emails (in a task) and send normal emails in the moment in the other controllers?) bez powodzenia, ale zgodnie z tym wątkiem Github (https://github.com/symfony/SwiftmailerBundle/issues/6) możliwe jest utworzenie drugiej usługi pocztowej, która może być skonfigurowana zupełnie inaczej niż domyślna. Ktoś tam (stof) jest zalecany jako możliwe rozwiązanie do śledzenia konfiguracji znalezionej w SwiftmailerBundle (https://github.com/symfony/SwiftmailerBundle/blob/master/Resources/config/swiftmailer.xml) w celu utworzenia tej nowej usługi, ale nie wiem, jak dokładnie to zrobić.

Czy ktoś wie, jak utworzyć dodatkową usługę pocztową, którą mogę skonfigurować jako bufor, mając domyślną usługę pocztową do wysyłania zwykłych (natychmiastowych) wiadomości e-mail?

Odpowiedz

11

znalazłem rozwiązanie here

ten sposób I wdrożone go:

Najpierw skonfigurowany domyślną usługę mailera pracować jako szpuli do masowego wysyłania wiadomości email.

(config.yml)

swiftmailer: 
    transport: %mailer_transport% 
    encryption: %mailer_encryption% 
    auth_mode: %mailer_auth_mode% 
    host: %mailer_host% 
    username: %mailer_user% 
    password: %mailer_password% 
    spool: 
     type: file 
     path: "%kernel.root_dir%/spool" 

Następnie wewnątrz jednego z moich paczek (CommonBundle) Zarejestrowałem nową usługę o nazwie "instant_mailer", który mapuje do klasy Swiftmailer.

(service.yml)

instant_mailer: 
    class: %swiftmailer.class% 
    arguments: ["@?swiftmailer.transport.real"] 

Wreszcie w moim kontrolera, gdy chcę, aby wysłać e-mail usning szpulę po prostu zrobić:

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

I wysłać natychmiastowy email:

$mailer = $this->get('instant_mailer'); 
+2

Nice! Ale możesz napotkać problemy, jeśli jedno środowisko używa buforowania, a drugie nie. Możesz sprawdzić, czy '$ this-> get ('mailer') -> getTransport() instanceof \ Swift_Transport_SpoolTransport' przed przejściem do transportu realnego, ponieważ może nie istnieć! – bksunday

Powiązane problemy