Halo sobat koder! Masih ngoding kan?
Jadi, pada tutorial kali ini, kita akan belajar tentang bagaimana cara mengirim email menggunakan  laravel, khususnya dengan menggunakan Laravel Mailable. Untuk yang belum tau, jadi laravel punya fitur menarik untuk mengirim email dengan mudah tanpa harus ribet config sana sini.
Laravel menggunakan library dari SwiftMailer untuk fitur pengiriman emailnya dan support penggunaan SMTP, Mailgun, SparkPost, Amazon SES, dan lainnya.
Pada tutorial kali ini, kita akan mencoba mengirimkan email namun tidak secara langsung, alias untuk pengujian secara lokal saja menggunakan Mailtrap. Ketika nanti aplikasi sudah berjalan dengan semestinya maka kita tinggal ganti saja konfigurasinya pada file .env.
Mailtrap adalah tool pihak ketiga yang biasa digunakan oleh developer untuk melakukan pengujian pengiriman email. Dengan menggunakan mailtrap, kita tidak perlu menguji aplikasi email kita pada email client yang sebenarnya. 

Syarat

Sebelum memulai menggunakan laravel mailable, perlu diperhatikan bahwa API mail pada laravel membutuhkan library Guzzle HTTP, yang mana bisa kalian install menggunakan composer
composer require guzzlehttp/guzzle

Konfigurasi Akun Mailtrap

Sebelum mulai, karena kita akan menggunakan Mailtrap sebagai tujuan pengiriman email kita nanti, pastikan temen temen sudah mempunyai akun mailtrap. Untuk mendaftar akun mailtrap, silahkan buka halaman ini (gratis).
Kemudian temen temen masuk ke dalam inbox dan catat konfigurasi credential SMTP kalian yaitu username dan passwordnya.
Setelah itu, masukan konfigurasi username dan password kalian pada file .env
Cari bagian ini dan ubah nilainya sesuai akun kalian.
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME= //isi dengan username akun mailtrap
MAIL_PASSWORD= //isi dengan password akun mailtrap
MAIL_ENCRYPTION=TLS

Menggunakan Laravel Mailable pada Controller

Pertama, yang harus dilakukan adalah membuat mailable itu sendiri, caranya buka terminal atau cmd dan gunakan perintah berikut untuk men-generate mailable secara otomatis.
php artisan make:mail SendMail
Jika perintah diatas berhasil dilakukan, maka akan muncul file baru pada app/Mail yaitu file Sendmail.php. File inilah yang nantinya akan mengatur kebutuhan email kita, sehingga controller kita akan terlihat lebih rapi.
Kemudian, buat dan buka file controller yang akan kita gunakan untuk mengirim email, dalam kasus ini saya menggunakan EmailController.php. Berikut contoh penggunaan mail pada controllernya.
// app/Http/Controllers/EmailController.php
public function sendmail($id): RedirectResponse
{
// buat user baru
$user = User::findOrFail($id);
// send new email to registered user
Mail::send(new \App\Mail\SendMail($user));

return view('home');
}
Terlihat pada koding diatas, kita cukup memanggil method Mail::send() dan menggunakan objek class \app\Mail\SendMail yang tadi telah kita buat menggunakan php artisan. Selain itu, temen temen juga bisa melemparkan data ke objek SendMail() (dalam kasus ini saya melempar data $user). Data ini nantinya harus kita definisikan pada constructor di class SendMail().
Silahkan lihat koding berikut untuk contoh penggunaan mailable dari constructor.
<?php
namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use App\User;

class SendMail extends Mailable
{
use Queueable, SerializesModels;
protected user = $user;

// Data yang dilempar dari controller dibaca pada constructor ini
public function __construct(User $user)
{
$this->user = $user;
}

// Proses mengirimkan email ke tujuan ($user)
public function build()
{
return $this->to($this->user->email, $this->user->name)
->subject('Selamat datang di Kodehero!')
->view('mails.sendmail')
->with('user', $this->user);
}
}
Jangan lupa membuat view baru yang nantinya akan digunakan sebagai konten dari email tersebut. Dalam hal ini, saya memanggil view mails/sendmail. Isinya cukup sederhana saja, yaitu menampilkan data user yang tadi kita ambil dari controller ke dalam email.
<div>
Nama: {{ $user->name }}
Email: {{ $user->email }}
</div>;
Selesai deh, kita tinggal panggil method sendmail() yang ada pada controller dari route, dan email akan dikirimkan ke inbox akun Mailtrap kita. Nantinya jika proses pengiriman email telah berhasil, temen temen bisa mengganti konfigurasi email yang ada pada file .env agar sesuai dengan akun email yang kalian punya (Bisa menggunakan gmail, email dari hosting maupun service lain).

Akhir Kata

Sekian tutorial singkat mengenai cara mengirim email menggunakan laravel mailable versi 5.5. Penggunaan mailable ini cukup mempermudah kita dalam mengirim email pada aplikasi laravel yang telah kita buat. Implementasinya dapat digunakan misalnya saat user mendaftar pada aplikasi, mengirim tagihan pembayaran secara langsung dari aplikasi, dan lain sebagainya.
Semoga tutorial ini bisa bermanfaat bagi kalian semua, terima kasih dan jangan lupa ngoding hari ini!