如何在 Shopware 6 控制器中发送电子邮件?
How do you send an email in Shopware 6 controller?
在 Shopware 5 中有一个 mail->send()
功能,可以发送一封包含所需模板和内容的电子邮件。
Shopware 6 中的函数名称是什么?
P.S。我看到了一些我认为需要的文件,欢迎发送一些邮件示例。
Shopware\Core\Content\MailTemplate\Service\MessageFactory.php
Shopware\Core\Content\MailTemplate\Service\MailSender.php
在 Shopware 6 中,您还有邮件服务,它为您提供 send() method。
所以基本上,使用该服务的一个非常简单的示例是:
public function __construct(
MailServiceInterface $mailService,
) {
$this->mailService = $mailService;
}
private function sendMyMail(SalesChannelContext $salesChannelContext): void
{
$data = new ParameterBag();
$data->set(
'recipients',
[
'foo@bar.com' => 'John Doe'
]
);
$data->set('senderName', 'I am the Sender');
$data->set('contentHtml', 'Foo bar');
$data->set('contentPlain', 'Foo bar');
$data->set('subject', 'The subject');
$data->set('salesChannelId', $salesChannelContext->getSalesChannel()->getId());
$this->mailService->send(
$data->all(),
$salesChannelContext->getContext(),
);
}
还要确保在 services.xml
中标记服务。
<service id="Your\Namespace\Services\YourSendService">
<argument id="Shopware\Core\Content\MailTemplate\Service\MailService" type="service"/>
</service>
电子邮件模板
如果您想使用电子邮件模板,还有一个如何在插件中添加邮件模板的方法
如果您有电子邮件模板,您需要在发送电子邮件之前获取它。然后,您可以从电子邮件模板中获取内容,将这些值传递给 send()
方法。
private function getMailTemplate(SalesChannelContext $salesChannelContext, string $technicalName): ?MailTemplateEntity
{
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('mailTemplateType.technicalName', $technicalName));
$criteria->setLimit(1);
/** @var MailTemplateEntity|null $mailTemplate */
$mailTemplate = $this->mailTemplateRepository->search($criteria, $salesChannelContext->getContext())->first();
return $mailTemplate;
}
您可以稍后设置来自您的电子邮件模板(也可在管理中使用)的电子邮件值,而不是在您的发送方法中对其进行硬编码。
$data->set('contentHtml', $mailTemplate->getContentHtml());
$data->set('contentPlain', $mailTemplate->getContentPlain());
$data->set('subject', $mailTemplate->getSubject());
在 Shopware 5 中有一个 mail->send()
功能,可以发送一封包含所需模板和内容的电子邮件。
Shopware 6 中的函数名称是什么?
P.S。我看到了一些我认为需要的文件,欢迎发送一些邮件示例。
Shopware\Core\Content\MailTemplate\Service\MessageFactory.php
Shopware\Core\Content\MailTemplate\Service\MailSender.php
在 Shopware 6 中,您还有邮件服务,它为您提供 send() method。
所以基本上,使用该服务的一个非常简单的示例是:
public function __construct(
MailServiceInterface $mailService,
) {
$this->mailService = $mailService;
}
private function sendMyMail(SalesChannelContext $salesChannelContext): void
{
$data = new ParameterBag();
$data->set(
'recipients',
[
'foo@bar.com' => 'John Doe'
]
);
$data->set('senderName', 'I am the Sender');
$data->set('contentHtml', 'Foo bar');
$data->set('contentPlain', 'Foo bar');
$data->set('subject', 'The subject');
$data->set('salesChannelId', $salesChannelContext->getSalesChannel()->getId());
$this->mailService->send(
$data->all(),
$salesChannelContext->getContext(),
);
}
还要确保在 services.xml
中标记服务。
<service id="Your\Namespace\Services\YourSendService">
<argument id="Shopware\Core\Content\MailTemplate\Service\MailService" type="service"/>
</service>
电子邮件模板
如果您想使用电子邮件模板,还有一个如何在插件中添加邮件模板的方法
如果您有电子邮件模板,您需要在发送电子邮件之前获取它。然后,您可以从电子邮件模板中获取内容,将这些值传递给 send()
方法。
private function getMailTemplate(SalesChannelContext $salesChannelContext, string $technicalName): ?MailTemplateEntity
{
$criteria = new Criteria();
$criteria->addFilter(new EqualsFilter('mailTemplateType.technicalName', $technicalName));
$criteria->setLimit(1);
/** @var MailTemplateEntity|null $mailTemplate */
$mailTemplate = $this->mailTemplateRepository->search($criteria, $salesChannelContext->getContext())->first();
return $mailTemplate;
}
您可以稍后设置来自您的电子邮件模板(也可在管理中使用)的电子邮件值,而不是在您的发送方法中对其进行硬编码。
$data->set('contentHtml', $mailTemplate->getContentHtml());
$data->set('contentPlain', $mailTemplate->getContentPlain());
$data->set('subject', $mailTemplate->getSubject());