【EC-CUBE 4】自動送信されるメールテンプレートを変更する方法

この記事では、商品注文時や会員登録時などに自動送信されるメールテンプレートを変更する方法を紹介します。

デフォルトのテンプレート内容を変更することは、EC-CUBE管理画面から簡単に編集できます。
が、新しく用意したテンプレートなど、テンプレート自体を別のものに変更するには、サーバー上のSeviceと呼ばれるファイルを修正する必要があります。

開発前にデバッグモードの設定をお薦めします

デバッグモードを設定しておくと、エラーが起きたときに詳細情報が表示されるようになります。
エラー箇所を探しやすくなるので、開発前に設定しておくのをオススメします。
デバッグモードの設定方法については 以下記事 で解説しています。

カスタマイズ後は、デバッグモードの解除を忘れないように。

【動作環境】
EC CUBEのバージョン:4.1.2
サーバー:Xserver

目次

実装後の状態

事前に、『注文受付メール2』というテンプレートを1つ追加しておきます。

※メールテンプレートの増やし方は以下記事にて紹介しています。

新規追加したメールテンプレート
冒頭に「※これは新しく用意したテンプレートです。」という一文を追加しておきます。

商品をネット注文した際に自動送信されるメールを、このテンプレートに変更します。
(デフォルトでは『注文受付メール』が自動送信されます。)

ちなみに、『出荷通知メール』や『問合受付メール』を設定することもできます。
(注文時に送る内容ではないので、実用的ではありませんが。)

カスタマイズ後、実際に自動送信されたメールです。

新しいテンプレートに追加した一文が表示されており、無事に送信メールが変更されています。

自動送信された新規テンプレートのメール

実装の手順

STEP
『eccube.yaml』の修正

「app/config/eccube/package」下にある『eccube.yaml』に、新しく追加したメールテンプレート情報を追記します。

110行目付近より、メールテンプレート名とidを紐づける情報が記載されているので、こちらに追加したいテンプレート名(自由に決めてOK)とidを追記します。

eccube_order_mail_template_id: 1 #注文受付メール
eccube_entry_confirm_mail_template_id: 2 #会員仮登録メール
eccube_entry_complete_mail_template_id: 3 #会員本登録メール
eccube_customer_withdraw_mail_template_id: 4 #会員退会メール
eccube_contact_mail_template_id: 5 #問合受付メール
eccube_forgot_mail_template_id: 6 #パスワードリセット
eccube_reset_complete_mail_template_id: 7 #パスワードリマインダー
eccube_shipping_notify_mail_template_id: 8 #出荷通知メール

#追加したメールテンプレート
my_order_mail_template_id: 9 #出荷通知メール2
STEP
『MailService.php』の修正

メール送信に関するコードが記述されているファイルを修正します。

「src/Eccube/Service」下にある『MailService.php』に、メールの自動送信に関するコードが記述されています。

注文時のメール送信については、333行目付近より記述されています。

/**
 * Send order mail.
 *
 * @param \Eccube\Entity\Order $Order 受注情報
 *
 * @return \Swift_Message
 */
public function sendOrderMail(Order $Order)
{
log_info('受注メール送信開始');

// デフォルトのコード
// $MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['eccube_order_mail_template_id']);

// 修正コード
$MailTemplate = $this->mailTemplateRepository->find($this->eccubeConfig['my_order_mail_template_id']);

$body = $this->twig->render($MailTemplate->getFileName(), [
    'Order' => $Order,
]);

$message = (new \Swift_Message())
    ->setSubject('['.$this->BaseInfo->getShopName().'] '.$MailTemplate->getMailSubject())
    ->setFrom([$this->BaseInfo->getEmail01() => $this->BaseInfo->getShopName()])
    ->setTo([$Order->getEmail()])
    ->setBcc($this->BaseInfo->getEmail01())
    ->setReplyTo($this->BaseInfo->getEmail03())
    ->setReturnPath($this->BaseInfo->getEmail04());

$MailTemplateという変数に、自動送信したいテンプレートを代入します。

mailTemplateRepositoryのfindメソッドの引数に、代入したいテンプレートのidを渡します。
デフォルトでは eccubeConfig[‘eccube_order_mail_template_id’] となっているので、[]内を前のステップで設定したテンプレート名(本例では’my_order_mail_template_id’)に書き換えます。

以上で修正は完了です。

念のため、管理画面からキャッシュを削除したあと、実際に変更したテンプレートが送信されるか確認しておきましょう。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次