ahmadajah03 Tue Jan 2021 2 years ago

Laravel - Contoh Generate PDF dan Attach ke Email

Halo Dev, di artikel ini saya akan membagikan cara menghasilkan PDF dan melampirkannya ke email. Saya sedang menguji di Laravel 8.9.0 . Mari kita mulai:

Instal Laravel dan Konfigurasi Dasar

Setiap proyek Laravel membutuhkan hal ini. Itu sebabnya saya menulis artikel tentang topik ini. Silakan lihat bagian ini dari sini: Instal Laravel dan Konfigurasi Dasar.

Instal Package & Config

Pertama kita perlu menginstal barryvdh/laravel-dompdf paket. Jalankan perintah komposer ini untuk menginstal paket:

composer require barryvdh/laravel-dompdf

Sekarang buka file .env dan atur kredensial SMTP Anda:

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}"

Buat Controller

Buat controller test dan buat fungsi untuk mengirim email:

<?php

namespace App\Http\Controllers;

use PDF;
use Mail;

class TestController extends Controller
{

    public function sendMailWithPDF()
    {
        $data["email"] = "[email protected]";
        $data["title"] = "Welcome to Medikre";
        $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');
    }
}

Buat Tampilan PDF

Sekarang kita akan membuat tampilan PDF yang akan dilampirkan ke email. Buka folder resource>views dan buat file mail.blade.php. Kemudian tempel tampilan PDF sederhana ini:

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

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

<p>
    Regards,<br/>
    mynotepaper.com
</p>
</body>
</html>

Tentukan Route

Buka file routes/web.php dan tambahkan route berikut:

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

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

Sekarang jalankan proyeknya:

php artisan serve

Kunjungi route kirim email:

http://localhost:8000/send-email
laravel example generate pdf and attach to email laravel