LoginSignup
0
0

More than 5 years have passed since last update.

CS-Cart: デバッグ用にメールの送信先を固定する

Posted at

CS-Cartで開発時や検証時に、CS-Cartから送信されるメールを一箇所に送りたいことがある。ここではその実現方法を紹介する。

前提として、CS-CartのPHPフックを使うので、適当なAddonを作っておく。

使うフック

init.php
fn_register_hooks(
    'send_mail_pre'
);

フック関数の実装

func.php
/**
 * @param $mailer
 * @param $params
 * @param $area
 * @param $lang_code
 */
function fn_{アドオンID}_send_mail_pre($mailer, &$params, $area, $lang_code)
{
    $debugEmails = Registry::get('config.debug_email_to');

    if ($debugEmails === null or $debugEmails === []) {
        return; // デバッグモードではない場合
    }

    if (array_key_exists('to', $params)) {
        $params['to'] = $debugEmails;
    }
    if (array_key_exists('cc', $params)) {
        unset($params['cc']);
    }
}

送信先固定はconfig.local.phpに定義する

config.local.php
// メール送信先固定設定(コメントアウトすると固定解除)
$config['debug_email_to'] = [
    'debug@example.com',
];

もしくは、local_conf.phpに定義する。

local_conf.php
if ($_SERVER['SERVER_NAME'] === 'localhost') {
    // メール送信先固定設定
    $config['debug_email_to'] = [
        'developer@example.com',
    ];
}

送信先固定が効いているかを管理画面で確認できるようにする

ディスパッチのフックに噛んで、通知を表示する。

init.php
fn_register_hooks(
    'send_mail_pre',
    'before_dispatch'
);
func.php
function fn_myaddon_before_dispatch($controller, $mode, $action, $dispatch_extra, $area)
{
    fn_myaddon_warn_email_debug_mode();

    if ($controller === 'index' and $area === 'A') {
        fn_myaddon_info_email_debug_mode();
    }
}


function fn_myaddon_warn_email_debug_mode()
{
    $isDebugMode = defined('DEBUG_MODE') and DEBUG_MODE === true;

    if ($isDebugMode and fn_myaddon_is_email_debug_mode() === false) {
        fn_set_notification('E', "警告", "全てのメール通知は実ユーザに送信されてしまいます。local_conf.phpに`debug_email_to`を設定し、メール送信先を固定してください。");
    }
}

function fn_myaddon_info_email_debug_mode()
{
    $debugEmails = Registry::get('config.debug_email_to');
    if (fn_myaddon_is_email_debug_mode()) {
        $filename = defined('DEBUG_MODE') ? 'local_conf.php' : 'config.local.php';
        fn_set_notification('W', "検証モード", sprintf('メール送信検証のため、全てのメール通知は%sに固定送信されます。この設定を変更するには %s の `debug_email_to` を変更してください。', json_encode($debugEmails), $filename));
    }
}

function fn_myaddon_is_email_debug_mode()
{
    $debugEmails = Registry::get('config.debug_email_to');
    if ($debugEmails === null or $debugEmails === []) {
        return false;
    }
    return true;
}
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0