Edited at

EC-CUBE 2.13.5で、会員が登録内容を変更した時にメール送信するカスタマイズを書いてみた

More than 3 years have passed since last update.


あらまし

ユーザが会員登録情報を変更した時に、確認の意味も込めて完了メールを送りたい。

ついでに会員登録情報が変更されたことを管理者側で検知したい。

ぐぐってみたところ情報が古い上に怪しく、EC-CUBEの挙動を参考に書くことに。

当方の環境ではカスタマイズする可能性のあるものを

全てgit管理している(上に深く考えていない、merge上等)為、

差分が見やすいLC_Page_Mypage_Change.php に直接記述している。

人or運用ルールによっては、下記を編集する方がいいだろう。

{root}/data/class_extends/page_extends/mypage/LC_Page_Mypage_Change_Ex.php


追加

{root}/data/class/pages/mypage/LC_Page_Mypage_Change.php

130行目に以下。

class LC_Page_Mypage_Change の function action()の処理にて、

後述する自作関数lfSendChangeMailに渡す。

// 会員登録と完了画面

case 'complete':
$this->arrErr = SC_Helper_Customer_Ex::sfCustomerMypageErrorCheck($objFormParam);

// 入力エラーなし
if (empty($this->arrErr)) {
// 会員情報の登録
$this->lfRegistCustomerData($objFormParam, $customer_id);

/** ここから追加 **/
// 関数に渡す情報を揃える
$objDb = new SC_Helper_DB_Ex();
$CONF = $objDb->sfGetBasisData();
$c_name = filter_input(INPUT_POST, 'name01') . filter_input(INPUT_POST, 'name02');
// 会員情報変更のお知らせを送信
// 他の処理ではPOSTをfilter_inputでラップしてないあたり修羅の国やでぇ
$this->lfSendChangeMail($CONF, filter_input(INPUT_POST, 'email'), $c_name);
/** ここまで追加 **/

//セッション情報を最新の状態に更新する
$objCustomer->updateSession();

// 完了ページに移動させる。
SC_Response_Ex::sendRedirect('change_complete.php');
}
break;

同じく、194行目に以下。

class LC_Page_Mypage_Changeの末尾に関数を追加。

    /**

* 登録内容変更お知らせメールを送信する。
*
* @param array $CONF 店舗基本情報の配列
* @param string $email 送信先メールアドレス
* @param string $customer_name 送信先氏名
* @return void
*
*/

public function lfSendChangeMail(&$CONF, $email, $customer_name)
{
// 変更お知らせメール送信
$objMailText = new SC_SiteView_Ex(false);
$objMailText->setPage($this);
$objMailText->assign('customer_name', $customer_name);
$toCustomerMail = $objMailText->fetch('mail_templates/mypage_change.tpl');

$objHelperMail = new SC_Helper_Mail_Ex();
$objHelperMail->setPage($this);

// メール送信オブジェクトによる送信処理
$objMail = new SC_SendMail_Ex();
$objMail->setItem(
'', //宛先
$objHelperMail->sfMakeSubject('登録内容を変更するのもアイカツ!だね!'),
$toCustomerMail, //本文
$CONF['email03'], //配送元アドレス
$CONF['shop_name'], // 配送元名
$CONF['email03'], // reply to
$CONF['email04'], //return_path
$CONF['email04'], // errors_to
$CONF['email01'] // Bcc
);
$objMail->setTo($email, $customer_name . ' 様');
$objMail->sendMail();

return;
}

{使用中のテンプレートパス}/mail_templates/mypage_change.tpl を作成。

<!--{$customer_name}-->

オケオケオッケー