首页 文章

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

提问于
浏览
1

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

现在我假设那里根本没有支持,我开始编写自己的邮件程序,接受订单和用户对象来填写邮件 . 今天我发现 SyliusCoreBundle 中有一个Mailer,根本没有发送任何电子邮件 .

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

这给我带来两个问题:

  • 怎么可能Sylius梅勒不能像它应该的那样运作?

  • 如果订单完成或用户注册了新帐户,我如何才能最好地添加自己的邮件功能?

我看过“How to override Sylius email system”,它提供了第二个问题的潜在解决方案,想知道这是否可行 .

Edit: 我正在使用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)这在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,这也意味着将其中的所有必需消息转换为所有必需的语言 .

  • 1

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

    // 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 块 .

  • 1

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

    sylius.email.order_confirmation.template
    

    sylius.email.order_confirmation.from_email
    

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

相关问题