7

私の Symfony2 Web アプリでは、インスタントとバルクの 2 種類のメールを送信することになっています。一括メールはスプールを使用して送信する必要がありますが、インスタント メールはすぐに送信する必要があります。Symfony2 の Swiftmailer のデフォルト設定では、メーラー サービスが 1 つしかないため、これを行うことはできません。

同様の質問が SO でここで尋ねられました ( How to spool email (in a task) and send normal emails in the moment in the other controllers? ) 運はありませんが、この github スレッド ( https://github.com/ symfony/SwiftmailerBundle/issues/6 ) デフォルトのものとはまったく異なる設定が可能な 2 番目のメーラー サービスを作成することが可能です。この新しいサービスを作成するために、SwiftmailerBundle ( https://github.com/symfony/SwiftmailerBundle/blob/master/Resources/config/swiftmailer.xml ) にある構成に従うための可能な解決策として誰か (stof) が推奨しましたが、私はそれを正確にどのように行うのかわかりません。

デフォルトのメーラー サービスで通常の (インスタント) メールを送信しながら、スプールとして構成できる追加のメーラー サービスを作成する方法を知っている人はいますか?

4

1 に答える 1

12

私はここで解決策を見つけました

これが私がそれを実装した方法です:

まず、一括メールを送信するためのスプールとして機能するようにデフォルトのメーラーサービスを構成しました。

(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"

次に、バンドルの1つ(CommonBundle)内に、Swiftmailerクラスにマップする「instant_mailer」という新しいサービスを登録しました。

(service.yml)

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

最後に、私のコントローラーでは、スプールを使用して電子メールを送信したいときはいつでも、次のようにします。

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

そして、インスタントメールを送信するには:

$mailer = $this->get('instant_mailer');
于 2012-09-04T20:13:47.630 に答える