如何使用magento同时发送2份时事通讯成功电子邮件[复制]

我设法添加了第二封电子邮件选择字段,但我想知道如何向简报订阅者发送2封不同的电子邮件

目前,Magento默认只允许发送一个成功的电子邮件模板。我们可以通过设置此成功电子邮件模板

System  >  Configuration  > Newsletter  >  Success Email Template

你可以看到,它使用了一个下拉部分。这允许我们只为成功邮件设置一个电子邮件模板。因此,您需要将此部分更改为multiselct,以便您可以选择多个成功的电子邮件模板。你又需要重新编写Mage_NewsletterSubscriber ,以一次发送多个邮件模型类。

因此,让我们创建一个自定义模块,为我们这样做。我喜欢称这个模块为Rkt_TwoNlSuccess

模块的激活文件

档案: app\etc\modules\Rkt_TwoNlSuccess.xml

<config>
    <modules>
        <Rkt_TwoNlSuccess>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Newsletter />
            </depends>
        </Rkt_TwoNlSuccess>
    </modules>
</config>

注意我们的模块取决于Mage_Newletter模块。有必要。

System.xml文件

此文件定义系统配置定义和更改。我们使用此文件使成功的电子邮件模板字段多选而不是选择。

档案: app\code\local\Rkt\TwoNlSuccess\etc\system.xml

<config>
    <sections>
        <newsletter>
            <groups>
                <subscription>
                    <fields>
                        <success_email_template>
                            <label>Success Email Template</label>
                            <frontend_type>multiselect</frontend_type>
                            <source_model>adminhtml/system_config_source_email_template</source_model>
                            <sort_order>1</sort_order>
                            <show_in_default>1</show_in_default>
                            <show_in_website>1</show_in_website>
                            <show_in_store>1</show_in_store>
                        </success_email_template>
                    </fields>
                </subscription>
            </groups>
        </newsletter>
    </sections>
</config>

注意我们改变了前面的类型

<frontend_type>multiselect</frontend_type>

所以我们的第一部分结束了。现在是时候进行模型重写了

重写模型文件

我们需要重写sendConfirmationSuccessEmail()模型类中定义的方法Mage_Newsletter_Model_Subscriber。这很重要,因为默认代码允许我们只发送一封邮件。为此,您需要定义两个文件。

档案: app\code\local\Rkt\TwoNlSuccess\etc\config.xml

<config>
    <modules>
        <Rkt_Freepro>
            <version>1.0.0</version>
        </Rkt_Freepro>
    </modules>
    <global>
        <models>
            <newsletter>
                <rewrite>
                    <subscriber>Rkt_TwoNlSuccess_Model_Subscriber</subscriber>
                </rewrite>
            </newsletter>
        </models>
    </global>
</config>

这个文件告诉magento,我需要Mage_Newsletter_Model_Subscriber用我的自定义类重写该类Rkt_TwoNlsuccess_Model_Subscriber。因此,magento将处理此自定义模型类而不是默认类。这是Magento提供的极大灵活性。

档案: app\code\local\Rkt\TwoNlSuccess\Model\Subscriber.php

<?php
class Rkt_TwoNlSuccess_Model_Subscriber extends Mage_Newsletter_Model_Subscriber
{
    const XML_PATH_SUCCESS_EMAIL_TEMPLATE       = 'newsletter/subscription/success_email_template';
    const XML_PATH_SUCCESS_EMAIL_IDENTITY       = 'newsletter/subscription/success_email_identity';

    public function sendConfirmationSuccessEmail()
    {
        if ($this->getImportMode()) {
            return $this;
        }

        if(!Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_TEMPLATE)
           || !Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_IDENTITY)
        ) {
            return $this;
        }

        $translate = Mage::getSingleton('core/translate');
        /* @var $translate Mage_Core_Model_Translate */
        $translate->setTranslateInline(false);

        $email = Mage::getModel('core/email_template');

        $email_templates = explode(',', Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_TEMPLATE));
        $identity = Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_IDENTITY);

        foreach ($email_templates as $template) {
            $email->sendTransactional(
                $template,
                $identity,
                $this->getEmail(),
                $this->getName(),
                array('subscriber'=>$this)
            );
        }


        $translate->setTranslateInline(true);

        return $this;
    }

}

这里我们重写方法sendConfirmationSuccessEmail()。以下代码可以解决这个问题

$email_templates = Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_TEMPLATE);
        $identity = Mage::getStoreConfig(self::XML_PATH_SUCCESS_EMAIL_IDENTITY);

        foreach ($email_templates as $template) {
            $email->sendTransactional(
                $template,
                $identity,
                $this->getEmail(),
                $this->getName(),
                array('subscriber'=>$this)
            );
        }

此代码允许您发送任意数量的电子邮件。所以,如果您愿意,现在可以发送两封以上的成功电子邮件。

编辑

你设置need confirmYES。这就是实际问题。如果设置了这些值,那么Magento将向仅登录的客户发送成功邮件,这些客户正在尝试订阅简报。对于访客用户,它将始终发送确认邮件。

要为所有用户发送成功邮件,您需要设置need confirmNO

请注意,我的subscriber.php文件中有一个小错误。我修好了它并进行了测试。它适用于本地服务器。我在这里更新了这段代码。所以保存这个更新的代码app/code/local/Rkt/TwoNlSuccess/Model/Subscriber.php

相关文章

0 0 投票数
文章评分
订阅评论
提醒
0 评论
内联反馈
查看所有评论