laravel

Enviar correo con Laravel – Ejemplo

En este artículo te enseñaré a enviar un correo con Laravel, usando el servidor de correos que tengas instalado en tu servidor web o logueando en un archivo.

Para ejemplificar vamos a enviar un correo electrónico usando una vista a la que le vamos a pasar algunos datos.

¿Qué vamos a hacer?

Te voy a mostrar un ejemplo de cómo enviar un correo con Laravel.

Voy a poner un ejemplo para enviar una notificación a un tutor de un alumno para que se entere de que su hijo no asistió a la escuela, esto es porque ando trabajando en un control escolar.

Configurando driver

Con Laravel podemos enviar un correo de distintas maneras. Por ejemplo, podemos enviar un correo con gmail, pero también podemos usar un servidor local o el archivo de log.

En mi caso usaré el log, así que en el archivo .env lo configuro así:

MAIL_DRIVER=log

Tú lo puedes configurar como lo desees.

Remitente

Dentro del archivo .env voy a configurar el nombre y el remitente global, pues todos serán de la misma dirección, quedando así:

MAIL_FROM_ADDRESS=ejemplo@parzibyte.me
MAIL_FROM_NAME=Luis

Cuerpo del correo

Podemos usar Blade para renderizar la plantilla del correo electrónico. En este caso la coloqué dentro de resources/views/correos/asistencia_alumno.blade.php y se ve así:

<h1>Informe de asistencia</h1>
<p>Por este medio se le informa que el
    alumno {{$alumno->nombre}} {{$alumno->apellido_paterno}} {{$alumno->apellido_materno}} no ha asistido a clases el
    día de hoy ({{$fecha}})</p>

Es una vista que necesita de la variable $alumno y la variable $fecha. Así de simple.

Generación de mailable para enviar correo con Laravel

Para este tipo de necesidades, Laravel provee los Mailables, que son clases que nos ayudan a enviar correos electrónicos. Puedes crear uno usando artisan o ver cómo es el archivo más abajo. Si lo haces con artisan, es:

php artisan make:mail NombreDelMailable

Lo que creará un archivo en app/Mail. Ahora, dentro de su constructor voy a esperar las variables que le pasaré a la vista mostrada anteriormente.

Además, en el método build regresaré la vista pasándole los datos con el método with.

<?php

namespace App\Mail;

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

class NotificacionAsistenciaAlumno extends Mailable
{
    use Queueable, SerializesModels;
    protected $alumno, $fecha;

    /**
     * Create a new message instance.
     *
     * @return void
     */    public function __construct($alumno, $fecha)
    {
        $this->alumno = $alumno;
        $this->fecha = $fecha;
    }

    /**
     * Build the message.
     *
     * @return $this
     */    public function build()
    {
        return $this
            ->view('correos.asistencia_alumno')
            ->subject("Notificación de asistencia")
            ->with([
                "alumno" => $this->alumno,
                "fecha" => $this->fecha,
            ]);
    }
}

El método importante es build, pues en el mismo colocamos para quién será.

Enviar correo con Laravel

Ahora que tenemos al mailable simplemente creamos una instancia del mismo e indicamos la dirección a donde se envía. Por ejemplo:

<?php
$mailable = new NotificacionAsistenciaAlumno($alumno, $fecha);
Mail::to("ejemplo@gmail.com")->send($mailable);

Y ya en un ejemplo completo lo tengo dentro de mi controlador:

<?php
private function enviarCorreoFalta($idAlumno, $fecha)
{
    $alumno = Alumno::find($idAlumno);
    $tutor = Tutor::find($alumno->id_tutor);
    $mailable = new NotificacionAsistenciaAlumno($alumno, $fecha);
    Mail::to($tutor->correo)->send($mailable);
}

Al enviarlo y abrir el log el mensaje es correcto:

Enviar correo con Laravel – Revisando correo enviado en Log

Obviamente en tu servidor vas a usar smpt o mail como driver.

Conclusión

Como siempre lo digo, la documentación oficial es la mejor fuente de aprendizaje, ya que aunque no tiene tantos ejemplos, documenta el funcionamiento.

Mira más tutoriales de Laravel en mi blog.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Ver comentarios

  • Hola que tal, muchas gracias por el aporte, pero me queda una duda respecto a los mails, existe alguna manera en la que yo pueda recibir o detectar un error ocasionado por el mail, es decir, si el correo entrante no existe, recibir un response del proveedor de servicio, algo por el estilo

    • Muchas gracias Luis, me documentaré más al respecto, realmente estoy muy agradecido con tus aportes, me has ayudado a salir de dudas en varias ocasiones, deseo te siga siendo posible seguir aportando, felicidades.

    • Me parece que alguna función al enviar el correo debe regresar false si hubo algún error, pero para no equivocarme le invito a leer la documentación de Laravel y PHP
      Saludos!

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

2 días hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

1 semana hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

1 semana hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

1 semana hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

1 semana hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

1 semana hace

Esta web usa cookies.