3

所以我为我的重置密码系统设计了一个电子邮件模板。在电子邮件模板中,有图像(徽标)。

我将这些图像放在一个名为的文件夹Email_Images中,该文件夹位于该Public文件夹中!

首先,我尝试使用Asset()twig 函数链接图像,如下所示:

<img alt="logo 1" src="{{asset('Email_Images/1.png')}}" />
<img alt="logo 2" src="{{asset('Email_Images/2.jpg')}}" />

但它们都不起作用。所以我尝试在控制器中获取图像并将其发送到模板,如下所示:

 $email = (new TemplatedEmail())
        ->from(new Address('myEmail@gmail.com', 'My Subject'))
        ->to($user->getEmail())
        ->subject('Your password reset request');

        $img= $email ->embed(fopen('Email_Images/1.jpg', 'r'), 'img');

        $email->htmlTemplate('reset_password/email.html.twig')
        ->context([
            'resetToken' => $resetToken,

            'img' => $img,

            'tokenLifetime' => $this->resetPasswordHelper->getTokenLifetime(),
        ]);

在我做的模板中

<img alt="logo 1" src="{{ img }}" />

我得到这个错误:

在渲染模板期间引发了异常(“可捕获的致命错误:Symfony\Bridge\Twig\Mime\TemplatedEmail 类的对象无法转换为字符串”)。

在电子邮件中添加/嵌入图像的正确方法是什么?

4

3 回答 3

5

而不是在控制器中获取图像并将它们发送到树枝页面。你可以这样做 :

img首先,定义一个指向存储图像的文件夹的 Twig 命名空间(例如称为)。在这种情况下,该文件夹被称为Email_Images

将这些行添加到config/packages/twig.yaml

twig:
    # ...

    paths:
        # point this wherever your images live
        '%kernel.project_dir%/public/Email_Images': img

现在您可以使用email.image()twig 函数将图像嵌入到电子邮件中。

<img src="{{ email.image('@img/1.png') }}" alt="Logo">
于 2020-07-24T09:26:21.110 回答
2

{{ asset('Email_Images/1.png') }}将产生一个相对 URL,如/Email_Images/1.png. 但是对于电子邮件,您需要一个可以像这样生成的绝对 URL <img src="{{ absolute_url(asset('Email_Images/1.png')) }}"/>。因为电子邮件对您的域名一无所知。

此外,我建议您配置以下参数(如果您也打算通过控制台命令发送电子邮件):

router.request_context.host:     example.com    # your domain
router.request_context.scheme:   http           # your scheme http or https
asset.request_context.base_path: '%router.request_context.base_url%'
asset.request_context.secure:    true
于 2020-07-24T08:39:54.000 回答
0

就个人而言,我从网站发送电子邮件和从 cron 任务发送电子邮件。对于从网站发送的电子邮件,可以使用absolute_url(asset(...)),但 cron 任务不知道您的域名。

所以为了简单起见,我的诀窍是将域名定义为 .env 变量,然后:

.env

DOMAIN_NAME=https://mywebsite.com

config/package/twig.yaml

twig:
    ...
    globals:
        DOMAIN_NAME: '%env(DOMAIN_NAME)%'

templates/emails/reset-password.email.twig (或 base.email.twig)

<img src="{{ DOMAIN_NAME ~ asset('images/logo.jpg') }}" alt="logo">
于 2020-07-25T00:39:33.420 回答