为了账号安全,请及时绑定邮箱和手机立即绑定

使用 Symfony Mailer 在 Twig 的模板化电子邮件中嵌入 Webpack 资产

使用 Symfony Mailer 在 Twig 的模板化电子邮件中嵌入 Webpack 资产

翻过高山走不出你 2022-01-23 10:46:32
Symfony 的邮件文档说可以轻松嵌入图像:<img    src="{{ email.image('@images/logo.png') }}"    alt="Logo">但是,我的所有资产都是由 Webpack 和 Encore 构建的。我也使用资产清单文件,因为每个资产的名称中都有一个 chunkhash。在这种情况下如何使用 Twig 嵌入图像?我试过:<img    src="{{ email.image(asset('build/images/logo.png')) }}"    alt="Logo">但这不起作用。我最终得到一个例外,即“缺少模板”。如果我使用来自静态位置的图像,这当然效果很好。
查看完整描述

2 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

正如文档所说:定义一个 Twig 命名空间,该命名空间指向存储图像的任何目录,例如:


# config/packages/twig.yaml

twig:

    paths:

        # point this wherever your images live

        public/build/: build

接下来,在您的电子邮件模板中:


{# '@build/' refers to the Twig namespace defined earlier #}

<img src="{{ email.image('@build/logo.png') }}" alt="Logo">

<img src="{{ email.image('@build/subdir/logo.png') }}" alt="Logo">

如果构建的图像有一些随机后缀,这将不起作用,例如在配置文件.enableVersioning()中定义的时候。webpack.config.js


如果您启用了版本控制策略,您可以执行以下操作:


# config/packages/twig.yaml

twig:

    paths:

        public/: public

并使用字符串 concat 运算符构建模板名称~:


{# '@public' refers to the Twig namespace defined earlier #}

<img src="{{ email.image('@public' ~ asset('build/logo.png')) }}" alt="Logo">


查看完整回答
反对 回复 2022-01-23
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

有两种方法可以在邮件中获取图像。第一个是嵌入的图像,第二个只是指向网络上某处图像的链接。如果要嵌入图像,则必须将图像附加到邮件中:


$attachment = Swift_Image::newInstance($data, $filename, $mimeType)

    ->setDisposition('inline');


$cid = $message->embed($attachment); // Generates "cid:something"

重要的是像这样显示您的图像:


<img src="cid:something" ... />

所以你必须像这样渲染你的模板:


$twig->render('email/email.html.twig', [

    'cid' => $cid,

    ...

]);

在你的树枝模板中:


<img src="{{ cid }}" ... />


查看完整回答
反对 回复 2022-01-23
  • 2 回答
  • 0 关注
  • 260 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号