BLANTERORIONv101

Kirim Email Dengan Lampiran PDF di Laravel 9

16 Agustus 2022

Pada postingan kali ini, saya membagikan sebuah tutorial tentang cara generate file pdf dan mengirimnya melalui email dengan lampiran pdf. Dan saya juga akan memberikan sebuah contoh sederhana tentang laravel mail attachment pdf.

Untuk tutorial ini, Anda dapat gunakan di laravel 6, laravel 7, laravel 8 dan laravel 9.

Di sini saya akan menggunakan aplikasi laravel yang sudah ada, jadi untuk Anda yang belum memiliki proyek atau aplikasi laravel. Anda bisa menginstalnya terlebih dahulu, dengan menggunakan perintah di bawah ini:

composer create-project --prefer-dist laravel/laravel example-app

Jika sudah, silakan ikuti langkah-langkah berikut ini:

1. Instal Paket dompdf

Untuk membuat file .pdf, kita akan menggunakan package atau paket dompdf. Jadi kita perlu untuk menginstalnya di proyek atau aplikasi laravel kita. Anda bisa jalankan perintah di bawah ini pada terminal, untuk menginstalnya.

composer require barryvdh/laravel-dompdf

Jika sudah berhasil meginstal paket, Anda perlu untuk pergi ke menambahkan service provider dan aliases pada file config/app.php seperti dibawah ini:

'providers' => [
	....
	Barryvdh\DomPDF\ServiceProvider::class,
],
  
'aliases' => [
	....
	'PDF' => Barryvdh\DomPDF\Facade::class,
]

2.  Lakukan Konfigurasi

Pada langkah ini, kita perlu melakukan konfigurasi untuk proses pengiriman email. Silahkan buka file .env dan ubah bagian-bagian yang sama seperti di bawah ini:

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=example@gmail.com
MAIL_PASSWORD=jdtdnjgxvmlrkzxh
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS="juankarlymatheus@gmail.com"
MAIL_FROM_NAME="${APP_NAME}"

*CATATAN : Jika Anda bingung dengan kode di atas, Anda bisa baca artikel saya tentang Cara Menggunakan SMTP Gmail.


3. Tambahkan Route

Pada langkah ini, kita akan tembahkan sebuah route. Jadi silahkan buka direktori routes/web.php dan tambahakan route seperti di bawah ini:

Route::get('send-email-pdf', [PostController::class, 'sendPDF'])->name('sendPDF');

4.  Tambahkan Controller

Kita akan membuat controller untuk membuat fungsi generate file pdf dan kirim melalui email. Jika Anda belum memiliki file controller, Anda bisa membuatnya dengan perintah di bawah ini:

php artisan make:controller PostsController

Tapi jika sudah ada, silahkan buat dan ikuti fungsi seperti di bawah ini:

<?php

namespace App\Http\Controllers;

use App\Models\Post;
use PDF;
use Mail;

class PostController extends Controller
{
    
    public function sendPDF()
    {
        $data['email'] = 'sarjanait.com@gmail.com'; //email penerima
        $data['subject'] = 'Data Postingan Terakhir'; // subject email
    
        $posts['body'] = Post::latest()->get(); //Ambil data postingan dari table di database
		
        //Ganti posts.postsPDF dengan file yang akan di jadikan .pdf
        $pdf = PDF::loadView('posts.postsPDF', $posts); // generate file .pdf
        
        //Ganti posts.sendPDF dengan file yang akan di jadikan body email
        Mail::send('posts.sendPDF', $posts, function($message)use($data, $pdf) {
            $message->to($data['email'], $data['email'])
                    ->subject($data['subject'])
                    ->attachData($pdf->output(), time() .'_'.'data.pdf');
        }); //kirim lampiran file pdf melakui email 

        return back()->with('success','Berhasil kirim pdf ke email');

    }

*Penjelasan

  • Variabel $data kita isikan email penerima dan subject email;
  • Variabel $posts kita mengambil data postingan terakhir dari tabel posts di database;
  • Variabel $pdf untuk generate file .pdf;
  • Mail::send untuk mengirimkan email beserta lampiran .pdf;


5. Buat File Tampilan

Pada langkah ini, kita akan membuat file tampilan email dan pdf.

Buat file ini pada direktori resources/views/**. Di sini saya akan beri nama sesuai dengan yang sudah saya masukan pada variabel $pdf langkah 4 dengan nama postPDF.blade.php pada folder posts.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Sarjanait.com</title>
</head>
<body>
    <h1>Data Postingan</h1>
    <p>
        <ul>    
            @php
                $no = 1;
            @endphp
            @foreach ($body as $hasil)
            <li>{{ $no++ }}. {{ $hasil->title }}</li>
            @endforeach
        </ul>
    </p>
</body>
</html>

Dan untuk file ini, letak direktorinya juga sama seperti file di atas. Saya akan beri nama sendPDF.blade.php, sesuai dengan yang saya masukan di Mail::send langkah 4.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Sarjanait.com</title>
</head>
<body>
    <h1>Email Dari SarjanaIT.com</h1>
    <p>
        Testing Kirim File PDF ke email di Laravel
    </p>
    <br>
    <p>
        Terimakasih.
    </p>
</body>
</html>

Dan selesai.

Silahkan jalankan aplikasi Anda dengan perintah php artisan serve. Dan buka browser yang Anda gunakan kemudian ketik URL seperti yang sudah di buat pada langkah 3.

http://localhost:8000/send-email-pdf

Kirim Email Dengan Lampiran PDF di Laravel 9
Gambar 1. Preview


Oke kurang lebih seperti itu ya untuk pembahasan kita tentang tutorial Kirim Email Dengan Lampiran PDF di Laravel 9. Jika Anda mendapatkan error, silahkan bertanya pada kolom komentar di bawah ini. Terimakasih.

Komentar