使用Laravel发送Base64编码的图片

3

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

以下是调用Laravel中Mail门面的代码:

            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没有将rawDataString正确编码为图像:

laravel

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

可能出现了什么错误?

Laravel邮件文档建议在消息构建器中使用以下内容:

laravel mailer

但我有点不知道如何正确操作。另一个选项是将base64字符串即时转换为图像,并将其作为附件发送给用户,但我无法将图像存储到服务器上,因此必须在php中将其转换为图像,并通过laravel mailer发送它而没有实际的文件路径。

请指教。


看起来这会导致<img src=somelongstring>,而你可能想要的是<img src="somelongstring"> - 这可能是原因吗? - Joel Hinz
@JoelHinz 我试过了,但在 Gmail 上仍然有问题。它只是显示带有base64字符串的完整图像源标签。 - Wilo Maldonado
1个回答

7

首先您需要对图片进行解码,操作如下:

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

1
那就是问题所在。我没有解码base64字符串。现在,我将图像作为附件包含,而不是内联显示。 - Wilo Maldonado
$image = str_replace('data:image/png;base64,', '', $image);
$image = str_replace(' ', '+', $image);
Pass this image to your email template and use
$message->embedData(base64_decode($image), 'imagename.png')
- Sushil Thapa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接