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

マイページにメール受信履歴ページをカスタマイズする方法

公開日: 2025年10月12日 | 更新日: 2025年11月03日
マイページ全般 表示/テンプレート調整 EC-CUBE 4系全般 サービス/コントローラ拡張

要望や症状

マイページに注文関連のメール履歴を一覧表示する専用ページを作成したいという要望があります。現在のEC-CUBEでは、ご注文履歴の詳細ページ内でメール履歴を確認することはできますが、利便性に課題があります。そのため、マイページの下階層に独立した「メール受信履歴一覧ページ」を追加する必要があります。

表示対象となるメール

  • 注文受付メール
  • 出荷メール
  • 受注管理から送信したメール

表示順序について

メール送信日時を基準としたソート順で表示することを想定しています。

理由や原因

EC-CUBE標準機能では、メール履歴は注文履歴詳細ページ内でのみ表示される仕様となっています。独立したメール履歴ページは標準では存在しないため、マイページに新しいページを追加するカスタマイズが必要になります。

メール保存の制限について

EC-CUBE標準では注文受付メールと受注管理から送信したメールのみがデータベースに保存されます。お問い合わせメールなど他のメール送信分は保存されないため、それらを履歴に含める場合は別途保存処理の実装が必要になります。

解決策

実装手順について

以下の手順でマイページにメール受信履歴ページを追加できます。

1. コントローラーの作成

マイページ用のコントローラーを作成します。

// app/Customize/Controller/Mypage/MailHistoryController.php
<?php

namespace Customize\Controller\Mypage;

use Eccube\Controller\AbstractController;
use Eccube\Entity\Customer;
use Eccube\Entity\MailHistory;
use Eccube\Repository\MailHistoryRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;

class MailHistoryController extends AbstractController
{
    private $mailHistoryRepository;
    private $tokenStorage;

    public function __construct(
        MailHistoryRepository $mailHistoryRepository,
        TokenStorageInterface $tokenStorage
    ) {
        $this->mailHistoryRepository = $mailHistoryRepository;
        $this->tokenStorage = $tokenStorage;
    }

    /**
     * @Route("/mypage/mail_history", name="mypage_mail_history")
     * @Template("Mypage/mail_history.twig")
     */
    public function index(Request $request)
    {
        $Customer = $this->getUser();
        if (!$Customer instanceof Customer) {
            throw $this->createAccessDeniedException();
        }

        // 顧客の注文に関連するメール履歴を取得
        $qb = $this->mailHistoryRepository->createQueryBuilder('mh')
            ->innerJoin('mh.Order', 'o')
            ->where('o.Customer = :customer')
            ->setParameter('customer', $Customer)
            ->orderBy('mh.send_date', 'DESC');

        $mailHistories = $qb->getQuery()->getResult();

        return [
            'mailHistories' => $mailHistories,
        ];
    }
}

2. テンプレートの作成

メール履歴表示用のテンプレートを作成します。

{# app/template/default/Mypage/mail_history.twig #}
{% extends 'Mypage/index.twig' %}

{% set mypageno = 'mail_history' %}

{% block title %}メール受信履歴{% endblock %}

{% block main %}
    <div class="ec-layoutRole__main">
        <div class="ec-mypageRole">
            <div class="ec-pageHeader">
                <h1>メール受信履歴</h1>
            </div>
            
            {% if mailHistories|length > 0 %}
                <div class="ec-orderRole__detail">
                    {% for mailHistory in mailHistories %}
                        <div class="ec-orderDelivery">
                            <div class="ec-orderDelivery__title">
                                <h2>{{ mailHistory.subject }}</h2>
                                <p class="ec-color-grey">送信日時:{{ mailHistory.send_date|date('Y/m/d H:i') }}</p>
                                <p class="ec-color-grey">注文番号:{{ mailHistory.Order.order_no }}</p>
                            </div>
                            <div class="ec-orderDelivery__detail">
                                <div class="ec-orderDelivery__mail">
                                    <pre>{{ mailHistory.body }}</pre>
                                </div>
                            </div>
                        </div>
                    {% endfor %}
                </div>
            {% else %}
                <div class="ec-role">
                    <div class="ec-off1Grid">
                        <div class="ec-off1Grid__cell">
                            <div class="ec-alert-warning">
                                <div class="ec-alert-warning__icon"><img src="{{ asset('assets/icon/exclamation-white.svg') }}" alt=""></div>
                                <div class="ec-alert-warning__text">メール履歴がありません。</div>
                            </div>
                        </div>
                    </div>
                </div>
            {% endif %}
        </div>
    </div>
{% endblock %}

3. マイページナビゲーションの更新

マイページのナビゲーションにメール履歴へのリンクを追加します。

{# app/template/default/Mypage/navi.twig #}
<!-- 既存のナビゲーション項目の後に追加 -->
<li class="ec-navlistRole__item"><a href="{{ url('mypage_mail_history') }}">メール受信履歴</a></li>

4. ルーティングの確認

Customizeディレクトリのコントローラーが自動で読み込まれることを確認します。EC-CUBE 4.1では通常自動で認識されます。

注意事項について

本カスタマイズは注文関連のメール(注文受付メール、出荷メール等)のみが対象となります。お問い合わせメールの履歴を含める場合は、メール送信時の保存処理を別途実装する必要があります。また、データベースの直接変更を伴う場合は事前にバックアップを取得することをお勧めします。

バージョンによる違いについて

EC-CUBE 4.2系以降ではSymfony 5.4以上が使用されるため、Annotationの代わりにAttributesを使用することが推奨されます。

免責事項

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

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

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

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

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

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

商品 表示/テンプレート調整 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日

サービス/コントローラ拡張 の関連記事

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

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

👍 0 / 👎 0 2025年10月12日
商品 EC-CUBE 4.2系 / Symfony 5.4 サービス/コントローラ拡張
商品登録画面のフリーエリアでTwig構文を使用可能にするカスタマイズ方法

商品登録画面のフリーエリアでTwig構文を使用した画像パスを入力すると、保存時に構文がHTMLエスケ...

👍 0 / 👎 0 2025年09月24日
商品 表示/テンプレート調整 EC-CUBE 4系全般
商品詳細ページに獲得予定ポイントを表示するカスタマイズ方法

商品詳細ページで獲得予定ポイントを表示したいケースがあります。...

👍 0 / 👎 0 2025年09月23日
会員登録 セキュリティ強化 EC-CUBE 4系全般
悪意のあるボットによる大量の会員登録を制限する方法

不正なbot等によって、大量の会員登録リクエストが送信されるケースがあります。これらの不正登録では基...

👍 0 / 👎 0 2025年09月23日