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

标签 php symfony symfony-mailer

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

我用 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 呈现消息.负责渲染的类是 BodyRendererfrom the Twig Bridge .

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

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

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

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

关于php - 如何在发送前获取模板化电子邮件的呈现正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67317329/

相关文章:

php - 在没有 symfony 框架的情况下使用 symfony/mailer 组件

php - 我如何在测试期间模拟 Symfony 邮件程序?

php - 如何在 WordPress 中编辑单个页面

PHP通知和警告的区别

php - 脚本执行结束后在临时目录中找不到上传的文件

php - 如何在 Symfony 5.3 的 Controller 中获取 Session 对象?

php - 带有 Apache 服务器 SSL 的 PHP 中的 Websocket

php - 如何在我的扩展 Twig 页面 (Symfony) 上使用变量?

php - 在 symfony/httpfoundation 中设置/删除多维数组

使用 liip imagine_filter 的 Symfony 5 Mailer 嵌入图像