web-dev-qa-db-ja.com

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)
  • 基本テンプレートを変更します(または、_->image_を介して構築されたメディア配列をループするSimpleMediaMessageに固有のテンプレートを作成します
  • 最後に、 カスタムチャネル を登録して、通知が画像付きの通知を配信できるようにします。

これは、電子メールの画像のような単純なものにはかなり手間がかかるようです。私は何かが足りないのですか?より良いアプローチはありますか?

わかりやすくするために編集

画像を参照するときは、メッセージ自体に表示されるバナー画像とトレイル画像を意味します(個別の添付ファイルとしてではありません)。

添付の画像は、a)現在達成できることを赤で、b)私が探していることを紫で示しています。

enter image description here

2回目の編集

これまでに投稿された回答、特に@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' />")

23
Chris

どのように取り付けたいですか?電子メールでは、フルパスを参照して、通常のHTML形式でビューに追加することができます。

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

実際の添付ファイルにしたい場合は、MailMessageに->attach()メソッドとattachDataメソッドの両方があります。これらは通常、PDFやドキュメントの添付ファイルなどに使用されます。

ソースで添付ファイルを添付して参照したい場合は、前述のようにクラスを拡張するか、Laravelの_Mail::send_メソッドにフォールバックする必要があると思います。

通知システムはシンプルで意見が分かれるように設計されているため、一般的なユースケースをカバーしたいと考えており、_cid:_ style を参照するよりも画像へのフルパスを使用する方がはるかに簡単です。

12
Eric