使用Laravel发送Base64图像

时间:2016-04-24 23:05:06

标签: php laravel phpmailer html-email laravel-5.2

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

这是在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

它只显示图片在那里而不是内容。我已经验证了基本64字符串,它是正确的。

可能是什么错误?

Laravel Mail Documentation说在消息构建器中使用类似的东西:

laravel mailer

但我对如何正确地做到这一点感到有些失落。另一种选择是将base64字符串动态转换为图像并将其作为附件发送给用户,但我无法将图像存储到服务器中,因此必须将其转换为php中的图像并通过它发送没有实际文件路径的laravel邮件程序。

请告知

1 个答案:

答案 0 :(得分:4)

您必须首先解码图像:

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