如何在发送前获取模板化电子邮件的呈现正文?

How to get the rendered body of a templated email before sending?

我想在发送之前获取电子邮件的呈现。

我用 htmlTemplatecontext 创建了一个 TemplatedEmail,它可以很好地发送,但是如何获取带有上下文的生成模板以将其保存在数据库中? (客户需求)

我尝试了 getBody() 但似乎只能使用文本模板,因为我得到 A message must have a text or an HTML part or attachments.

$email = new TemplatedEmail();
$email->htmlTemplate($htmlTemplate);
$email->from($from)->to(...$to)->subject($subject);
$email->context($context);

dd($email->getBody());

我想使用 render 方法,但我在服务中,不确定它是否是存储在数据库中的好方法。

Symfony 仅在实际发送消息时通过 Event Listener. The class responsible from doing the rendering is BodyRenderer, from the Twig Bridge.

呈现消息

但是没有什么能阻止您自己呈现消息。

你有模板和上下文变量,所以你可以简单地在你发送的任何地方注入 Twig,将模板呈现为一个字符串,然后用它做任何你需要的事情。

您也可以注册自己的 MessageEvent::class 侦听器,将其设置为低于 the one registered by the Twig Bundle 的优先级(它使用默认优先级)以便在 之后执行那个,然后你可以访问消息 body 因为它已经被渲染了。这(非常)稍微复杂一些,但是您会获得一些性能,因为您不会渲染模板两次。

使用哪种方法取决于您的应用程序、您的约束等。但重要的一点是要意识到您会在过程的哪个部分找到 body 实际渲染,或者自己渲染如果你想在那之前。

有关未来的信息,可以使用此处的文档在服务中呈现模板 https://symfony.com/doc/current/templates.html#rendering-a-template-in-services