この記事では、商品注文時や会員登録時などに自動送信されるメールテンプレートを変更する方法を紹介します。
デフォルトのテンプレート内容を変更することは、EC-CUBE管理画面から簡単に編集できます。
が、新しく用意したテンプレートなど、テンプレート自体を別のものに変更するには、サーバー上のSeviceと呼ばれるファイルを修正する必要があります。
デバッグモードを設定しておくと、エラーが起きたときに詳細情報が表示されるようになります。
エラー箇所を探しやすくなるので、開発前に設定しておくのをオススメします。
デバッグモードの設定方法については 以下記事 で解説しています。
カスタマイズ後は、デバッグモードの解除を忘れないように。
実装後の状態
商品をネット注文した際に自動送信されるメールを、このテンプレートに変更します。
(デフォルトでは『注文受付メール』が自動送信されます。)
ちなみに、『出荷通知メール』や『問合受付メール』を設定することもできます。
(注文時に送る内容ではないので、実用的ではありませんが。)
カスタマイズ後、実際に自動送信されたメールです。
新しいテンプレートに追加した一文が表示されており、無事に送信メールが変更されています。
実装の手順
「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
メール送信に関するコードが記述されているファイルを修正します。
「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’)に書き換えます。
以上で修正は完了です。
念のため、管理画面からキャッシュを削除したあと、実際に変更したテンプレートが送信されるか確認しておきましょう。