I am working within a script to send emails using a template created on my shopware6 admin.
When I send with order variables like this:
<p>Order Number: {{ order.orderNumber }}</p>
<p>Customer Name: {{ order.orderCustomer.firstName }} {{ order.orderCustomer.lastName }}</p>
<p>Delivery Status: {{ order.deliveries.first.stateMachineState.translated.name }}</p>
In my shopware6 i get this error
[business_events] mail.sent.error ["source" => "core","environment" => "dev","additionalData" => ["exception" => """ Shopware\Core\Framework\Adapter\Twig\Exception\StringTemplateRenderingException: Failed rendering string template using Twig: Variable "order" does not exist in
but without the order variables the mail is sent.
My belief is that I am passing it correctly as below:
protected function reminderMail($fname, $email, $order, $context)
{
$salesChannelConfig = $this->systemConfigService->get('core.defaultSalesChannel');
$salesChannelId = isset($salesChannelConfig['salesChannel'][0]) ? $salesChannelConfig['salesChannel'][0] : null;
$mailTemplate = $this->mailTemplateRepository->search(
(new Criteria(['£££'])), // Search by ID
$context
)->get('£££'); // Get the template by ID
if (!$mailTemplate) {
throw new \RuntimeException('Mail template not found');
}
// dd($order);
// Prepare the data bag
$dataBag = new DataBag();
$recipients = [
$email => $fname,
// Add more recipients as needed
];
$dataBag->set('recipients', $recipients);
$dataBag->set('senderName', 'Your Sender Name');
$dataBag->set('contentHtml', $mailTemplate->getContentHtml());
$dataBag->set('contentPlain', $mailTemplate->getContentPlain());
$dataBag->set('subject', $mailTemplate->getSubject());
$dataBag->set('salesChannelId', $salesChannelId);
// Add any additional data you want to pass to the template
$dataBag->set('data', $order);
// Send the email
$this->mailService->send($dataBag->all(), $context);
}
Please help
I am working within a script to send emails using a template created on my shopware6 admin.
When I send with order variables like this:
<p>Order Number: {{ order.orderNumber }}</p>
<p>Customer Name: {{ order.orderCustomer.firstName }} {{ order.orderCustomer.lastName }}</p>
<p>Delivery Status: {{ order.deliveries.first.stateMachineState.translated.name }}</p>
In my shopware6 i get this error
[business_events] mail.sent.error ["source" => "core","environment" => "dev","additionalData" => ["exception" => """ Shopware\Core\Framework\Adapter\Twig\Exception\StringTemplateRenderingException: Failed rendering string template using Twig: Variable "order" does not exist in
but without the order variables the mail is sent.
My belief is that I am passing it correctly as below:
protected function reminderMail($fname, $email, $order, $context)
{
$salesChannelConfig = $this->systemConfigService->get('core.defaultSalesChannel');
$salesChannelId = isset($salesChannelConfig['salesChannel'][0]) ? $salesChannelConfig['salesChannel'][0] : null;
$mailTemplate = $this->mailTemplateRepository->search(
(new Criteria(['£££'])), // Search by ID
$context
)->get('£££'); // Get the template by ID
if (!$mailTemplate) {
throw new \RuntimeException('Mail template not found');
}
// dd($order);
// Prepare the data bag
$dataBag = new DataBag();
$recipients = [
$email => $fname,
// Add more recipients as needed
];
$dataBag->set('recipients', $recipients);
$dataBag->set('senderName', 'Your Sender Name');
$dataBag->set('contentHtml', $mailTemplate->getContentHtml());
$dataBag->set('contentPlain', $mailTemplate->getContentPlain());
$dataBag->set('subject', $mailTemplate->getSubject());
$dataBag->set('salesChannelId', $salesChannelId);
// Add any additional data you want to pass to the template
$dataBag->set('data', $order);
// Send the email
$this->mailService->send($dataBag->all(), $context);
}
Please help
Share Improve this question edited 2 days ago ADyson 62k16 gold badges75 silver badges89 bronze badges Recognized by PHP Collective asked Feb 18 at 0:27 chap manchap man 558 bronze badges 4 |1 Answer
Reset to default 1For anyone who has got this issue. I got it to work by passing it like this
Having the template data key and then sending the parameters one by one
$templateData = [];
$templateData = [
'orderNumber' => $order->getOrderNumber(),
];
$this->mailService->send($dataBag->all(), $context, $templateData);
$dataBag->set('data', $order);
- shouldn't you be passing this under the identifierorder
instead ofdata
? – C3roe Commented 2 days ago$mailTemplate->getContentHtml()
what actually renders the mail template? In that case, you'd have to somehow pass the values to that one then, I suppose? – C3roe Commented 2 days ago