Symfony SwiftMailer:电子邮件只能在AppBundle中发送,但不能在其他捆绑包中发送

时间:2017-08-27 13:33:22

标签: symfony swiftmailer symfony-3.3

我为前端(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)。

1 个答案:

答案 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');