Sylius:梅勒不工作,加我自己的

时间:2014-06-17 09:19:58

标签: symfony swiftmailer sylius

自从我二月份开始与Sylius合作以来,我从未在电子商务流程的任何一步中收到过电子邮件。不是在注册时,而是在订单完成时。

现在我认为根本就没有这方面的支持,我开始编写自己的邮件程序,接受订单和用户对象来填写邮件。今天我发现SyliusCoreBundle中有一个Mailer,它根本没有发送任何电子邮件。

手动调用SwiftMailer发送电子邮件就好了 - 它甚至会在开发环境中将其发送到config_dev.yml中定义的开发人员电子邮件地址。

这给我带来两个问题:

  1. Sylius Mailer怎么可能不像它应该的那样运作?
  2. 如果订单完成或用户注册了新帐户,我怎样才能最好地添加自己的邮件功能?
  3. 我看过“How to override Sylius email system”,它提供了第二个问题的潜在解决方案,想知道这是否可行。

    编辑:我正在使用Sylius 0.10.0x  似乎sylius.checkout.finalize.complete被触发,但此时它从不发送邮件。我在其他地方手动调用时会这样做:

    xxx.listener.order.confirmation:
        class: Xxx\Bundle\CoreBundle\EventListener\OrderListener
        arguments:
            - @xxx.mailer
        tags:
            - { name: kernel.event_listener, event: sylius.checkout.finalize.complete, method: processOrderConfirmation }
    

3 个答案:

答案 0 :(得分:1)

我试图先弄清楚同样的事情然后意识到,假设你想要点击确认监听器,我需要定义参数

sylius.email.order_confirmation.template

sylius.email.order_confirmation.from_email

在Sylius / Bundle / CoreBundle / Resources / config / mailer / order_confirmation_mailer.xml中使用,但从未定义过。欢迎电子邮件的类似要求。希望这有帮助!

答案 1 :(得分:1)

查看loadEmailsConfiguration()类中的SyliusCoreExtension方法(下面复制)。它会在注册之前检查您是否已启用电子邮件侦听器并正确配置它。

// src/Sylius/Bundle/CoreBundle/DependencyInjection/SyliusCoreExtension.php

protected function loadEmailsConfiguration(array $config, ContainerBuilder $container, XmlFileLoader $loader)
{
    foreach ($this->emails as $emailType) {
        $loader->load('mailer/'.$emailType.'_mailer.xml');

        $fromEmail = isset($config[$emailType]['from_email']) ? $config[$emailType]['from_email'] : $config['from_email'];
        $container->setParameter(sprintf('sylius.email.%s.from_email', $emailType), array($fromEmail['address'] => $fromEmail['sender_name']));
        $container->setParameter(sprintf('sylius.email.%s.template', $emailType), $config[$emailType]['template']);

        if ($config['enabled'] && $config[$emailType]['enabled']) {
            $loader->load('mailer/'.$emailType.'_listener.xml');
        }
    }
}

尝试将此添加到您的config.yml以使其正常工作:

sylius_core:
    emails:
        enabled: true
        order_confirmation:
            enabled: true
            template: FooBundle:Checkout/Email:orderConfirmation.html.twig
            from_email: { address: foo@bar.com, sender_name: Foo Bar }

注意,如果你想使用自己的模板,你应该从Sylius的orderConfirmation.html.twig扩展。 Sylius的TwigSwiftMailer邮件程序类需要模板中的subjectbody_textbody_html块。

答案 2 :(得分:0)

我还要补充一点,您可能还需要:

1)这在parameters.yml

sylius.mailer.transport: smtp
sylius.mailer.host: localhost
sylius.mailer.user: info@xxxxx.com
sylius.mailer.password:xxxxxxx

2)如果您已覆盖SyliusWebBundle,请将Resources / Frontend / Emails文件夹移至您的包中

3)上面显示的参考资料为config.yml

4)您的自定义customerWelcome.html.twig和orderConfirmation.html.twig,这也意味着将其中的所有必需消息翻译为所有必需的语言。