如何呈现电子邮件正文

how to render an emailbody

我想将视图用作电子邮件正文。

我试过这个:

    $renderer = new PhpRenderer();

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

    $html = new MimePart($bodyHtml);

我收到以下错误:

Unable to render template "/user/email/reset-password-email"; resolver could not resolve to a file

我的视图模板位于:

感谢任何帮助。

您需要从工厂中的服务定位器中检索渲染器,而不是在您使用它的 class 中直接实例化它。

电子邮件发件人class工厂

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

电子邮件发件人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);
    }
}

我遇到了同样的问题(发邮件重设密码),我是这样解决的。希望这对你有帮助:)

要将视图呈现为字符串,您需要一个呈现器“ViewRenderer”。

如果你能得到ServiceManager, 那么,

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

现在,

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

    $html = new MimePart($bodyHtml);