Envío y pruebas de emails en Laravel 8 desde localhost

Hermes Cortes
3 min readAug 10, 2021

--

Muchas veces tienes que probar el envío de emails en un desarrollo y no tienes como realizarlo de forma sencilla sin tener que hacer muchas configuraciones en Outlook o Gmail, incluso usar otro servicio como SES (de pago) pero para pruebas no hace falta gastar.

Creación de emails

Ahora bien, si tampoco sabes como enviar un email y usar variables en el cuerpo de tu correo estás en el lugar indicado. Vamos paso por paso.

Para iniciar nos dirigimos a la clásica terminal donde usaremos un comando de artisan que es para crear nuestro correo electrónico.

php artisan make:mail UserPayment --markdown=emails.user.payment

En este ejemplo (claro, siguiendo la premisa de que usas nombres descriptivos) el correo es de confirmación de pago para un usuario, por lo tanto crearemos la clase y también el .blade para el correo electrónico.

La carpeta con la clase estará ubicada en tu raiz y se llamará Mail, es decir a la misma altura que la carpeta Http. Por el lado del .blade que en este caso se llama payment.blade.php se encontrará en resources/views/emails/user (recuerda que los puntos significan carpetas, por lo tanto emails.user significa carpeta emails y carpeta user dentro de emails).

Ahora, como siempre ya tenemos un template sencillo que incluirá lo siguiente:

@component('mail::message')
# Introduction

The body of your message.

@component('mail::button', ['url' => ''])
Button Text
@endcomponent

Thanks,<br>
{{ config('app.name') }}
@endcomponent

Por supuesto y como se puede ver está llamando a otros componentes que son header y footer del email. Para poder modificarlos en la terminal pon:

php artisan vendor:publish --tag=laravel-mail

Se te mostrarán en resources/views/vendor/mail/ y dentro habrán muchas carpetas para que lo personalices a tu gusto, en este caso yo solamente cambiaré la imagen que viene por otra en header.blade.php que se encuentra dentro de resources/views/vendor/mail/html.

Ahora viene la parte donde enviamos nuestro email y la sintaxis básica es:

Mail::to($user->email)->send(new UserPayment($user));

La descripción sencilla y leyendo el código sería, envíame un email al correo del paréntesis y mantén los datos de $user pues los usaremos en la vista, por eso es que está como parámetro en esa clase.

En $user nosotros tenemos muchos más datos que usaremos en la vista del email pero ¿cómo? pues, por eso lo pasamos como parámetro y ahora en la clase UserPayment veremos algo como lo siguiente:

<?phpnamespace App\Mail;use App\Models\Quotation;use Illuminate\Bus\Queueable;use Illuminate\Mail\Mailable;use Illuminate\Queue\SerializesModels;use Illuminate\Contracts\Queue\ShouldQueue;class UserPayment extends Mailable{use Queueable, SerializesModels;public $user;/*** Create a new message instance.** @return void*/public function __construct(UserPayment $user){$this->user = $user;//}/*** Build the message.** @return $this*/public function build(){return $this->subject('Asunto del email')->markdown('emails.user.payment');}}

Te he agregado lo que hace falta y está en negritas, con esto podrás usar todo el objeto y así mismo ya hacer uso de las clásicas {{}} de blade haciendo referencia al objeto dentro del cuerpo del mail, por ejemplo:

{{$user->nombre}}

Te mostraría en el correo ya la información que tengas almacenada. Ya solo se trata de que personalices tu email con el texto e información que desees y listo.

Envío de emails de pruebas

Ya tenemos nuestro correo, no queremos configurar (pues solo son pruebas) cosas tan complejas pero si revisar que esten saliendo correctamente. Para eso existe Mailtrap que se trata de un servicio con el cual podremos “enviar” emails y hacer nuestro debug antes de lanzar a productivo.

Una vez registrados nos saldrá una pantalla donde elegiremos Laravel 7+ y tendremos los datos así:

Mismos que vamos a poner en nuestro .env y agregar al final

MAIL_FROM_ADDRESS=nuestromail@pruebas.com

Una vez hecho esto basta con hacer el proceso que detonará el email y si no cambiaste el template por default obtendrás en tu bandeja de entrada de Mailtrap lo siguiente:

--

--

Hermes Cortes

Experto en ciberseguridad y programador full stack. Me gustan los videojuegos y la tecnología.