php - ¿Cómo agregar imágenes a los correos electrónicos generados por el nuevo servicio de notificación de Laravel 5.3?
laravel-5 laravel-5.3 (2)
¿Cómo quieres adjuntar? En los correos electrónicos puede hacer referencia a la ruta completa y simplemente agregarla a la vista en el formato HTML típico:
<img src="http://yoursite.com/path/to/image.png">
Si desea convertirlo en un archivo adjunto real, hay un método ->attach()
y attachData
en el MailMessage. Estos se utilizan normalmente para cosas como archivos PDF o documentos adjuntos.
Si desea adjuntar y hacer referencia al archivo adjunto en la fuente, supongo que tendrá que ampliar la clase como mencionó o recurrir al método de Mail::send
Laravel''s Mail::send
.
Dado que el sistema de notificación fue diseñado para ser simple y de opinión, imagino que querían cubrir los casos de uso comunes y es mucho más sencillo utilizar rutas completas a las imágenes en lugar de hacer referencia al style cid:
.
Laravel 5.3 introduce un nuevo servicio llamado notifications , que permite la construcción de correos electrónicos (entre otras notificaciones) a través de una sintaxis simple y fluida:
return (new MailMessage)
->greeting(''Hello!'')
->line(''One of your invoices has been paid!'')
->action(''View Invoice'', $url)
->line(''Thank you for using our application!'');
¿Cuál es un enfoque elocuente para agregar imágenes a las notificaciones por correo electrónico? Ya he publicado los archivos del proveedor para modificar la plantilla base.
Mis pensamientos están actualmente en:
- Extienda
Illuminate/Notifications/Messages/SimpleMessage
como una nueva clase local, siguiendo las líneas deSimpleMediaMessage
con algunos métodos adicionales (ejemplo:->image(src, url, alt)
) - Modifique la plantilla base (o cree una específica para
SimpleMediaMessage
queSimpleMediaMessage
la matriz de medios creada a través de->image
- Finalmente, registre un canal personalizado para permitir que las notificaciones envíen notificaciones con imágenes.
Esto parece bastante pesado para algo tan simple como las imágenes en el correo electrónico. ¿Me estoy perdiendo de algo? ¿Hay un mejor enfoque?
Editado para mayor claridad
Cuando me refiero a imágenes, me refiero a las imágenes de banner y rastro que son visibles en el mensaje en sí (no como un archivo adjunto separado).
La imagen adjunta muestra a) en rojo lo que se puede lograr actualmente yb) en púrpura lo que estoy buscando.
Segunda edición
Al volver a leer las respuestas publicadas hasta ahora, especialmente @Erics, veo que con una modificación muy simple de la plantilla, de hecho, puede hacer lo siguiente:
->line("<img src=''foo.example/bar.jpg'' />")
La plantilla debe modificarse para permitir un marcado no seguro:
// Note this is in two spots - intro + outro
{{ $line }} --> becomes --> {!! $line !!}
Desventajas de este método:
- Posiblemente abriendo un problema de seguridad, toda la razón de usar {{}} sobre {!!!!}
La imagen no puede aprovechar los estilos en línea, a menos que lo haga fuera de la plantilla de correo electrónico, por ejemplo:
-> line ("<img style = ''max-width: 570px; / * todos los demás archivos no deseados para hacer que las imágenes se vean bien en el correo electrónico * /'' src = ''foo.example.bar.jpg'' />")
Use la función nl2br ('''') para tomar su imagen y luego la agrega en su correo electrónico
$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!'');