如何在发送前获取模板电子邮件的渲染正文?

Tik*_*TaZ 5 php symfony symfony-mailer

我想在发送之前获得电子邮件的渲染。

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

我尝试过,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());
Run Code Online (Sandbox Code Playgroud)

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

yiv*_*ivi 2

Symfony 仅在实际发送消息时通过事件监听器渲染消息。负责渲染的类BodyRenderer来自Twig Bridge

但没有什么可以阻止您自己渲染消息。

您拥有模板和上下文变量,因此您可以在发送时简单地注入 Twig,将模板渲染为字符串,然后执行您需要的任何操作。

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

使用哪种方法取决于您的应用程序、您的约束条件等。但重要的是要意识到您将在过程的哪一部分找到实际渲染的主体,或者如果您需要的话,可以自己渲染它。