如何将不同的 SwiftMailer 邮件程序注入 Symfony 中的不同服务?
How do I inject different SwiftMailer mailers into different services in Symfony?
我有一个 Symfony 2.8 项目需要使用两个单独的邮件服务(例如 Google SMTP 和 Yahoo SMTP)。我已经根据文档配置了它们:
swiftmailer:
default_mailer: mailer_google
mailers:
mailer_google:
transport: smtp
host: %mailer_google_host%
port: %mailer_google_port%
encryption: tls
username: %mailer_google_username%
password: %mailer_google_password%
mailer_yahoo:
transport: smtp
host: %mailer_yahoo_host%
port: %mailer_yahoo_port%
encryption: tls
username: %mailer_yahoo_username%
password: %mailer_yahoo_password%
%variables%
的值都是在parameters.yml
中定义的,这里不相关。
我正在尝试使用自定义 Mailer class,它用于定义两种不同的服务,如下所示:
aalaap.services.mailer_google:
class: Aalaap\AppBundle\Services\Mail\Mailer
arguments:
- @mailer
- '%mailer_google_sender%'
aalaap.services.mailer_yahoo:
class: Aalaap\AppBundle\Services\Mail\Mailer
arguments:
- @mailer_yahoo
- '%mailer_yahoo_sender%'
现在,因为默认邮件程序设置为 mailer_google
,在第一个服务定义中,仅指定 @mailer
即可。但是,第二个服务找不到@mailer_yahoo
.
ServiceNotFoundException in CheckExceptionOnInvalidReferenceBehaviorPass.php line 58:
The service "aalaap.services.mailer_yahoo" has a dependency on a non-existent service "mailer_yahoo".
我已经用 @mailer.mailer_yahoo
试过了,但这也不起作用。如果我将第一个服务定义更改为使用特定的 @mailer_google
而不是仅使用默认的 @mailer
,那也不起作用。 @swiftmailer.mailers.mailer_yahoo
.
不走运
如何将第二个(或非默认)邮件程序注入服务?
所以,这就是如何设置多个邮件帐户并使用 Symfony 处理注入:
设置 swiftmailer 配置:
swiftmailer:
default_mailer: mailer_google
mailers:
mailer_google:
transport: smtp
host: %mailer_google_host%
port: %mailer_google_port%
encryption: tls
username: %mailer_google_username%
password: %mailer_google_password%
mailer_yahoo:
transport: smtp
host: %mailer_yahoo_host%
port: %mailer_yahoo_port%
encryption: tls
username: %mailer_yahoo_username%
password: %mailer_yahoo_password%
然后以这种方式在服务中注入想要的邮件程序(例如,google 邮件程序):
aalaap.services.mailer_google:
class: Aalaap\AppBundle\Services\Mail\Mailer
arguments:
- @swiftmailer.mailer.mailer_google
- '%mailer_google_sender%'
或者(因为在那种情况下 google 邮件程序是默认邮件程序):
aalaap.services.mailer_google:
class: Aalaap\AppBundle\Services\Mail\Mailer
arguments:
- @swiftmailer.mailer.default_mailer
- '%mailer_google_sender%'
我有一个 Symfony 2.8 项目需要使用两个单独的邮件服务(例如 Google SMTP 和 Yahoo SMTP)。我已经根据文档配置了它们:
swiftmailer:
default_mailer: mailer_google
mailers:
mailer_google:
transport: smtp
host: %mailer_google_host%
port: %mailer_google_port%
encryption: tls
username: %mailer_google_username%
password: %mailer_google_password%
mailer_yahoo:
transport: smtp
host: %mailer_yahoo_host%
port: %mailer_yahoo_port%
encryption: tls
username: %mailer_yahoo_username%
password: %mailer_yahoo_password%
%variables%
的值都是在parameters.yml
中定义的,这里不相关。
我正在尝试使用自定义 Mailer class,它用于定义两种不同的服务,如下所示:
aalaap.services.mailer_google:
class: Aalaap\AppBundle\Services\Mail\Mailer
arguments:
- @mailer
- '%mailer_google_sender%'
aalaap.services.mailer_yahoo:
class: Aalaap\AppBundle\Services\Mail\Mailer
arguments:
- @mailer_yahoo
- '%mailer_yahoo_sender%'
现在,因为默认邮件程序设置为 mailer_google
,在第一个服务定义中,仅指定 @mailer
即可。但是,第二个服务找不到@mailer_yahoo
.
ServiceNotFoundException in CheckExceptionOnInvalidReferenceBehaviorPass.php line 58: The service "aalaap.services.mailer_yahoo" has a dependency on a non-existent service "mailer_yahoo".
我已经用 @mailer.mailer_yahoo
试过了,但这也不起作用。如果我将第一个服务定义更改为使用特定的 @mailer_google
而不是仅使用默认的 @mailer
,那也不起作用。 @swiftmailer.mailers.mailer_yahoo
.
如何将第二个(或非默认)邮件程序注入服务?
所以,这就是如何设置多个邮件帐户并使用 Symfony 处理注入:
设置 swiftmailer 配置:
swiftmailer:
default_mailer: mailer_google
mailers:
mailer_google:
transport: smtp
host: %mailer_google_host%
port: %mailer_google_port%
encryption: tls
username: %mailer_google_username%
password: %mailer_google_password%
mailer_yahoo:
transport: smtp
host: %mailer_yahoo_host%
port: %mailer_yahoo_port%
encryption: tls
username: %mailer_yahoo_username%
password: %mailer_yahoo_password%
然后以这种方式在服务中注入想要的邮件程序(例如,google 邮件程序):
aalaap.services.mailer_google:
class: Aalaap\AppBundle\Services\Mail\Mailer
arguments:
- @swiftmailer.mailer.mailer_google
- '%mailer_google_sender%'
或者(因为在那种情况下 google 邮件程序是默认邮件程序):
aalaap.services.mailer_google:
class: Aalaap\AppBundle\Services\Mail\Mailer
arguments:
- @swiftmailer.mailer.default_mailer
- '%mailer_google_sender%'