新しい顧客が登録されるたびに、ストアの連絡先メール アドレスにメール通知を送信したいと考えています。
どのような種類の拡張機能も購入したくないので、これを行うのを手伝ってください
前もって感謝します
新しい顧客が登録されるたびに、ストアの連絡先メール アドレスにメール通知を送信したいと考えています。
どのような種類の拡張機能も購入したくないので、これを行うのを手伝ってください
前もって感謝します
ベスト プラクティスは、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
。
これは、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>
ここにいくつかのことが起こりました:
customer_register_success
(の 335 行目でディスパッチされますMage_Customer_AccountController
) で起動するように登録されましたfrontend/events
。customer_save_after
顧客が登録されたときだけでなく、顧客が保存されるたびに最後の 1 つが起動するため、を使用するよりも優れています。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 が提案した機能を使用する方が良いと思います。したがって、彼の答えをガイドラインとして使用して、必要なものを達成してください。
便利なリンク:
イベントベースのアプローチの代わりに、別のAPIベースのスクリプトを実行して、新しい(または更新された)顧客を取得して電子メールで送信することもできます。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);
拡張できます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
}
カスタマイズ可能な電子メール テンプレートを含む、すべての新規顧客登録の通知電子メールを取得するこの拡張機能を試すことができます。http://www.magentocommerce.com/magento-connect/customer-registration-notification.html
これは、新しい顧客の電子メールを管理者に送信し、
ファイル\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;
}