引用:
rokuatsuさんは書きました:
▼テンプレート
[EC-CUBE] EC-CUBE4.1.2
[サーバ] さくらのクラウド
[PHP] 7.4.30
[データベース] PostgreSQL
[WEBサーバ] Apache/2.4.37
お世話になっております。
標題の件でご相談させてください。
扱う商品の性質上、対応状況を「新規受付」もしくは「入金済み」から「対応中」にした際に注文者に通知のメールが自動送信されるように設定したいと考えております。
自動送信されるメールのテンプレートは作成し、管理画面にも反映されたことを確認済みの状態です。
また、調べた記事を参考にして
app/Customize/Service/OrderStateMachine.php を
下記コードで作成したところ、ステータスの変更と同時にメールの送信させることは実現できました。
コード内34行目あたりで直接入力しているタイトルおよび本文に作成したメールのテンプレートを当てることは可能でしょうか??
また方法がございましたらご教示いただけますと幸いでございます。
どうぞよろしくお願いいたします。
<?php
namespace Customize\Service;
use Eccube\Repository\BaseInfoRepository;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Workflow\Event\Event;
class OrderStateMachine implements EventSubscriberInterface
{
/**
* @var \Swift_Mailer
*/
private $mailer;
/**
* @var BaseInfoRepository
*/
private $baseInfoRepository;
public function __construct(\Swift_Mailer $mailer, BaseInfoRepository $baseInfoRepository)
{
$this->mailer = $mailer;
$this->baseInfoRepository = $baseInfoRepository;
}
public static function getSubscribedEvents()
{
return [
'workflow.order.transition.packing' => ['packing'],
];
}
public function packing(Event $event)
{
$BaseInfo = $this->baseInfoRepository->get();
$Order = $event->getSubject()->getOrder();
$subject = '['.$BaseInfo->getShopName().'] テストタイトル';
$body = 'テスト本文';
$message = (new \Swift_Message())
->setSubject($subject)
->setFrom([$BaseInfo->getEmail01() => $BaseInfo->getShopName()])
->setTo([$Order->getEmail()])
->setBcc($BaseInfo->getEmail01())
->setReplyTo($BaseInfo->getEmail03())
->setReturnPath($BaseInfo->getEmail04());
$message->setBody($body);
$this->mailer->send($message);
}
}
注文管理画面を参考に実装してみては如何でしょうか?
注文管理でメール送信を実装しているController部は下記かと思います。
https://github.com/EC-CUBE/ec-cube/blob/4.1/src/Eccube/Controller/Admin/Order/MailController.php