如何将图像添加到Laravel 5.3的新通知服务生成的电子邮件中?

2022-08-30 18:36:30

Laravel 5.3引入了一个名为通知的新服务,允许通过简单流畅的语法构造电子邮件(以及其他通知):

    return (new MailMessage)
            ->greeting('Hello!')
            ->line('One of your invoices has been paid!')
            ->action('View Invoice', $url)
            ->line('Thank you for using our application!');

将图像添加到电子邮件通知的雄辩方法是什么?我已经发布了供应商文件以修改基本模板。

我目前的想法是:

  • 作为新的本地类进行扩展,沿用一些其他方法(例如:Illuminate\Notifications\Messages\SimpleMessageSimpleMediaMessage->image(src, url, alt))
  • 修改基本模板(或创建一个特定于基本模板,该模板在通过以下方式构建的媒体阵列上循环SimpleMediaMessage->image
  • 最后,注册自定义通道以允许通知传递带有图像的通知。

对于像电子邮件中的图像这样简单的东西来说,这似乎相当严厉。我错过了什么吗?有没有更好的方法?

为清晰起见,已编辑

当我提到图像时,我的意思是横幅和跟踪图像,这些图像在消息本身中可见(而不是作为单独的附件)。

附图显示a)红色当前可以实现的目标,以及b)紫色显示我正在寻找的内容。

enter image description here

第二次编辑

重新阅读到目前为止发布的答案,特别是@Erics,我看到通过对模板进行非常简单的修改,您实际上可以执行以下操作:

->line("<img src='foo.example/bar.jpg' />")

需要修改模板以允许不安全的标记:

// Note this is in two spots - intro + outro
{{ $line }} --> becomes --> {!! $line !!} 

此方法的缺点:

  1. 可能打开一个安全问题,这是使用{{}}而不是{!!!!}的全部原因。
  2. 图像无法利用内联样式,除非您在电子邮件模板之外执行此操作,例如:

    ->line(“ < img style='max-width:570px;/* 所有其他垃圾,以使图像在电子邮件中看起来正常 */' src='foo.example.bar.jpg' /> ”)


答案 1

您想如何附加?在电子邮件中,您可以引用完整路径,然后以典型的HTML格式将其添加到视图中:

<img src="http://yoursite.com/path/to/image.png">

如果你想让它成为一个真正的文件附件,MailMessage上有一个和方法。这些通常用于PDF或文档附件之类的内容。->attach()attachData

如果你想在源代码中附加和引用附件,那么我猜你需要像你提到的那样扩展类,或者回退到Laravel的方法。Mail::send

由于通知系统被设计为简单和固执己见,我想他们想要涵盖常见的用例,并且使用图像的完整路径比引用样式要简单得多。cid:


答案 2

正如您在 中看到的,Laravel使用Markdown表示法:Mail/resources/html/layout.blade.php

{{ Illuminate\Mail\Markdown::parse($slot) }}

因此,您可以使用方法设置插入图像的格式,其代码如下所示:line()

->line('![your_text](https://image_address);


推荐