4

新しい顧客が登録されるたびに、ストアの連絡先メール アドレスにメール通知を送信したいと考えています。

どのような種類の拡張機能も購入したくないので、これを行うのを手伝ってください

前もって感謝します

4

7 に答える 7

7

ベスト プラクティスは、Magento のイベント システムを使用することです。

app/etc/modules/Your_Module.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Your_Module>
            <active>true</active>
            <codePool>local</codePool>
        </Your_Module>
    </modules>
</config>

アプリ/コア/ローカル/あなたの/モジュール/etc/config.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <global>
        <models>
            <your_module>
                <class>Your_Module_Model</class>
            </your_module>
        </models>
    </global>
    <frontend>
        <events>
            <customer_save_after>
                <observers>
                    <your_module>
                        <type>model</type>
                        <class>your_module/observer</class>
                        <method>customerSaveAfter</method>
                    </your_module>
                </observers>
            </customer_save_after>
        </events>
    </frontend>
</config>

アプリ/コード/ローカル/あなたの/モジュール/モデル/Observer.php

<?php

class Your_Module_Model_Observer
{
    public function customerSaveAfter(Varien_Event_Observer $o)
    {
        //Array of customer data
        $customerData = $o->getCustomer()->getData();

        //email address from System > Configuration > Contacts
        $contactEmail = Mage::getStoreConfig('contacts/email/recipient_email');

        //Mail sending logic here.
        /*
           EDIT: AlphaCentauri reminded me - Forgot to mention that
           you will want to test that the object is new. I **think**
           that you can do something like:
        */
        if (!$o->getCustomer()->getOrigData()) {
            //customer is new, otherwise it's an edit 
        }
    }
}

編集:コードの編集に注意してください-AlphaCentauriが指摘したように、customer_save_afterイベントは挿入と更新の両方で発生します。条件付きロジックにより、_origData彼のメーリング ロジックを組み込むことができるはずです。_origData になりますnull

于 2012-07-03T13:57:34.967 に答える
5

これは、Magento イベント/オブザーバー システムで完全に実行できます。まず、モジュールを登録します。

app/etc/modules/Namespace_Modulename.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Namespace_Modulename>
            <active>true</active>
            <codePool>local</codePool>
        </Namespace_Modulename>
    </modules>
</config>

そのための構成ファイルを作成するよりも。

アプリ/コード/ローカル/名前空間/モジュール名/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Namespace_Modulename>
            <version>0.0.1</version>
        </Namespace_Modulename>
    </modules>
    <frontend>
        <events>
            <customer_register_success>
                <observers>
                    <unic_observer_name>
                        <type>model</type>
                        <class>unic_class_group_name/observer</class>
                        <method>customerRegisterSuccess</method>
                    </unic_observer_name>
                </observers>
            </customer_register_success>
        </events>
        <helpers>
            <unic_class_group_name>
                <class>Namespace_Modulename_Helper</class>
            </unic_class_group_name>
        </helpers>
    </frontend>
    <global>
        <models>
            <unic_class_group_name>
                <class>Namespace_Modulename_Model</class>
            </unic_class_group_name>
        </models>
        <template>
            <email>
                <notify_new_customer module="Namespace_Modulename">
                    <label>Template to notify administrator that new customer is registered</label>
                    <file>notify_new_customer.html</file>
                    <type>html</type>
                </notify_new_customer>
            </email>
        </template>
    </global>
</config>

ここにいくつかのことが起こりました:

  1. 新しいオブザーバーは、ノードのイベントcustomer_register_success(の 335 行目でディスパッチされますMage_Customer_AccountController) で起動するように登録されましたfrontend/eventscustomer_save_after顧客が登録されたときだけでなく、顧客が保存されるたびに最後の 1 つが起動するため、を使用するよりも優れています。
  2. 新しい電子メール テンプレートがglobal/template/emailノードに登録されました。カスタムメールを送信できるようにするため。

次に、電子メール テンプレート (ファイル) を作成します。

app/locale/en_US/template/notify_new_customer.html

Congratulations, a new customer has been registered:<br />
Name: {{var name}}<br />
Email: {{var email}}<br />
...<br />

その後、observer メソッドを定義します。

アプリ/コード/ローカル/名前空間/モジュール名/モデル/Observer.php

class Namespace_Modulename_Model_Observer
{
    public function customerRegisterSuccess(Varien_Event_Observer $observer)
    {
        $emailTemplate  = Mage::getModel('core/email_template')
            ->loadDefault('notify_new_customer');
        $emailTemplate
            ->setSenderName(Mage::getStoreConfig('trans_email/ident_support/name'))
            ->setSenderEmail(Mage::getStoreConfig('trans_email/ident_support/email'))
            ->setTemplateSubject('New customer registered');
        $result = $emailTemplate->send(Mage::getStoreConfig('trans_email/ident_general/email'),(Mage::getStoreConfig('trans_email/ident_general/name'), $observer->getCustomer()->getData());
    }
}

編集: @bemarks が指摘したように、チェックアウト時に顧客が登録されている場合、このソリューションは機能しません。この動作の解決策については、こちらで説明しています。_origDataしかし、 @bemarks が提案した機能を使用する方が良いと思います。したがって、彼の答えをガイドラインとして使用して、必要なものを達成してください。

便利なリンク:

于 2012-07-03T16:41:26.410 に答える
1

イベントベースのアプローチの代わりに、別のAPIベースのスクリプトを実行して、新しい(または更新された)顧客を取得して電子メールで送信することもできます。1日1回のリストを取得することが望ましい場合とそうでない場合があります。すべての顧客へのメールよりも。

利点:

  • Magentoストアに何もインストールされていません
  • 新規/更新された顧客の操作に余分な処理やネットワーク遅延を追加しません
  • 1日のすべてのメールを1つのメールにまとめる機会

これが私が最近使用した例です。これはほぼ正確にあなたが望むものであり、それが私の目を引いた理由です。コードはこちらから入手できます

$client =
   new SoapClient('http://www.yourstore.com/magento/api/soap?wsdl');
 $session = $client->login('TEST_USER', 'TEST_PASSWORD');

 $since = date("Y-m-d", strtotime('-1 day'));
 // use created_at for only new customers
 $filters = array('updated_at' => array('from' => $since)); 


 $result = $client->call($session, 'customer.list', array($filters));

 $email = "New customers since: $since\n";

 foreach ($result as $customer) {
         $email .= $customer["firstname"] ." ".
                     $customer["lastname"] . ", " .
                     $customer["email"] . "\n";
 }

mail("customer-manager@yourstore.com", "Customer report for: $since", $email);
于 2012-07-04T01:38:47.467 に答える
0

拡張できますMage/Customer/Resource/Customer.php-保護された機能_beforeSave(Varien_Object $customer)

if ($result) {
   throw Mage::exception('Mage_Customer', Mage::helper('customer')->__('This customer email already exists'), Mage_Customer_Model_Customer::EXCEPTION_EMAIL_EXISTS);
} else {
    // SEND EMAIL - Use a custom template 
}
于 2012-07-03T12:56:48.653 に答える
0

カスタマイズ可能な電子メール テンプレートを含む、すべての新規顧客登録の通知電子メールを取得するこの拡張機能を試すことができます。http://www.magentocommerce.com/magento-connect/customer-registration-notification.html

于 2015-07-24T10:42:09.393 に答える
0

これは、新しい顧客の電子メールを管理者に送信し、
ファイル
\app\code\core\Mage\Customer\Model\Customer.php
をローカルに上書きするためのコードです
\app\code\local\Mage\Customer\Model\Customer.php

以下の関数を置き換えます

protected function _sendEmailTemplate($template, $sender, $templateParams = array(), $storeId = null)
    {
        /** @var $mailer Mage_Core_Model_Email_Template_Mailer */
        $mailer = Mage::getModel('core/email_template_mailer');
        $emailInfo = Mage::getModel('core/email_info');
        $emailInfo->addTo($this->getEmail(), $this->getName());
        $mailer->addEmailInfo($emailInfo);

        // Set all required params and send emails
        $mailer->setSender(Mage::getStoreConfig($sender, $storeId));
        $mailer->setStoreId($storeId);
        $mailer->setTemplateId(Mage::getStoreConfig($template, $storeId));
        $mailer->setTemplateParams($templateParams);
        $mailer->send();
        return $this;
    }

protected function _sendEmailTemplate($template, $sender, $templateParams = array(), $storeId = null)
    {
        /** @var $mailer Mage_Core_Model_Email_Template_Mailer */
        $mailer = Mage::getModel('core/email_template_mailer');
        $emailInfo = Mage::getModel('core/email_info');
        $emailInfo->addTo($this->getEmail(), $this->getName());

        if($template="customer/create_account/email_template"){

            $emailInfo->addBcc(Mage::getStoreConfig('trans_email/ident_general/email'), $this->getName());
              //Add email address in Bcc you want also to send
        }

        $mailer->addEmailInfo($emailInfo);


        // Set all required params and send emails
        $mailer->setSender(Mage::getStoreConfig($sender, $storeId));
        $mailer->setStoreId($storeId);
        $mailer->setTemplateId(Mage::getStoreConfig($template, $storeId));
        $mailer->setTemplateParams($templateParams);
        $mailer->send();
        return $this;
    }
于 2016-11-25T11:05:13.257 に答える