使用 Laravel 发送 Base64 图像

Sending Base64 Images using Laravel

我正在使用 Laravel 发送电子邮件,纯文本工作正常。但是,我在将图像附加到电子邮件时遇到问题。截至目前,图像以 Base64 字符串的形式存储在数据库中。

这是在 Laravel 中调用 Mail facade 的代码:

            Mail::queue('emails.infraction', $data, function($message) use ($email){
            $message -> from($fromEmail, 'Blah);
            $message -> to($toEmail) -> subject('Testing');

        });

基本上 $data 变量包含我将在发送的 HTML 电子邮件中显示的所有信息。在电子邮件中显示变量时,我可以很好地访问这些变量,但我在将 base64 图像附加到电子邮件中时遇到问题。

这是我目前尝试过的方法:

        Evidence of Intraction:</p>
            <?php 
                $elementCount  = count($photos);
                for($x=0; $x<$elementCount; $x++){
                    echo '<p style="font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; margin-left: 80px;">';
                    echo "<img src=" . $message->embedData($data['photos'][$x], 'Blah') . ">";
                    echo "</p>";
                }
            ?>

但是正如您在这里看到的那样,gmail 没有正确地将原始数据字符串编码到图像中:

它只是显示好像有图片但没有内容。我已经验证了 base 64 字符串,它是正确的。

可能是什么错误?

Laravel 邮件文档说在邮件生成器中使用类似这样的东西:

但我对如何正确地做到这一点有点迷茫。另一种选择是即时将 base64 字符串转换为图像并将其作为附件发送给用户,但我无法将图像存储到服务器中,因此必须将其转换为 php 内的图像并在没有实际文件路径的情况下通过 laravel 邮件发送。

请指教

你必须先像这样解码图像:

$message->embedData(base64_decode($data['photos'][$x]), 'Blah')