要望や症状
EC-CUBE 4系で、メール件名の先頭に自動挿入される店舗名を英語表記に変更したい場合があります。
通常、EC-CUBEから送信されるメールの件名には、日本語の店舗名が自動的に挿入されますが、海外向けの販売や英語対応のサイトでは、件名に含まれるショップ名も英語表記にしたいケースがあります。
理由や原因
EC-CUBE 4系では、メール件名のショップ名挿入処理が複数箇所に分散しています。具体的には、自動送信メールと手動送信メールで処理が分かれており、それぞれ異なる箇所で制御されています。
自動送信メールはMailService.phpの各メソッドで処理され、手動送信メールは同じくMailService.php内のsendAdminOrderMailメソッドなどで処理されています。このため、件名の表記を変更するには、それぞれの処理に対して個別に対応する必要があります。
解決策
ショップ名を英語表記に変更するには、Customizeディレクトリを使用してMailServiceをカスタマイズします。自動送信メールと手動送信メールの両方に対応する必要があります。
自動送信メール件名の変更手順
自動送信メールの件名を英語表記に変更するには、注文完了メールや発送通知メールなど、各メール送信メソッドをカスタマイズします。
Customizeディレクトリ内でMailServiceを拡張し、各メール送信メソッド内で使用されるgetShopName()をgetShopNameEng()に変更します。主要な対象メソッドには、注文完了メール送信のsendOrderMail、発送完了メール送信のsendShippingNotifyMailなどがあります。
// app/Customize/Service/MailService.php
<?php
namespace Customize\Service;
use Eccube\Service\MailService as BaseMailService;
use Eccube\Entity\Order;
class MailService extends BaseMailService
{
public function sendOrderMail(Order $Order)
{
$subject = '[' . $this->BaseInfo->getShopNameEng() . '] ' . 'ご注文ありがとうございます';
// 以下、元の処理を継承しつつ件名を変更
return parent::sendOrderMail($Order);
}
}
手動送信メール件名の変更手順
管理画面から手動で送信するメールの件名も、同様にCustomizeディレクトリでの対応が必要です。
まず、該当ファイルsrc/Eccube/Service/MailService.php内のsendAdminOrderMailメソッドを確認し、プラグインによる上書きがないかも確認します。
次に、Customizeディレクトリで以下のようにカスタマイズします。
// app/Customize/Service/MailService.php
<?php
namespace Customize\Service;
use Eccube\Service\MailService as BaseMailService;
use Eccube\Entity\Order;
class MailService extends BaseMailService
{
public function sendAdminOrderMail(Order $Order, $formData)
{
// 元の処理をコピーし、getShopName() を getShopNameEng() に変更
$subject = '[' . $this->BaseInfo->getShopNameEng() . '] ' . $formData['mail_subject'];
// 以下、元の処理を継承
return parent::sendAdminOrderMail($Order, $formData);
}
}
最後に、サービス定義を追加して、カスタマイズしたMailServiceが使用されるように設定します。
# app/Customize/Resource/config/services.yaml
services:
Eccube\Service\MailService:
class: Customize\Service\MailService
parent: Eccube\Service\MailService
これらの設定により、EC-CUBEから送信されるすべてのメールの件名で、ショップ名が英語表記になります。変更後はキャッシュをクリアし、テスト環境で動作確認を行ってから本番環境に適用することをお勧めします。