1. Persiapan Database (Tabel Antrean)
Sebelum mengaktifkan sistem, pastikan tabel database untuk menampung antrean sudah tersedia.
-
Tujuan: Laravel membutuhkan tabel fisik untuk menyimpan data email yang sedang menunggu giliran kirim.
-
Langkah Verifikasi: Pastikan tabel
jobsdanfailed_jobssudah ada di database Anda melalui phpMyAdmin. -
Perintah Pembuatan: Jika belum ada, jalankan:
-
Catatan: Jobs baru akan masuk ke tabel jobs, dan jika berhasil maka data jobs akan terhapus. Namun jika jobs gagal akan masuk ke table failed_jobs.
Bash
php artisan queue:table php artisan queue:failed-table php artisan migrate
2. Konfigurasi Environment (.env) / Mengubah dari config Mailgun ke Smtp hosting
Path: /.env Mengatur koneksi dari Mailgun (API) ke SMTP Hosting (Niagahoster) dengan pengaturan keamanan yang ketat.
-
QUEUE_CONNECTION=database: Mengaktifkan sistem antrean berbasis database. -
MAIL_HOST=srv143.niagahoster.com: Menggunakan hostname asli server untuk menghindari masalah SSL dan DNS. -
MAIL_PORT=465&MAIL_ENCRYPTION=ssl: Standar keamanan untuk pengiriman email hosting. -
MAIL_FROM_ADDRESS=mail@wotbatu.id: Harus identik denganMAIL_USERNAMEuntuk menghindari error spoofing.
3. Perubahan Kode Pengiriman (MidtransController / Payment notification)
Path: /app/Http/Controllers/MidtransController.php (atau Controller yang menangani notifikasi Midtrans) Mengubah cara pengiriman agar tidak membebani performa saat transaksi berlangsung.
-
Perubahan: Mengubah
Mail::to(...)->send(...)menjadiMail::to(...)->queue(...). -
Hasil: Respon sukses (200 OK) langsung dikirim ke Midtrans, sementara email dikirim di latar belakang.
4. Optimasi Lampiran PDF (Mailable)
Path: /app/Mail/TicketOrderMail.php Menghindari error permission pada sistem antrean saat memproses file fisik.
-
Perubahan: Menghapus kode
file_put_contentsyang menulis file ke folder publik. -
Solusi: Menggunakan metode
attachData()untuk mengirim PDF langsung dari memori server (RAM).PHP
return $this->view('emails.ticket_order') ->attachData($dompdf->output(), 'Ticket.pdf', ['mime' => 'application/pdf']);
5. Prosedur Maintenance (Terminal)
Langkah-langkah teknis wajib setiap kali ada perubahan konfigurasi agar sistem mengenali data terbaru:
-
Stop Worker: Matikan proses
php artisan queue:workyang sedang jalan (Ctrl + C). -
Clear Config: Jalankan
php artisan config:clearuntuk memuat ulang.env. -
Clear Cache: Jalankan
php artisan cache:clearuntuk membersihkan sisa data lama. -
Start Worker: Jalankan kembali
php artisan queue:work. -
Retry Jobs: Jalankan
php artisan queue:retry alluntuk mengirim ulang email yang sebelumnya gagal masuk kefailed_jobs.
6. Verifikasi Akhir
Sistem dinyatakan pulih jika terminal menunjukkan status hijau: Processed: App\Mail\TicketOrderMail.