Pernah nggak sih kamu daftar ke sebuah website, terus langsung dapat email konfirmasi dalam hitungan detik? Atau reset password yang masuk ke inbox-mu secara otomatis? Nah, di balik semua itu ada fitur pengiriman email yang terintegrasi ke sistem. Dan kabar baiknya — kirim email di Laravel menggunakan Mailable itu jauh lebih mudah dari yang kamu bayangkan.
Kalau kamu lagi belajar web development dan sedang mengikuti seri 50 Artikel Belajar Laravel ini, artikel ke-32 ini adalah salah satu yang paling aplikatif. Kenapa? Karena hampir setiap aplikasi web butuh fitur email — mulai dari verifikasi akun, notifikasi order, sampai newsletter. Yuk, kita bedah tuntas!
Mailable adalah kelas PHP yang mewakili satu jenis email dalam aplikasi Laravel. Setiap email yang kamu kirim punya kelas Mailable-nya sendiri — misalnya WelcomeEmail, OrderConfirmation, atau PasswordReset. Pendekatan ini membuat kode lebih terstruktur, reusable, dan mudah ditest.
๐ง Memahami Konsep Kirim Email Laravel Mailable
Bayangkan kamu punya warung makan. Setiap jenis pesanan punya nota yang berbeda — nota untuk ayam goreng, nota untuk es teh, dst. Di Laravel, setiap jenis email = satu kelas Mailable. Ini beda banget dengan cara "jadul" yang langsung menulis logika email di dalam Controller. Dengan Mailable, email kamu punya "rumah" sendiri yang rapi.
Laravel menggunakan library Symfony Mailer di balik layar, dan menyediakan abstraksi yang bersih lewat facade Mail. Kamu bisa kirim email via SMTP, Mailgun, Amazon SES, Postmark, dan masih banyak lagi — hanya dengan mengubah konfigurasi.
Menurut Statista, lebih dari 347 miliar email dikirim dan diterima setiap hari di seluruh dunia pada 2023. Artinya, fitur email bukan sekadar pelengkap — ini adalah kebutuhan dasar aplikasi modern!
๐ Perbandingan Driver Email di Laravel
| Driver | Kegunaan | Gratis? | Rekomendasi |
|---|---|---|---|
| SMTP | Pengiriman via server SMTP | ✅ Ya | Development / produksi umum |
| Mailgun | Transaksional email API | ✅ Trial | Produksi skala menengah |
| Amazon SES | Email via AWS | ๐ฐ Berbayar | Volume besar / enterprise |
| log | Tulis ke log file saja | ✅ Ya | Development / testing lokal |
| Mailtrap | Fake SMTP untuk testing | ✅ Free tier | ⭐ Favorit developer |
๐ ️ Step-by-Step: Cara Kirim Email di Laravel Menggunakan Mailable
Oke, cukup teori. Sekarang kita masuk ke praktik. Ikuti langkah-langkah berikut untuk mengimplementasikan fitur kirim email Laravel Mailable dari nol di project-mu.
Konfigurasi File .env
Pertama, atur konfigurasi email di file .env. Untuk development, kita gunakan Mailtrap — layanan fake SMTP yang akan "menangkap" email kamu tanpa benar-benar mengirimnya.
# .env MAIL_MAILER=smtp MAIL_HOST=sandbox.smtp.mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=your_mailtrap_username MAIL_PASSWORD=your_mailtrap_password MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS=noreply@example.com MAIL_FROM_NAME="Aplikasi Ku"
Daftar gratis di mailtrap.io, lalu pergi ke Email Testing → Inboxes → SMTP Settings. Copy username dan password dari sana ke file .env kamu. Mudah banget!
Generate Kelas Mailable
Jalankan perintah Artisan untuk membuat kelas Mailable baru. Laravel akan otomatis membuat file di folder app/Mail/.
# Terminal / Command Prompt php artisan make:mail WelcomeEmail
Edit Kelas Mailable
Buka file app/Mail/WelcomeEmail.php dan modifikasi sesuai kebutuhan. Perhatikan penggunaan method envelope() dan content() di Laravel 11.
// app/Mail/WelcomeEmail.php namespace App\Mail; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Queue\SerializesModels; class WelcomeEmail extends Mailable { use Queueable, SerializesModels; public function __construct( public string $userName ) {} public function envelope(): Envelope { return new Envelope( subject: 'Selamat Datang di Aplikasi Kami!', ); } public function content(): Content { return new Content( view: 'emails.welcome', ); } }
Buat Template Blade untuk Email
Buat file view di resources/views/emails/welcome.blade.php sebagai template HTML email kamu.
<!-- resources/views/emails/welcome.blade.php --> <!DOCTYPE html> <html> <body style="font-family: sans-serif; padding: 20px;"> <h1>Halo, {{ $userName }}! ๐</h1> <p>Selamat bergabung di platform kami.</p> <p>Terima kasih sudah mendaftar!</p> </body> </html>
Kirim Email dari Controller
Terakhir, panggil kelas Mailable dari Controller menggunakan facade Mail.
// app/Http/Controllers/UserController.php use App\Mail\WelcomeEmail; use Illuminate\Support\Facades\Mail; public function register(Request $request) { // Proses registrasi user... // Kirim email selamat datang Mail::to($request->email) ->send(new WelcomeEmail($request->name)); return redirect()->route('dashboard') ->with('success', 'Email konfirmasi terkirim!'); }
๐ Fitur Lanjutan Laravel Mailable yang Perlu Kamu Tahu
Sudah bisa kirim email Laravel Mailable dasar? Sekarang saatnya naik level. Ada beberapa fitur powerful yang sering dipakai developer profesional.
Perlu mengirim file PDF atau invoice via email? Gunakan method attachments() di dalam kelas Mailable:
public function attachments(): array { return [ Attachment::fromPath('/path/to/invoice.pdf') ->as('Invoice.pdf') ->withMime('application/pdf'), ]; }
๐ Analisis: send() vs queue()
Ini adalah salah satu keputusan penting saat implementasi email di production:
- Kirim langsung (sinkron)
- Response HTTP menunggu
- Cocok untuk email kritis
- Bisa memperlambat app
- Kirim via background queue
- Response HTTP cepat
- Butuh worker queue
- ⭐ Rekomendasi produksi
Jangan pernah hardcode kredensial email langsung di kode PHP! Selalu simpan di file .env dan pastikan file tersebut ada di .gitignore. Kebocoran kredensial SMTP bisa disalahgunakan untuk mengirim spam.
๐ผ Tips Kirim Email Laravel Mailable di Production
Beda antara developer junior dan senior adalah bagaimana mereka menangani email di production. Ini beberapa best practice yang wajib kamu terapkan:
Laravel menyediakan route khusus untuk preview template email langsung di browser: Route::get('/email-preview', fn() => new WelcomeEmail('Budi'));
Untuk email non-kritis, selalu gunakan queue() bukan send(). Ini mencegah request HTTP menjadi lambat karena menunggu SMTP server.
Gunakan layanan seperti Mailgun atau Postmark yang menyediakan dashboard tracking — kamu bisa lihat email mana yang delivered, bounced, atau dibuka.
Laravel menyediakan komponen Blade email yang sudah pre-styled dan mobile-responsive. Generate dengan perintah: php artisan make:mail WelcomeEmail --markdown=emails.welcome. Hasilnya adalah template profesional yang siap pakai tanpa perlu CSS manual!
Tag Topik:
No comments:
Post a Comment