Laravel 11 Send Email with Attachment Example Tutorial

Laravel 11 Send Email with Attachment Example Tutorial

In Laravel 11, create a mailable class and attachment (pdf, txt, jpg, png, CSV) in it and then make a controller to send email with the attached file.

Here are steps to send email with attachments using SMTP and mailable class:

Step 1 – Setup New Laravel 11 Project

To set the new Laravel 11 application on the server you can use the given command:

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

Step 2 – Configure Mail Server

Open the .env file in the root directory of your Laravel application, and configure mail server details in it; Something like this:

MAIL_USERNAME=Add your user name here
MAIL_PASSWORD=Add your password here

To allow non-secure apps to access Gmail to send emails, you can go to your Gmail settings here and click Enable less secure apps.

Step 3 – Create PDF Mail Class

Run the following command to create a mail class:

php artisan make:mail PDFMail

Edit PDFMail.php file from app/mail folder and Attach the PDF file to this mail class:

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;

class PDFMail extends Mailable
use Queueable, SerializesModels;

* Create a new message instance.
public function __construct(private string $title, private string $body)

* Get the message envelope.
public function envelope(): Envelope
return new Envelope(
subject: 'Welcome on',

* Get the message content definition.
public function content(): Content
return new Content(
view: 'emails.pdfMail',
with: [
'title' => $this->title,
'body' => $this->body,

* Get the attachments for the message.
* @return array<int, \Illuminate\Mail\Mailables\Attachment>
public function attachments(): array
return [

Step 4 – Define Route

Define a route in the web.php file to handle the request to send mail; Something like this:

use App\Http\Controllers\SendPdfController;

Route::get('send-email-pdf', [SendPdfController::class, 'sendEmailPDF']);

Step 5 – Create a Controller File

Run the following command to make a controller file to handle the email sending process:

php artisan make:controller SendPdfController

Open a SendPdfController.php controller file from app/http/controller folder and update the following code into it:


namespace App\Http\Controllers;

use App\Mail\PDFMail;
use Illuminate\Support\Facades\Mail;

class SendPdfController extends Controller
public function sendEmailPDF()
$title = 'PDF Mail from';
$body = 'Here is attachement file from';

Mail::to('[email protected]')->send(new PDFMail($title, $body));

return "Email with pdf has been sent successfully!";

Step 6 – Create an Email View

Create a pdfMail.blade.php file inside the resources/views/emails folder and add the following HTML code into it:

<!DOCTYPE html>
<title>{{ $title }}</title>
<p>{{ $body }}</p>

Step 7 – Test Application

Run artisan serve command to start the application server for testing:

php artisan serve

Open browser with URL to send mail with pdf from laravel 11 application.


That’s it! When you call the sendEmailPDF() method, it will send email the generated PDF file attached.

Recommended Guides


Greetings, I'm Devendra Dode, a full-stack developer, entrepreneur, and the proud owner of My passion lies in crafting informative tutorials and offering valuable tips to assist fellow developers on their coding journey. Within my content, I cover a spectrum of technologies, including PHP, Python, JavaScript, jQuery, Laravel, Livewire, CodeIgniter, Node.js, Express.js, Vue.js, Angular.js, React.js, MySQL, MongoDB, REST APIs, Windows, XAMPP, Linux, Ubuntu, Amazon AWS, Composer, SEO, WordPress, SSL, and Bootstrap. Whether you're starting out or looking for advanced examples, I provide step-by-step guides and practical demonstrations to make your learning experience seamless. Let's explore the diverse realms of coding together.

Leave a Reply

Your email address will not be published. Required fields are marked *