Php 如何在Symfony Mailer上使用带引导的模板电子邮件?

Php 如何在Symfony Mailer上使用带引导的模板电子邮件?,php,symfony,twig,webpack-encore,symfony-mailer,Php,Symfony,Twig,Webpack Encore,Symfony Mailer,我一直在跟踪一些人使用bundle发送电子邮件。我也在使用安装了NPM和Webpack Encore的Bootstrap 4。我不知道如何为这些模板电子邮件提供样式: 某控制器 使用Symfony\Bridge\Twig\Mime\TemplatedEmail; 使用Symfony\Component\Mailer\MailerInterface; 使用Symfony\Component\Mime\Address; 类SomeController扩展了AbstractController { 公

我一直在跟踪一些人使用bundle发送电子邮件。我也在使用安装了NPM和Webpack Encore的Bootstrap 4。我不知道如何为这些模板电子邮件提供样式:

某控制器
使用Symfony\Bridge\Twig\Mime\TemplatedEmail;
使用Symfony\Component\Mailer\MailerInterface;
使用Symfony\Component\Mime\Address;
类SomeController扩展了AbstractController
{
公共函数发送(MailerInterface$mailer)
{
$email=(新的TemplatedEmail())
->发件人(新地址:)email@email.com“,”我的应用程序“))
->收件人(新地址($contact\u form->getEmail(),$contact\u form->getName())
->受试者('Hemos recibido tu mensaje')
->htmlTemplate('email/contact_form.html.twig');
$mailer->send($email);
}
}
模板
email/contact\u form.html.twig
正在扩展
email/layout.html.twig

{%block title%}{%endblock%}
{%block body%}{%endblock%}
当我看到电子邮件HTML源代码时,样式和脚本具有正确的链接引用,但它们没有应用任何样式或脚本

通常,在“普通”布局模板中,我使用
{{encore\u entry\u link\u tags('app')}
{encore\u entry\u script\u tags('app')}
,但这将生成url的相对路径,我尝试将它们包装在
绝对url()
函数中,但它不起作用

我尝试过创建一个文件
macros.html.twig
,然后在模板中导入它们,并在布局中添加
{{encore\u absolute\u link\u tags('app')}
{{encore\u absolute\u script\u tags('app')}
。但我仍然没有任何应用于电子邮件的样式


将网页包/Encore样式/脚本导入模板电子邮件的正确方法是什么

大多数电子邮件客户端不会下载外部CSS文件并应用样式并将其应用于电子邮件HTML。您真的不应该指望这一点(而且链接到外部javascript文件的可能性更小,正如您在示例中所做的那样)

不仅如此,电子邮件客户端在大多数情况下都会忽略任何
标记,即使这些资源不是外部的

您应该做的是使用文档和中的建议

{%apply inline_css(source('@css/email.css'))%}
欢迎{{username}}!
{# ... #}
{%endapply%}
但webpack encore生成的内联样式并没有那么严格,需要您多跳几圈


这解释了如何为基础样式做这件事,但是它很容易被调整为Bootstrap。

你不想依赖你的电子邮件的外部CSS文件。将此内嵌到您的HTML电子邮件中,使其适用于顶级电子邮件客户端。
<!doctype html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>{% block title %}{% endblock %}</title>
    <link rel="stylesheet" href="{{ absolute_url(asset('build/app.css')) }}">
</head>
<body>
{% block body %}{% endblock %}
<script src="{{ absolute_url(asset('build/app.js')) }}"></script>
</body>
</html>
{% apply inline_css(source('@css/email.css')) %}
    <h1>Welcome {{ username }}!</h1>
    {# ... #}
{% endapply %}