php - print - Laravel mail: pasar cadena en lugar de ver
pasar variable laravel a javascript (6)
Quiero enviar un correo electrónico de confirmación usando laravel. La función laravel Mail :: send () solo parece aceptar una ruta a un archivo en el sistema. El problema es que mis plantillas postales se almacenan en la base de datos y no en un archivo en el sistema.
¿Cómo puedo pasar contenido simple al correo electrónico?
Ejemplo:
$content = "Hi,welcome user!";
Mail::send($content,$data,function(){});
La clase Mailer pasa una cadena para addContent
que a través de otros métodos llama a views->make()
. Como resultado, pasar una cadena de contenido directamente no funcionará, ya que tratará de cargar una vista con ese nombre.
Lo que tendrá que hacer es crear una vista que simplemente eche $content
// mail-template.php
<?php echo $content; ?>
Y luego inserta tu cadena en esa vista en tiempo de ejecución.
$content = "Hi,welcome user!";
$data = [
''content'' => $content
];
Mail::send(''mail-template'', $data, function() { });
No está directamente relacionado con la pregunta, pero para los que buscan establecer la versión de texto sin formato de su correo electrónico mientras conservan la versión HTML personalizada, puede usar este ejemplo:
Mail::raw([], function($message) {
$message->from(''[email protected]'', ''Company name'');
$message->to(''[email protected]'');
$message->subject(''5% off all our website'');
$message->setBody( ''<html><h1>5% off its awesome</h1><p>Go get it now !</p></html>'', ''text/html'' );
$message->addPart("5% off its awesome/n/nGo get it now!", ''text/plain'');
});
Si pregunta "¿por qué no establece el primer argumento como texto sin formato?", Realicé una prueba y solo toma la parte html, ignorando la parte sin formato.
Si necesita usar una variable adicional, la función anónima necesitará que use la instrucción use()
siguiente manera:
Mail::raw([], function($message) use($html, $plain, $to, $subject, $formEmail, $formName){
$message->from($fromEmail, $fromName);
$message->to($to);
$message->subject($subject);
$message->setBody($html, ''text/html'' ); // dont miss the ''<html></html>'' if the email dont contains it to decrease your spam score !!
$message->addPart($plain, ''text/plain'');
});
Espero que les ayude amigos.
Para correos electrónicos Html
Mail::send(array(), array(), function ($message) use ($html) {
$message->to(..)
->subject(..)
->from(..)
->setBody($html, ''text/html'');
});
Para enviar html, texto, etc. crudos usando Laravel Mailables, puedes
anula Mailable-> send () en su Mailable y allí, use el método en respuestas anteriores:
send([], [], function($message){ $message->setBody() } )
No es necesario llamar a $ this-> view () en su función de compilación en absoluto.
Si estuvieras usando mailables. Puedes hacer algo como esto en el método de compilación:
public function build()
{
return $this->view(''email'')
->with([''html''=>''This is the message'']);
}
Y solo sigue y crea la vista de hoja email.blade.php
en tu carpeta de recursos.
Luego, en la hoja puedes hacer referencia a la cadena usando la sintaxis de la hoja de lazarina
<html>
<body>
{{$html}}
</body>
</html>
o
<html>
<body>
{!!$html!!}
</body>
</html>
Si su texto sin formato contiene marca HTML, espero que esto funcione para aquellos que tienen plantillas almacenadas en la base de datos y quiere aprovechar la clase Mailables en Laravel.
actualización: en Laravel 5 puedes usar raw
lugar:
Mail::raw(''Hi, welcome user!'', function ($message) {
$message->to(..)
->subject(..);
});
Así es como lo haces:
Mail::send([], [], function ($message) {
$message->to(..)
->subject(..)
// here comes what you want
->setBody(''Hi, welcome user!''); // assuming text/plain
// or:
->setBody(''<h1>Hi, welcome user!</h1>'', ''text/html''); // for HTML rich messages
});