Tentu, ini artikel yang Anda minta:
Mengirim email adalah fitur penting di hampir semua aplikasi web modern, mulai dari notifikasi pendaftaran, reset kata sandi, hingga konfirmasi pesanan. Laravel, sebagai framework PHP yang komprehensif, menyediakan API yang bersih dan sederhana untuk mengirim email, baik melalui layanan berbasis cloud seperti Mailgun, Postmark, dan Amazon SES, atau melalui server SMTP Anda sendiri.
Dalam tutorial Laravel ke-35 ini, kita akan membahas cara mengonfigurasi dan mengirim email menggunakan fitur Mail Laravel.
1. Konfigurasi Driver Mail
Langkah pertama dalam mengirim email adalah mengonfigurasi driver mail di aplikasi Laravel Anda. Konfigurasi ini biasanya dilakukan dalam file .env. Laravel mendukung berbagai driver email.
a. SMTP Driver (Driver Umum)
SMTP (Simple Mail Transfer Protocol) adalah metode yang paling umum digunakan untuk mengirim email. Untuk mengonfigurasi SMTP, Anda perlu detail server email Anda (atau penyedia email seperti Gmail, Outlook, dll.).
Contoh konfigurasi di .env:
MAIL_MAILER=smtp
MAIL_HOST=smtp.mailtrap.io   # Contoh: smtp.gmail.com atau server SMTP Anda
MAIL_PORT=2525               # Contoh: 587 (TLS) atau 465 (SSL)
MAIL_USERNAME=your_username  # Username SMTP Anda
MAIL_PASSWORD=your_password  # Password SMTP Anda
MAIL_ENCRYPTION=tls          # Bisa 'tls' atau 'ssl', atau 'null'
MAIL_FROM_ADDRESS=hello@example.com
MAIL_FROM_NAME="${APP_NAME}"
Catatan: Untuk pengembangan, banyak developer di Malang, Jawa Timur, menggunakan Mailtrap.io atau Mailhog. Ini adalah layanan SMTP palsu yang menangkap semua email yang dikirim dari aplikasi Anda, memungkinkan Anda untuk menginspeksi email tanpa benar-benar mengirimkannya ke alamat email sungguhan. Ini sangat membantu untuk debugging.
b. Mailgun, Postmark, Amazon SES (Driver Berbasis Cloud)
Jika Anda menggunakan layanan email berbasis cloud, Anda hanya perlu mengganti MAIL_MAILER dan menyediakan kunci API yang relevan.
Contoh Mailgun:
MAIL_MAILER=mailgun
MAILGUN_DOMAIN=your_mailgun_domain
MAILGUN_SECRET=your_mailgun_secret_key
MAIL_FROM_ADDRESS=hello@example.com
MAIL_FROM_NAME="${APP_NAME}"
Pastikan Anda juga menginstal package Guzzle HTTP Client jika menggunakan driver berbasis API seperti Mailgun atau SES:
composer require guzzlehttp/guzzle
2. Membuat Mailable Class
Laravel menggunakan “Mailable Class” untuk mengenkapsulasi logika pengiriman email ke dalam objek tunggal. Ini membuat kode email Anda tetap rapi dan mudah diatur.
Untuk membuat mailable class, gunakan perintah Artisan:
php artisan make:mail WelcomeEmail
Perintah ini akan membuat file app/Mail/WelcomeEmail.php.
Memodifikasi Mailable Class
Buka file app/Mail/WelcomeEmail.php dan modifikasi seperti contoh berikut:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
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 $user; // Properti publik untuk data yang akan diteruskan ke view
    /**
     * Create a new message instance.
     */
    public function __construct($user)
    {
        $this->user = $user;
    }
    /**
     * Get the message envelope.
     */
    public function envelope(): Envelope
    {
        return new Envelope(
            subject: 'Selamat Datang di Aplikasi Kami!',
        );
    }
    /**
     * Get the message content definition.
     */
    public function content(): Content
    {
        return new Content(
            view: 'emails.welcome', // View Blade untuk konten email
            with: [
                'name' => $this->user->name,
                'email' => $this->user->email,
            ],
        );
    }
    /**
     * Get the attachments for the message.
     *
     * @return array<int, \Illuminate\Mail\Mailables\Attachment>
     */
    public function attachments(): array
    {
        return [
            // Path file attachment, contoh: Attachment::fromPath(public_path('docs/invoice.pdf'))
        ];
    }
}
Dalam contoh ini:
- Kita membuat properti 
$useruntuk menampung data user yang akan dikirim ke email. - Metode 
envelope()mendefinisikan subjek email. - Metode 
content()menunjuk ke view Blade (resources/views/emails/welcome.blade.php) yang akan menjadi isi email, dan propertiwithdigunakan untuk meneruskan data ke view tersebut. - Metode 
attachments()bisa digunakan untuk melampirkan file. 
3. Membuat View Email
Selanjutnya, buat file view Blade untuk konten email Anda. Buat direktori emails di resources/views jika belum ada, lalu buat file welcome.blade.php di dalamnya.
Contoh resources/views/emails/welcome.blade.php:
<!DOCTYPE html>
<html>
<head>
    <title>Selamat Datang!</title>
    <style>
        body { font-family: Arial, sans-serif; background-color: #f4f4f4; margin: 0; padding: 20px; }
        .container { background-color: #ffffff; margin: 0 auto; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); max-width: 600px; }
        h1 { color: #333333; }
        p { color: #666666; line-height: 1.6; }
        .footer { margin-top: 20px; font-size: 0.9em; color: #aaaaaa; text-align: center; }
    </style>
</head>
<body>
    <div class="container">
        <h1>Halo, {{ $name }}!</h1>
        <p>Terima kasih telah bergabung dengan aplikasi kami. Kami sangat senang Anda menjadi bagian dari komunitas kami.</p>
        <p>Jika Anda memiliki pertanyaan, jangan ragu untuk menghubungi kami.</p>
        <p>Salam hormat,</p>
        <p>Tim Aplikasi Anda</p>
    </div>
    <div class="footer">
        Anda menerima email ini karena Anda mendaftar di aplikasi kami.
    </div>
</body>
</html>
Anda dapat menggunakan HTML dan CSS penuh dalam view email ini. Namun, perlu diingat bahwa dukungan CSS di klien email bervariasi, jadi sebaiknya gunakan CSS inline atau CSS framework yang dirancang khusus untuk email.
4. Mengirim Email
Setelah mailable class dan view email siap, Anda bisa mengirim email menggunakan facade Mail.
Mengirim dari Controller atau Route:
<?php
namespace App\Http\Controllers;
use App\Mail\WelcomeEmail;
use App\Models\User; // Asumsikan Anda memiliki model User
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
class UserController extends Controller
{
    public function sendWelcomeEmail($userId)
    {
        $user = User::findOrFail($userId);
        Mail::to($user->email)
            ->cc('support@example.com') // Opsional: Carbon Copy
            ->bcc('archives@example.com') // Opsional: Blind Carbon Copy
            ->send(new WelcomeEmail($user));
        return "Email selamat datang telah dikirim ke " . $user->email;
    }
}
Anda dapat memanggilnya dari route:
use App\Http\Controllers\UserController;
Route::get('/send-welcome/{id}', [UserController::class, 'sendWelcomeEmail']);
Mengirim Email ke Banyak Penerima:
$recipients = [
    'john.doe@example.com',
    'jane.smith@example.com'
];
Mail::to($recipients)->send(new WelcomeEmail($user));
5. Mengirim Email dalam Antrian (Queueing)
Mengirim email dapat memakan waktu, terutama jika ada banyak email atau jika server SMTP lambat. Untuk mencegah email memperlambat respons aplikasi Anda, Laravel memungkinkan Anda untuk mengantrekan (queue) pengiriman email. Ini berarti email akan dikirim di latar belakang.
Untuk mengantrekan email, pastikan mailable class Anda mengimplementasikan interface ShouldQueue (sudah ada di boilerplate).
class WelcomeEmail extends Mailable implements ShouldQueue // Pastikan ada implements ShouldQueue
{
    use Queueable, SerializesModels;
    // ...
}
Kemudian, cukup gunakan metode queue() atau later() saat mengirim email:
// Mengantrekan email untuk segera dikirim
Mail::to($user->email)->queue(new WelcomeEmail($user));
// Mengantrekan email untuk dikirim setelah 10 menit
Mail::to($user->email)->later(now()->addMinutes(10), new WelcomeEmail($user));
Untuk fungsionalitas antrian bekerja, Anda perlu mengonfigurasi queue driver di .env (misalnya QUEUE_CONNECTION=database atau redis) dan menjalankan worker queue Laravel:
php artisan queue:work
Kesimpulan
Laravel membuat proses pengiriman email menjadi sangat mudah dan menyenangkan. Dengan sistem mailable class, Anda dapat menjaga kode email tetap terstruktur, dan dengan dukungan queue, Anda dapat memastikan performa aplikasi Anda tetap optimal bahkan saat mengirim banyak email. Menguasai fitur ini adalah keterampilan penting bagi setiap developer Laravel.