EC-CUBE Lab
produced by Cajiya
EC-CUBEに関するカスタマイズ方法やトラブルへの対処方法を発信

商品毎に購入後メールを変更するカスタマイズ方法

公開日: 2025年09月23日 | 更新日: 2025年11月01日
メール通知 表示/テンプレート調整 EC-CUBE 4系全般 Twig改修

要望や症状

Aの商品を購入したお客様にはA専用の購入後メールを、Bの商品を購入したお客様にはB専用の購入後メールを送信し、商品に応じてメール内容を自動的に振り分けたいというケースがあります。

理由や原因

EC-CUBE標準仕様では、注文完了時のメールテンプレートは全商品共通となっています。商品毎にメール内容を変更するには、メールテンプレート内で商品情報を判定し、条件分岐によって内容を切り替える必要があります。

メール送信処理は src/Eccube/Service/MailService.php で行われ、メールテンプレートは src/Eccube/Resource/template/default/Mail/order.twig を使用します。テンプレート内では注文商品情報にアクセスすることが可能です。

解決策

メールテンプレート内で商品コードまたは商品名を判定し、商品毎に異なる内容を表示する方法をご説明します。

1. メールテンプレートのカスタマイズ

以下のコードを app/template/default/Mail/order.twig に配置します。

<!-- app/template/default/Mail/order.twig -->
{% extends "@default/Mail/mail_base.twig" %}

{% block main %}
    <h1>ご注文ありがとうございます</h1>
    
    {% for OrderItem in Order.OrderItems %}
        {% if OrderItem.Product %}
            {% if OrderItem.product_code == 'PRODUCT_A' %}
                {# A商品専用のメール内容 #}
                <h2>商品Aをご購入いただきありがとうございます</h2>
                <p>商品A専用の特別なメッセージです。</p>
                <p>商品Aに関する特別な使用方法やサポート情報をお知らせします。</p>
                
            {% elseif OrderItem.product_code == 'PRODUCT_B' %}
                {# B商品専用のメール内容 #}
                <h2>商品Bをご購入いただきありがとうございます</h2>
                <p>商品B専用の特別なメッセージです。</p>
                <p>商品Bに関する詳細な設定方法をご案内いたします。</p>
                
            {% else %}
                {# その他の商品の場合 #}
                <h2>ご購入ありがとうございます</h2>
                <p>標準的なお礼メッセージです。</p>
            {% endif %}
            
            <div class="product-info">
                <p>商品名: {{ OrderItem.product_name }}</p>
                <p>商品コード: {{ OrderItem.product_code }}</p>
                <p>数量: {{ OrderItem.quantity }}</p>
                <p>価格: {{ OrderItem.price_inc_tax|price }}</p>
            </div>
        {% endif %}
    {% endfor %}
    
    {# 共通の注文情報 #}
    <h3>ご注文内容</h3>
    <p>注文番号: {{ Order.order_no }}</p>
    <p>注文日時: {{ Order.order_date|date_day }}</p>
    <p>合計金額: {{ Order.total|price }}</p>
{% endblock %}

2. 商品名による判定パターン

商品コードではなく商品名で判定したい場合は、以下のような記述が可能です。

{% if OrderItem.product_name matches '/特定商品A/' %}
    {# 商品名に「特定商品A」が含まれる場合 #}
{% elseif OrderItem.product_name matches '/特定商品B/' %}
    {# 商品名に「特定商品B」が含まれる場合 #}
{% endif %}

3. より高度なカスタマイズ(MailServiceの拡張)

商品毎に完全に異なるメールテンプレートを使用したい場合は、MailServiceを拡張する方法もあります。

// app/Customize/Service/CustomMailService.php
<?php

namespace Customize\Service;

use Eccube\Service\MailService;
use Eccube\Entity\Order;

class CustomMailService extends MailService
{
    public function sendOrderMail(Order $Order)
    {
        $templateName = $this->getTemplateByOrder($Order);
        
        // 商品に応じてテンプレートを選択
        $message = $this->createMessage($templateName, [
            'Order' => $Order,
        ]);
        
        return $this->mailer->send($message);
    }
    
    private function getTemplateByOrder(Order $Order): string
    {
        foreach ($Order->getOrderItems() as $orderItem) {
            if ($orderItem->getProduct()) {
                $productCode = $orderItem->getProduct()->getCode();
                
                if ($productCode === 'PRODUCT_A') {
                    return 'Mail/order_product_a.twig';
                } elseif ($productCode === 'PRODUCT_B') {
                    return 'Mail/order_product_b.twig';
                }
            }
        }
        
        return 'Mail/order.twig'; // デフォルトテンプレート
    }
}

免責事項

本記事に掲載しているコードや手順は、執筆時点での情報および特定の環境下での動作確認に基づいています。 EC-CUBEのバージョン、サーバー環境、導入済みプラグインとの競合などにより、予期せぬ不具合が発生する可能性があります。

本記事の内容を実行した結果、生じた損害(データの消失、サイトの停止、機会損失など)について、当サイトおよび管理者は一切の責任を負いかねます。 実装にあたっては、必ずバックアップを取得し、検証環境(テスト環境)での動作確認を行った上で、ご自身の責任において実施してください。

この記事は参考になりましたか?

著者プロフィール: 株式会社カジヤ

当社はWeb業界の専門家として、培った経験や技術、自社事業を通して得た知見を土台に、 お客様の事業の成長を後押しすることを提供価値として活動する、Web事業の成長支援会社です。 EC-CUBE公式のパートナー制度「EC-CUBE インテグレートパートナー」に登録してしており、上位11%にあたる「ゴールドランク」に認定された実績があり、新しい通販サイトの構築から、カスタマイズ、リニューアルまで幅広く対応します。

メール通知 の関連記事

メール通知 通知/コミュニケーション EC-CUBE 4系全般
メール件名のショップ名を英語表記に変更する方法

EC-CUBE 4系で、メール件名の先頭に自動挿入される店舗名を英語表記に変更したい場合があります。...

👍 0 / 👎 0 2025年10月12日
メール通知 メール送信不具合 EC-CUBE 4.2系 / Symfony 5.4
XServerでのメール送信設定における環境変数設定エラーの解消方法

XServerでメール送信を行う際に、MAILER_URL環境変数を設定してもメールが送信されない問...

👍 0 / 👎 0 2025年10月12日
メール通知 メール送信不具合 EC-CUBE 4系全般
メールの内容を変更したのに反映されない場合の対応

EC-CUBEから送信されるメールの内容を、Tiwgを編集して変更したにもかかわらず、実際に送信され...

👍 0 / 👎 0 2025年09月24日

表示/テンプレート調整 の関連記事

商品 表示/テンプレート調整 EC-CUBE 4系全般
会員のみに商品価格を表示するカスタマイズ方法

EC-CUBEで会員専用サイトや卸売りサイトを構築する際、商品価格をログイン前は非表示にし、会員ログ...

👍 0 / 👎 0 2025年10月12日
受注管理(管理画面) 表示/テンプレート調整 EC-CUBE 4系全般
受注一覧ページで会員番号を表示するカスタマイズ方法

管理画面の受注一覧ページで、注文者の会員番号を表示したい場合があります。 ### 表示要件 ...

👍 0 / 👎 0 2025年10月12日
商品カテゴリ・一覧・検索 表示/テンプレート調整 EC-CUBE 4系全般
カテゴリーの一覧から、商品が紐づいていないカテゴリーのみを非表示にするカスタマイズ方法

子カテゴリー一覧を表示する際に、商品が登録されていないカテゴリーも表示されてしまう問題が発生します。...

👍 0 / 👎 0 2025年10月12日
商品カテゴリ・一覧・検索 表示/テンプレート調整 EC-CUBE 4系全般
特定カテゴリのでのみHTMLを表示するTwigのカスタマイズ方法

特定のカテゴリの商品一覧ページでのみHTMLやメッセージを表示したいが、商品一覧のTwigテンプレー...

👍 0 / 👎 0 2025年10月12日
管理画面共通 表示/テンプレート調整 EC-CUBE 4系全般
管理画面左上のEC-CUBEロゴをカスタマイズする方法

管理画面の左上に表示されているEC-CUBEのデフォルトロゴを、自社のロゴに変更したいと考えています...

👍 0 / 👎 0 2025年10月12日

EC-CUBE 4系全般 の関連記事

商品 データ不整合 EC-CUBE 4系全般
EC-CUBEで取り扱い終了商品の削除ができない理由と対応方法

EC-CUBEでは、取り扱いを終了した商品を削除したい場合に、削除ができない状態になることがあります...

👍 1 / 👎 0 2025年10月12日
インストール・セットアップ EC-CUBE 4系全般 設定変更
EC-CUBEサイトのドメイン変更時の設定変更方法

EC-CUBEで構築したサイトを新しいドメインで公開する際に、どのような設定変更が必要かわからない場...

👍 0 / 👎 0 2025年10月12日
メール通知 通知/コミュニケーション EC-CUBE 4系全般
メール件名のショップ名を英語表記に変更する方法

EC-CUBE 4系で、メール件名の先頭に自動挿入される店舗名を英語表記に変更したい場合があります。...

👍 0 / 👎 0 2025年10月12日
フロント共通 機能不動作 EC-CUBE 4系全般
CloudFrontを利用時にリンクのドメインがEC2のパブリックDNSになってしまう問題の解決方法

EC-CUBE 4.2をAWS ECS on EC2上で構築し、CloudFrontをCDNとして利...

👍 1 / 👎 0 2025年10月12日
サイト全体 500エラー EC-CUBE 4系全般
EC-CUBEでメモリ不足エラーが発生した場合の対処方法

EC-CUBEの運用中に以下のようなメモリ不足エラーが発生することがあります。 ### エラー...

👍 1 / 👎 0 2025年10月12日

Twig改修 の関連記事

商品 表示/テンプレート調整 EC-CUBE 4系全般
会員のみに商品価格を表示するカスタマイズ方法

EC-CUBEで会員専用サイトや卸売りサイトを構築する際、商品価格をログイン前は非表示にし、会員ログ...

👍 0 / 👎 0 2025年10月12日
受注管理(管理画面) 表示/テンプレート調整 EC-CUBE 4系全般
受注一覧ページで会員番号を表示するカスタマイズ方法

管理画面の受注一覧ページで、注文者の会員番号を表示したい場合があります。 ### 表示要件 ...

👍 0 / 👎 0 2025年10月12日
帳票 帳票/出力 EC-CUBE 4系全般
納品書にお客様からのお問い合わせを表示するカスタマイズ方法

EC-CUBE 4.2.2のデフォルトの納品書出力機能では、お客様からのお問い合わせ内容(備考欄)が...

👍 0 / 👎 0 2025年10月12日
商品カテゴリ・一覧・検索 表示/テンプレート調整 EC-CUBE 4系全般
カテゴリーの一覧から、商品が紐づいていないカテゴリーのみを非表示にするカスタマイズ方法

子カテゴリー一覧を表示する際に、商品が登録されていないカテゴリーも表示されてしまう問題が発生します。...

👍 0 / 👎 0 2025年10月12日
商品カテゴリ・一覧・検索 表示/テンプレート調整 EC-CUBE 4系全般
特定カテゴリのでのみHTMLを表示するTwigのカスタマイズ方法

特定のカテゴリの商品一覧ページでのみHTMLやメッセージを表示したいが、商品一覧のTwigテンプレー...

👍 0 / 👎 0 2025年10月12日