Skip to content

All topics  /  Laravel

Laravel 8 Generate PDF And Attach To Email Example

Laravel ·

Teams applying “Laravel 8 Generate PDF And Attach To Email Example” in a production project can use the official example to record implementation, review and debugging time, then compare that effort with tests and shipped functionality instead of treating activity as performance by itself.

Before copying the example into a live application, confirm version-specific behaviour with the official Laravel website and test it against the project’s actual database and runtime.

Hi Dev,

In this article I’m going to share how to generate PDF and attach it to the email.

I will give you step by step implementation of how to use laravel 8 generate PDF and attach to email example.So let's follow bellow step.

Step 1 : Install Laravel Application


first, we will install laravel fresh version. so let's run bellow command:

composer create-project --prefer-dist laravel/laravel blog

Step 2 :Install Package & Config

At first we need to install barryvdh/laravel-dompdf package. Run this composer command to install the package:

composer require barryvdh/laravel-dompdf

Now open .env file and set your SMTP credentials:

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="${APP_NAME}"

Step 3 : Create Controller

Create a test controller and make a function to send email:

app/HTTP/Controllers/TestController

<?php
namespace App\Http\Controllers;
use PDF;
use Mail;
class TestController extends Controller
{
    public function sendMailWithPDF()
    {
        $data["email"] = "[email protected]";
        $data["title"] = "Welcome to NiceSnippets.com";
        $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');
    }
}

Step 4 : Create PDF View

Now we’ll create the PDF view which will be attached to the email. Go to resources>views folder and create mail.blade.php file. Then paste this simple PDF view:

resources/views/mail.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 8 Generate PDF And Attach To Email Example - NiceSnippets.com</title>
</head>
<body>
<h3>{{ $title }}</h3>
<p>{{ $body }}</p>
<p>
    Regards,<br/>
    NiceSnippets.com
</p>
</body>
</html>

Step 5 : Define Routes

routes/web.php

<?php
use App\Http\Controllers\TestController;
use Illuminate\Support\Facades\Route;
Route::get('send-email', [TestController::class, 'sendMailWithPDF']);

Now run the project:

php artisan serve

Visit the send email route:

http://localhost:8000/send-email