如何在电子邮件中显示二维码图像?

问题描述

我正在使用 endroid/qr-code https://github.com/endroid/qr-code生成 QrCode。 现在我也需要将此二维码发送到我的电子邮件中。

我使用了以下代码

    $result = Builder::create()
        ->writer(new PngWriter())
        ->writerOptions([])
        ->data("This ist test page.")
        ->encoding(new Encoding('UTF-8'))
        ->size(200)
        ->margin(10)
        ->roundBlockSizeMode(new RoundBlockSizeModeMargin())
        ->logoPath($webPath)
        ->labelText('SCAN')
        ->build();

    return $result->getDataUri();

在我的电子邮件树枝页面

<img src = {{ $return_from_result_getDataUri }} >

我从上面那条线弄坏了 img。

当我使用 {{ $return_from_result_getDataUri }} 时,这会显示 data:image/png;base64..... 文本。

有人能帮我吗。

谢谢。

解决方法

对在电子邮件中嵌入带有数据 URI 的图像的支持仍然不是最佳的,而且许多电子邮件客户端根本不支持它。

请参阅 this analysis from Campaign Monitor 显示许多客户端未呈现数据 URI 图像。

强烈建议您将二维码上传到某个地方,然后将其链接为普通图片。

如果您的服务托管在 AWS 上,则可以使用 S3。

否则您可以使用免费服务,但我对它们没有任何经验。这是我找到的第一个结果:https://apidocs.imgur.com/

PS:只是补充一点,您的代码中可能还缺少一些双引号。

<img src="{{ $return_from_result_getDataUri }}" >
,
<img src = {{ $return_from_result_getDataUri }} >

在PHP中,我们将上面写成如下

<img src="<?php echo $return_from_result_getDataUri; ?>" >

但这可能不适用于所有电子邮件客户端。有两种方法可以解决这个问题。

方法一: 正如安德里亚提到的,将文件保存在某处

 $result->saveToFile(`__DIR__`.'/qrcode.png');

然后使用 html img 标签中的 url。

<img src="<?php echo $fullImageUrl; ?>">

方法二: 将图像作为附件嵌入并使用 cid(content id) 引用它

这很好解释here