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

时间:2016-10-19 10:19:00

标签: php laravel laravel-5 laravel-5.3

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

    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\SimpleMessage
  • SimpleMediaMessage扩展为->image(src, url, alt)的新本地类。
  • 修改基本模板(或创建一个特定于SimpleMediaMessage的模板,该模板通过->image
  • 构建的媒体阵列循环
  • 最后,注册custom channel以允许通知发送包含图片的通知。

对于像电子邮件中的图像这样简单的事情,这似乎非常沉重。我错过了什么吗?有更好的方法吗?

为了清晰而编辑

当我提到图像时,我指的是在消息本身中可见的横幅和轨迹图像(而不是单独的附件)。

附图显示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. 的全部原因
  3. 除非您在电子邮件模板之外执行此操作,否则图片无法利用内联样式,例如:

    - &gt; line(“&lt; img style ='max-width:570px; / *所有其他垃圾,以使图片在电子邮件中看起来不错* /'src ='foo.example.bar.jpg'/&gt ;“)

3 个答案:

答案 0 :(得分:12)

你想怎么附上?在电子邮件中,您可以引用完整路径,只需将其以典型的HTML格式添加到视图中:

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

如果要使其成为真正的文件附件,MailMessage上同时存在->attach()attachData方法。这些通常用于PDF或文档附件等内容。

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

由于通知系统的设计简单而且自以为是,我想他们想要涵盖常见的用例,使用完整的图像路径与引用cid: style相比要简单得多。

答案 1 :(得分:0)

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

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

因此您可以使用 line() 方法格式化插入图像,代码如下:

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

答案 2 :(得分:-2)

使用 nl2br('')功能拍摄图像,然后将其添加到电子邮件中

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