简体   繁体   English

如何呈现电子邮件正文

[英]how to render an emailbody

I'd like to use a view as an email body. 我想将视图用作电子邮件正文。

I tried this one: 我尝试了这个:

    $renderer = new PhpRenderer();

    $bodyHtml = $renderer->render(
        '/user/email/reset-password-email',
        [
            'passwordResetUrl' => $passwordResetUrl,
        ]);

    $html = new MimePart($bodyHtml);

I get the following error: 我收到以下错误:

Unable to render template "/user/email/reset-password-email"; 无法呈现模板“ / user / email / reset-password-email”; resolver could not resolve to a file 解析器无法解析为文件

My view-template is located in: 我的视图模板位于: 在此处输入图片说明

Any help appreciated. 任何帮助表示赞赏。

To render view as string, you need a renderer " ViewRenderer ". 要将视图呈现为字符串,您需要一个渲染器“ ViewRenderer ”。

If you can get ServiceManager, then, 如果可以获取ServiceManager,

$renderer = $serviceManager->get('ViewRenderer');

Now, 现在,

 $bodyHtml = $renderer->render(
        '/user/email/reset-password-email',
        [
            'passwordResetUrl' => $passwordResetUrl,
        ]);

    $html = new MimePart($bodyHtml);

You need to retrieve the renderer from the service locator in the factory, and not instantiating it directly in the class where you are using it. 您需要从工厂中的服务定位器检索渲染器,而不是在使用它的类中直接实例化它。

Email sender class factory 电子邮件发件人类工厂

class EmailSenderFactory {
    public function __invoke($services) {
        $viewRenderer = $services->get('ViewRenderer');
        return new EmailSender($viewRenderer);
    }
}

Email sender class 电子邮件发件人类别

class EmailSender {

    private $viewRenderer;

    public function __construct($viewRenderer) {
        $this->viewRenderer = $viewRenderer;
    }

    public function createEmail() {
        $template = '/user/email/reset-password-email';
        $variables = ['passwordResetUrl' => $passwordResetUrl];
        $bodyHtml = $renderer->render($template, $variables);
        $html = new MimePart($bodyHtml);
    }
}

I had the same problem (sending an email for password reset) and I solved this way. 我遇到了同样的问题(发送电子邮件以重置密码),并且解决了这种问题。 Hope this will help you :) 希望这个能对您有所帮助 :)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM