1

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

现在我假设根本不支持这一点,我开始编写自己的邮件程序,它接受订单和用户对象来填写邮件。今天我发现其中有一个 Mailer,SyliusCoreBundle它根本无法发送任何电子邮件。

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

这给我带来了两个问题:

  1. Sylius Mailer 怎么可能无法正常运行?
  2. 当订单完成或用户注册新帐户时,如何最好地添加自己的邮件功能?

我看过“如何覆盖 Sylius 电子邮件系统”,它为第二个问题提供了一个潜在的解决方案,想知道这是否是可行的方法。

编辑:我正在使用 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 }
4

3 回答 3

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邮件程序类在您的模板中需要一个subject,body_text和块。body_html

于 2014-07-01T02:39:13.347 回答
1

我之前试图弄清楚同样的事情,然后意识到,假设您希望触发订单确认侦听器,我需要定义参数

sylius.email.order_confirmation.template

sylius.email.order_confirmation.from_email

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

于 2014-06-24T04:08:23.873 回答
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,这也意味着将其中的所有必需消息翻译成所有必需的语言。

于 2015-05-15T17:28:59.560 回答