我为前端(FrontendBundle)和后端(AppBundle)提供了单独的捆绑包。我想在两个包的控制器方法中发送电子邮件。我用来发送电子邮件的代码如下:
$message = (new \Swift_Message('Hello Email'))
->setFrom('xxxxxxx')
->setTo('xxxxxxxx')
->setBody(
$this->templating->render(
'@AppBundle/emails/test.html.twig'
),
'text/html'
)
;
$this->mailer->send($message);
当我将此代码放在AppBundle中的控制器方法中时,它可以完美地运行。但是,当我将代码放在FrontendBundle中的控制器方法中时,电子邮件不会被发送,我也不会收到错误。
因此,代码本身似乎没有问题。我想这可能是一个配置问题,但我没有想法在哪里看。
提前致谢
更新
config.yml
# Swiftmailer Configuration
swiftmailer:
transport: '%mailer_transport%'
host: '%mailer_host%'
username: '%mailer_user%'
password: '%mailer_password%'
parameters.yml
parameters:
mailer_transport: smtp
mailer_host: xxxxxxxx
mailer_user: xxxxxxxx
mailer_password: xxxxxxxx
这也可能是相关的:我设置了虚拟主机,以便AppBundle在app.localhost上运行,而FrontendBundle在localhost上运行。这反映在Symfony Profiler中显示的消息ID中(例如,f4f2a2604asd5618d4caf892e5e4e5@app.localhost)。
答案 0 :(得分:1)
我会查看配置multiple mailers,因为看起来您遇到了两个不同主机的问题:
<强> config.yml:强>
swiftmailer:
default_mailer: app_mailer
mailers:
app_mailer:
transport: '%mailer_transport%'
host: '%mailer_host_app%'
username: '%mailer_user%'
password: '%mailer_password%'
frontend_mailer:
transport: '%mailer_transport%'
host: '%mailer_host_frontend%'
username: '%mailer_user%'
password: '%mailer_password%'
<强> parameters.yml:强>
parameters:
mailer_transport: smtp
mailer_host_app: app.localhost
mailer_host_frontend: localhost
mailer_user: xxxxxxxx
mailer_password: xxxxxxxx
然后,您需要根据您在服务中想要的邮件注入正确的邮件程序。如果您可以直接访问容器,那么这些服务将是这样的:
// since app_mailer was the default, these are equivalent
$container->get('swiftmailer.mailer.app_mailer');
$container->get('swiftmailer.mailer');
$container->get('swiftmailer.mailer.frontend_mailer');