Как определить дополнительный почтовый сервис для использования катушки и отправки мгновенных писем в Symfony2


В моем веб-приложении Symfony2 я должен отправлять два вида писем: мгновенные и массовые. Мгновенные электронные письма должны быть отправлены сразу же, в то время как массовые электронные письма должны быть отправлены с помощью катушки. С настройкой Swiftmailer по умолчанию в Symfony2 это невозможно сделать, потому что существует только один почтовый сервис.

Подобные вопросы были заданы здесь в SO (Как катушить электронные письма (в задаче) и отправлять нормальные электронные письма в данный момент в других контроллерах?) без удачи, но в соответствии с этой нитью github (https://github.com/symfony/SwiftmailerBundle/issues/6 ) можно создать вторую почтовую службу, которая может быть настроена совершенно иначе, чем стандартная. Кто-то там (stof) рекомендовал в качестве возможного решения следовать конфигурации, найденной в SwiftmailerBundle ( https://github.com/symfony/SwiftmailerBundle/blob/master/Resources/config/swiftmailer.xml ) чтобы создать этот новый сервис, но я не знаю, как именно сделать это.

Кто-нибудь знает, как создать дополнительный почтовый сервис, который я могу настроить как катушку, имея почтовый сервис по умолчанию для отправки регулярных (мгновенных) писем?

1 6

1 ответ:

Я нашел решение здесь

Вот как я это реализовал:

Во-первых, я настроил почтовую службу по умолчанию для работы в качестве катушки для отправки массовых писем.

(конфиг.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"

Затем, внутри одного из моих пакетов (CommonBundle) я зарегистрировал новый сервис под названием "instant_mailer", который соответствует классу Swiftmailer.

(сервис.yml)

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

Наконец, в моем контроллере, когда я хочу отправить электронное письмо usning катушку я просто сделайте:

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

И отправить мгновенное сообщение электронной почты:

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