
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
Muchas gracias por tu post. Saludos.