Generar PDF y adjuntar a correo electrónico

Edinson carranza saldaña
Tiempo de lectura: 2 minutos

Hola laravelos, en este post vamos a generar un PDF pero a la misma ves vamos adjuntarlo via email, para esta funcionaldiad, usaremos Laravel 8.9.0.

Instalar Laravel y configuraciones básicas

Cada proyecto para pruebas o demostración es necesario contar con una instalación de laravel.

Instalar paquete y configuración

Vamos a necesitar un paquete de instalación, si aun no te manejas con la terminal? te recomiendo solo copiar y pegar lo que veas en pantalla.

composer require barryvdh/laravel-dompdf

Muy bien de esta manera, estamos integrando en nuestro proyecto laravel el modulo tanto en nuestro composer como los archivos locales que se guardan en la carpeta vendors.

SMPT: Antes de continuar, vamos a configurar nuestro servicio de SMPT, mayormente esta configuración lo hacemos en el .env, recuerden contar con estos datos que son muy importantes, si usas un hosting, puedes crear un email y luego aplicar en la configuración, tambien se puede usar un gmail de google.

MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME=NAME

Crear controlador

Bien, en esta oportunidad vamos a crear un controlador para realizar nuestras pruebas correspondientes.

<?php

namespace App\Http\Controllers

use PDF;
use MAIL;

class TestController extends Controller
{

    public function sendMailWithPDF()
    {
        $data["email"] = "test@gmail.com";
        $data["title"] = "Welcome to Edinson";
        $data["body"] = "This is the email body.";

        $pdf = PDF::loadView('mail', $data);

        Mail::send('mail', $data, function ($message) use ($data, $pdf) {
            $message->to($data["email"], $data["email"])
                ->subject($data["title"])
                ->attachData($pdf->output(), "test.pdf");
        });

        dd('Email has been sent successfully');
    }
}

Crear vista PDF

Bien una ves creado nuestro controlador, vamos a crear una simple vista que llamaremos mail.blade.php.

<!DOCTYPE html>
<html>
<head>
    <title>Edinsoncs</title>
</head>
<body>

<h3>{{ $title }}</h3>
<p>{{ $body }}</p>

<p>
    Thank,<br/>
    edinsoncs.com
</p>
</body>
</html>

Definir Rutas

Vamos abrir nuestro archivo routes/web.php

use App\Http\Controllers\TestController;
use Illuminate\Support\Facades\Route;

Route::get('send-email', [TestController::class, 'sendMailWithPDF']);

Ahora ejecuta el proyecto:

php artisan serve

Visite la ruta de envío de correo electrónico:

http://localhost:8000/send-email

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

preloader image