EC-CUBE4|メールテンプレートを追加する

更新日
2022年11月22日
作成日
2021年9月3日
この記事はEC-CUBE バージョン 4.0.6-p1 を使用して執筆しています。

EC-CUBE4には初期設定として、dtb_mail_template テーブルに以下のメールテンプレートが用意されています。

  • 注文受付メール
  • 会員仮登録メール
  • 会員本登録メール
  • 会員退会メール
  • 問合受付メール
  • パスワードリセット
  • パスワードリマインダー
  • 出荷通知メール

この中でも受注管理からメールを送信する時に選択できるメールテンプレートは注文受付メール(ご注文受付時に自動返信されるメール)のみとなります。

自動返信とは別にご注文の正式決定メール(ご注文承諾メール)を選択できるようにしたいと思い「メール設定 eccube 追加」と検索して調べてみましたところ、以下の記事がとても参考になりました。

私と同じようにEC-CUBE4にメールテンプレートを作成したい方は、上記の記事をまずはご覧いただきましてその上でこの記事もご覧いただきますと幸いです。

以下実際に行ったことを記述していきます。

dtb_mail_templateテーブルにテンプレートを追加する

PHPMyAdminにログインしてdtb_mail_templateテーブルを開くと、次のようなフィールドを見ることができます。

dtb_mail_templateテーブルの内容
dtb_mail_templateテーブルの内容

今回は「ご注文承諾メール」を新規テンプレートとして追加することが目的ですので、phpMyAdminの上部メニュー「挿入」を押して項目を追加します。

dtb_mail_templateテーブルへの挿入
dtb_mail_templateテーブル挿入した画面

追加する項目は以下の通りです。

keyvalue
id
creater_idNULLにチェック
nameご注文承諾メール
file_nameMail/order-accept.twig
mail_subjectご注文確定のお知らせ
create_date
upadate_date
discriminator_typemailtemplate
dtb_mail_template入力例
dtb_mail_template入力例

nameにはテンプレートの名前となりますので、管理画面でわかりやすい名前をつけます。

file_nameはEC-CEUBE4に適用しているテーマディレクトリに入れるTwigテンプレートの名前となります。通常ではMailディレクトリ以下に設置するのでしょう。

mail_subjectはテンプレートを呼び出した時に件名に反映される文字列です。

discriminator_typeはmailtemplateとします。

dtb_mail_templateに追加された図
dtb_mail_templateに追加された図

id:21 として設定されていますので、この21の数字は忘れずに覚えておきます。

以上でphpMyAdmin側の追加は完了です。

Twigテンプレートを追加する

phpMyAdminにて追加したfile_nameに指定したディレクトリ/ファイル名.twigを設置します。設置するディレクトリは以下となります。

/app/template/現在有効化しているテンプレート/Mail/order-accept.twig

order-accept.twigの記載内容については今回は記述しませんが、注文受付メール(order.twig)を参考にメール本文を作成します。

ここまでの設定が管理すると、店舗設定 > メール設定 画面のテンプレート編集からテンプレートを呼び出すことが可能になります。

店舗設定 > メール設定に新規テンプレートが追加できた!

しかし、これだけでは受注管理 > 受注一覧 > 受注内容からメール作成(受注管理 > メール通知)から呼び出せません。

メール設定 eccube 追加」と検索して出てくる記事の多くは、EC-CUBEコアファイルを編集する方法をご紹介されていましたが、先ほど紹介しました、「EC-CUBE4.0.5 受注登録のメールテンプレートを追加・選択するカスタマイズ」の記事はコアファイルを触らずにカスタマイズファイルの仕組みを利用されていましたので、私もその方法を採用することにしました。

定数定義用のファイルを追加する

/app/config/eccube/packages/customize.yamlというファイルを作成し設置します。

parameters:
    eccube_order_accept_mail_template_id: 21

eccube_order_accept_mail_template_idの定数として 21を指定します。

この数字はdtb_mail_templateにて追加した項目のid番号です。
(ご自身の環境のid番号に合わせて編集してください)

カスタマイズ用のExtensionを追加する

/app/Customize/Form/Extension/OrderMailTypeExtension.php というファイルを作成し設置します。

EC-CUBE4.0.5 受注登録のメールテンプレートを追加・選択するカスタマイズ」の記事をほとんど利用させていただきました。ソースは以下となります。

<?php

/*
 * This file is part of EC-CUBE
 *
 * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved.
 *
 * http://www.ec-cube.co.jp/
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Customize\Form\Extension;

use Doctrine\ORM\EntityRepository;
use Eccube\Common\EccubeConfig;
use Eccube\Form\Type\Admin\OrderMailType;
use Eccube\Form\Type\Master\MailTemplateType;
use Eccube\Form\Validator\TwigLint;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints as Assert;

class OrderMailTypeExtension extends AbstractTypeExtension
{
    /**
     * @var EccubeConfig
     */
    protected $eccubeConfig;

    /**
     * MailType constructor.
     *
     * @param EccubeConfig $eccubeConfig
     */
    public function __construct(
        EccubeConfig $eccubeConfig
    ) {
        $this->eccubeConfig = $eccubeConfig;
    }

    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $templateIds = [
            $this->eccubeConfig['eccube_order_mail_template_id'],
            $this->eccubeConfig['eccube_order_accept_mail_template_id']
        ];

        $builder
            ->add('template', MailTemplateType::class, [
                'required' => false,
                'mapped' => false,
                'query_builder' => function (EntityRepository $er) use ($templateIds) {
                    return $er->createQueryBuilder('mt')
                        ->andWhere('mt.id IN (:id)')
                        ->setParameter(':id', $templateIds, \Doctrine\DBAL\Connection::PARAM_INT_ARRAY)
                        ->orderBy('mt.id', 'ASC');
                },
            ])
        ;
    }

    /**
     * {@inheritdoc}
     */
    public function getExtendedType()
    {
        return OrderMailType::class;
    }

}

以上の作業が完了し、すべてのファイルが設置(アップロード)されている状態で、受注管理 > 受注一覧 > 受注内容からメール作成(受注管理 > メール通知)から呼び出しすることが可能となりました。

EC-CUBE4 受注管理から追加したメールテンプレートを呼び出す図

以上ですが、今回は参考サイトを見様見真似で作業を行い、注文承諾メールを追加しました。

メールテンプレートをさらに追加するには?

今回参考にさせていただいたサイトでは、$templateIdsに配列を入れる手法を取られていましたので、さらにメールテンプレートを追加したいという要望にも対応ができそうだと思いました。

例えば注文承諾メールを追加した状態では以下のソースコードとなりますが、

$templateIds = [
    $this->eccubeConfig['eccube_order_mail_template_id'],
    $this->eccubeConfig['eccube_order_accept_mail_template_id']
];

お問い合わせ返信メール、を追加したい場合は

  1. dtb_mail_templateテーブルにテンプレートを追加する
  2. Twigテンプレートを追加する
  3. 定数定義用のファイルを追加する
  4. カスタマイズ用のExtensionを追加する

の流れの作業は行うのですが、4のカスタマイズ用のExtensionを追加する、の箇所が、以下のように追記するだけでよくなりますので、メンテナンスも楽になりそうです。

$templateIds = [
    $this->eccubeConfig['eccube_order_mail_template_id'],
    $this->eccubeConfig['eccube_order_accept_mail_template_id']
    $this->eccubeConfig['eccube_contact_mail_template_id']
];

以上、備忘録を兼ねまして記事を執筆しました。

参考にさせていただいたサイトに感謝申し上げます。