Laravel Qr 代码在发送电子邮件时不起作用

时间:2021-01-22 20:45:09

标签: php laravel laravel-5 npm

我使用的是 Laravel 版本“5.8”

我已经安装了 composer require simplesoftwareio/simple-qrcode - 生成二维码

要在视图中生成二维码,我正在使用此代码

 {!! QrCode::size(80)->generate('test data' ); !!}

但是当我通过邮件发送视图时,我没有通过邮件收到二维码

这是我的控制器代码

        $email = $userInfo['email'];
        $name = $userInfo['fname'];
        $subject = 'Test mail';
        $ccmail = 'test@gmail.com';
        $body = 's';
        Mail::to($email)->send(new Invitationmail($name,$subject,$ccmail,$body,$invitation_id));

查看代码

  </div>
    <td>{!! QrCode::size(80)->generate('asas' ); !!}</td>
    {!! QrCode::size(200)->generate('W3Adda Laravel Tutorial'); !!}
  <div>

有人可以帮我解决这些问题吗? 谢谢

1 个答案:

答案 0 :(得分:1)

我遇到了同样的问题,但我使用的是 laravel8。我在别处找到了一些答案,其中向我展示了如何创建 PNG(默认情况下,QrCode 创建一个大多数电子邮件客户端不会显示的 svg)。

我使用我发现的示例将 QR 代码创建为 png,当我在浏览器的虚拟刀片上查看我的电子邮件内容时,该代码非常有效。我使用了以下代码:

<img src="data:image/png;base64, {!! base64_encode(QrCode::format('png')->size(100)->generate('QrCode as PNG image!')) !!}" />

但是,许多电子邮件服务(包括 Gmail)不显示使用上述内联 base64 的图像。相反,他们要求您将 base64 图像作为附件添加到电子邮件中,然后在 img src 中引用该附件。

谢天谢地,laravel(我使用的是 laravel8)有一个非常酷的函数可以为您完成这项工作,所以我的代码最终看起来像这样(有效):

              <?php
                  $qrCodeAsPng = QrCode::format('png')->size(500)->generate("my text for the QR code");
              ?>
              <img src="{{ $message->embedData($qrCodeAsPng, 'nameForAttachment.png') }}" />

$message 变量存在于在 laravel 中作为电子邮件发送的每个刀片中。就我而言,我不想在服务器上创建实际图像,但如果您想使用已存储的图像,则可以使用 $message->embed()。