为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Shopware 6 控制器中发送电子邮件?

如何在 Shopware 6 控制器中发送电子邮件?

PHP
LEATH 2023-07-08 15:43:57
在 Shopware 5 中,有一个mail->send()功能可以发送包含所需模板和内容的电子邮件。Shopware 6 中的功能名称是什么?PS我看到一些我认为是需要的文件,一些邮件发送的例子将受到欢迎。Shopware\Core\Content\MailTemplate\Service\MessageFactory.php Shopware\Core\Content\MailTemplate\Service\MailSender.php
查看完整描述

1 回答

?
MMMHUHU

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',

        [

            '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());


查看完整回答
反对 回复 2023-07-08
  • 1 回答
  • 0 关注
  • 94 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信