Posted in

Clase Mailable en Laravel >= 5.3

A continuación muestro como usar la clase Mailable. Esta clase representa a un formato de correo electrónico específico. A continuación crearemos como ejemplo el formato para los envios del formulario de contacto de una web.

1- Creamos la clase Mailable ContactForm desde la consola, la clase se creará en la carpeta app/Mail

php artisan make:mail ContactForm

2- En nuestro controlador (p.e. FrontofficeController) añadimos la función que realizará la llamada del envío.

class FrontofficeController extends Controller {

    public function sendForm(Request $request){
        Mail::to('oscar@example.com')->send(new ContactForm($request));
        return back()->with('done', 1);
    }
}

3- En la clase ContactForm realizaremos las siguientes modificaciones para tener los datos del formulario disponibles en la vista.

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class ContactForm extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */

    public $request;

    public function __construct($request)
    {
        $this->request = $request;
    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->from('noreply@example.com', 'AxC')
            ->subject('Formulari de contacte')
            ->markdown('emails.contact-form');
    
        return $this->view('emails.contact-form');
    }
}

4- Una vez hecho esto, pasamos a insertar los datos recibidos del formulario en nuestra vista del mail que enviaremos.

@component('mail::message')
Un usuari ha fet servir el formulari de contacte. <br />
A continuació es mostren les dades rebudes: <br /> <br />
Nom i cognoms: {{ $request->name }} <br />
Correu electrònic: {{ $request->email }} <br />
Telèfon: {{ $request->phone }} <br />
Comentaris: {{ $request->message }}
@endcomponent

Y esto es todo.

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *


The reCAPTCHA verification period has expired. Please reload the page.