如何将图像添加到 Laravel 5.3 的新通知服务生成的电子邮件中?
How do you add images to emails generated by Laravel 5.3's new notification service?
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!');
将图像添加到电子邮件通知的 eloquent 方法是什么?我已经发布了供应商文件来修改基本模板。
我目前的想法是:
- 将
Illuminate\Notifications\Messages\SimpleMessage
扩展为新的本地 class,沿用 SimpleMediaMessage
的方法并增加一些方法(例如:->image(src, url, alt)
)
- 修改基本模板(或创建一个特定于
SimpleMediaMessage
的模板,它循环遍历通过 ->image
构建的媒体阵列
- 最后,注册一个 custom channel 以允许通知发送带有图像的通知。
对于像电子邮件中的图像这样简单的东西,这似乎很费力。我错过了什么吗?有没有更好的方法?
为清楚起见进行了编辑
当我提到图像时,我指的是邮件本身可见的横幅和拖尾图像(不是作为单独的附件)。
所附图片以红色显示 a) 当前可以实现的目标,b) 以紫色显示我正在寻找的目标。
第二次编辑
重新阅读到目前为止发布的答案,尤其是@Erics,我发现通过对模板进行非常简单的修改,您实际上可以执行以下操作:
->line("<img src='foo.example/bar.jpg' />")
需要修改模板以允许不安全标记:
// Note this is in two spots - intro + outro
{{ $line }} --> becomes --> {!! $line !!}
此方法的缺点:
- 可能会引发安全问题,这是在 {!!!!} 上使用 {{}} 的全部原因
图像无法利用内联样式,除非您在电子邮件模板之外进行,例如:
->line(" < img style='max-width:570px;/* all the other junk to make images look ok in email */' src='foo.example.bar.jpg' /> ")
您想如何附加?在电子邮件中,您可以引用完整路径并以典型的 HTML 格式将其添加到视图中:
<img src="http://yoursite.com/path/to/image.png">
如果你想让它成为真正的文件附件,MailMessage 上有 ->attach()
和 attachData
方法。这些通常用于 PDF 或文档附件等内容。
如果您想在源代码中附加和引用附件,那么我猜您需要像您提到的那样扩展 class 或回退到 Laravel 的 Mail::send
方法。
由于通知系统的设计简单且自以为是,我想他们想要涵盖常见的用例,使用图像的完整路径比引用 cid:
style 要简单得多。
正如你在Mail/resources/html/layout.blade.php
中看到的,Laravel使用了Markdown表示法:
{{ Illuminate\Mail\Markdown::parse($slot) }}
因此您可以使用 line()
方法格式化插入图像,代码如下:
->line(';
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!');
将图像添加到电子邮件通知的 eloquent 方法是什么?我已经发布了供应商文件来修改基本模板。
我目前的想法是:
- 将
Illuminate\Notifications\Messages\SimpleMessage
扩展为新的本地 class,沿用SimpleMediaMessage
的方法并增加一些方法(例如:->image(src, url, alt)
) - 修改基本模板(或创建一个特定于
SimpleMediaMessage
的模板,它循环遍历通过->image
构建的媒体阵列
- 最后,注册一个 custom channel 以允许通知发送带有图像的通知。
对于像电子邮件中的图像这样简单的东西,这似乎很费力。我错过了什么吗?有没有更好的方法?
为清楚起见进行了编辑
当我提到图像时,我指的是邮件本身可见的横幅和拖尾图像(不是作为单独的附件)。
所附图片以红色显示 a) 当前可以实现的目标,b) 以紫色显示我正在寻找的目标。
第二次编辑
重新阅读到目前为止发布的答案,尤其是@Erics,我发现通过对模板进行非常简单的修改,您实际上可以执行以下操作:
->line("<img src='foo.example/bar.jpg' />")
需要修改模板以允许不安全标记:
// Note this is in two spots - intro + outro
{{ $line }} --> becomes --> {!! $line !!}
此方法的缺点:
- 可能会引发安全问题,这是在 {!!!!} 上使用 {{}} 的全部原因
图像无法利用内联样式,除非您在电子邮件模板之外进行,例如:
->line(" < img style='max-width:570px;/* all the other junk to make images look ok in email */' src='foo.example.bar.jpg' /> ")
您想如何附加?在电子邮件中,您可以引用完整路径并以典型的 HTML 格式将其添加到视图中:
<img src="http://yoursite.com/path/to/image.png">
如果你想让它成为真正的文件附件,MailMessage 上有 ->attach()
和 attachData
方法。这些通常用于 PDF 或文档附件等内容。
如果您想在源代码中附加和引用附件,那么我猜您需要像您提到的那样扩展 class 或回退到 Laravel 的 Mail::send
方法。
由于通知系统的设计简单且自以为是,我想他们想要涵盖常见的用例,使用图像的完整路径比引用 cid:
style 要简单得多。
正如你在Mail/resources/html/layout.blade.php
中看到的,Laravel使用了Markdown表示法:
{{ Illuminate\Mail\Markdown::parse($slot) }}
因此您可以使用 line()
方法格式化插入图像,代码如下:
->line(';