1 回答

TA貢獻1834條經驗 獲得超8個贊
在 Shopware 6 中,您還擁有 Mailservice,它為您提供send() 方法。
所以基本上使用該服務的一個非常簡單的示例是:
public function __construct(
? ? MailServiceInterface $mailService,
) {
? ? $this->mailService = $mailService;
}
private function sendMyMail(SalesChannelContext $salesChannelContext): void
{
? ? $data = new ParameterBag();
? ? $data->set(
? ? ? ? 'recipients',
? ? ? ? [
? ? ? ? ? ? '[email protected]' => '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());
- 1 回答
- 0 關注
- 177 瀏覽
添加回答
舉報