Как вы добавляете изображения в электронные письма, созданные новой службой уведомлений 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
- Наконец, зарегистрируйте настраиваемый канал, чтобы уведомления могли отправлять уведомления с изображениями.
Это кажется довольно тяжелым для чего-то простого, как изображения в электронной почте. Я что-то упускаю? Есть ли лучший подход?
Отредактировано для ясности
Когда я обращаюсь к изображениям, я имею в виду изображения баннера и трейла, которые видны в самом сообщении (а не как отдельное приложение).
Прилагаемое изображение показывает 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;/* все остальные нежелательные файлы, чтобы изображения выглядели нормально в электронной почте */' src= 'foo.example.bar.jpg'/" > " )
Ответы
Ответ 1
Как вы хотите присоединить? В письмах вы можете ссылаться на полный путь и просто добавлять его в представление в типичном формате HTML:
<img src="http://yoursite.com/path/to/image.png">
Если вы хотите сделать это реальным прикреплением к файлу, в MailMessage есть метод ->attach()
и attachData
. Они обычно используются для таких вещей, как PDF или вложения документов.
Если вы хотите присоединить и ссылаться на вложение в источнике, то я предполагаю, что вам нужно будет расширить класс, как вы упомянули, или вернуться к методу Laravel Mail::send
.
Поскольку система уведомлений была спроектирована как простая и самоуверенная, я предполагаю, что они хотели охватить общие случаи использования, и гораздо проще использовать полные пути к изображениям и ссылаться на cid:
стиль.
Ответ 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!');