首页 > 解决方案 > Laravel 二维码在发送电子邮件时不起作用

问题描述

我正在使用 Laravel 版本“5.8”

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

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

 {!! 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>

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

标签: phplaravellaravel-5npm

解决方案


我有同样的问题,但我正在使用 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()。


推荐阅读