Mengirim email di laravel dengan menggunakan layanan Mailtrap atau SMTP Gmail seringkali dibutuhkan oleh pengembang aplikasi. Fitur kirim email pada sebuah aplikasi biasanya digunakan untuk mengirim email setelah registrasi atau email notifikasi. Fasilitas untuk mengirim email adalah fitur default pada saat kita menginstall project laravel. Maka dari itu kita tinggal menyettingnya saja tanpa perlu menginstall library tambahan.
Kirim email dengan Laravel
Ada dua cara untuk pengiriman email, yaitu dengan menggunakan fake SMTP seperti Mailtrap dan SMTP Gmail. Apakah perbedaannya?
Mailtrap
Mailtrap adalah layanan fake SMTP untuk kebutuhan pengembangan. Ketika dalam masa development aplikasi, kita tidak ingin mengirim email yang sebenarnya tetapi tetap ingin menjalankan fungsi emailnya bekerja. Fungsi mailtrap ini akan mengarahkan semua email keluar ke dalam kotak masuk si mailtrap.
SMTP Gmail
SMTP Gmail adalah layanan yang paling banyak dipakai oleh pengembang ketika sudah masa production (sudah siap untuk online dan digunakan).
Contoh mengirim email dengan laravel menggunakan mailtrap akan kita coba lebih dahulu. Setelah itu kita akan coba mengirim email laravel dengan Gmail (Gmail SMTP server).
Install Laravel
Saya anggap kamu telah menginstall laravel terbaru versi 8. Jika belum, silakan jalankan perintah di bawah ini.
composer create-project --prefer-dist laravel/laravel email_laravel
Kirim Email dengan Mailtrap
Karena kita akan menggunakan layanan mailtrap, silakan membuat akun di mailtrap.io.
Jika sudah login, kemudian masuk ke demo inbox “My Inbox”.
Pada bagian SMTP Settings > Integrations pilih laravel, terdapat setting host, port, username, password, encryption. Masukkan semua konfigurasinya ke file .env proyek laravel.
Setting Mailtrap di .env
Buka file .env dan sesuaikan dengan konfigurasi mailtrap yang kamu dapatkan di akun mailtrap. Jangan lupa isi pada bagian MAIL_FROM_ADDRESS dengan email yang digunakan untuk mengirim.
Membuat controller
Buat sebuah controller untuk menangani proses pengiriman email. Jalankan perintah di bawah ini.
php artisan make:controller KirimEmailController
Perintah di atas akan membuat file yang bernama KirimEmailController pada direktori app/Http/Controllers.
Pada controller KirimEmailController, ubah kodenya menjadi seperti di bawah ini.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use App\Mail\SendMail;
class KirimEmailController extends Controller
{
public function kirim()
{
$email = 'emailtujuan@hotmail.com';
$data = [
'title' => 'Selamat datang!',
'url' => 'https://aantamim.id',
];
Mail::to($email)->send(new SendMail($data));
return 'Berhasil mengirim email!';
}
}
Membuat route
Setelah membuat controller kita harus mengatur route yang akan menjadi url halaman yang dapat kita akses. Untuk membuat route, buka file routes/web.php lalu tambahkan:
Route::get('/kirim_email', [App\Http\Controllers\KirimEmailController::class, 'kirim']);
Membuat class mail dan blade
Untuk membuat class mail dan file blade, jalankan perintah di bawah ini.
php artisan make:mail SendMail --markdown=emailku
Perintah di atas akan membuat file class mail yang bernama SendMail pada direktori App/Mail dan membuat file blade bernama emailku.blade.php yang berada pada direktori resources/views.
Pada class SendMail, ubah kodenya menjadi seperti di bawah ini.
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class SendMail extends Mailable
{
use Queueable, SerializesModels;
public $data;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($data)
{
$this->data = $data;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->markdown('emailku')
->subject('Pemberitahuan Penting!')
->with('data', $this->data)
->attach(public_path('/img/a.png'), [
'as' => 'a.png',
'mime' => 'image/png',
]);
}
}
Kode di atas terdapat method markdown, subject, with, dan attach. Maksud dari method tersebut dijelaskan sebagai berikut.
markdown: Membuka file blade yang akan menjadi tampilan email, terletak pada direktori resources/views.
subject: Subjek email.
with: Mengirim data berisi array ke file emailku.blade.php.
attach: Untuk melampirkan file pada email. Pada contoh tutorial ini, file yang dilampirkan ada pada direktori public/img.
Pada emailku.blade.php, ubah kodenya menjadi seperti di bawah ini.
@component('mail::message')
# {{ $data['title'] }}
Saya sedang belajar mengirim email dengan Laravel.
@component('mail::button', ['url' => $data['url']])
Visit
@endcomponent
Terimakasi
{{ config('app.name') }}
@endcomponent
Menjalankan fungsi kirim email Laravel
Karena langkah-langkah di atas sudah selesai, kita akan mencoba menjalankan laravel, jalankan perintah:
php artisan serve
Kemudian akses alamat:
127.0.0.1:8000/kirim_email
Pada saat mengakses route kirim_email di atas maka akan terjadi proses pengiriman email oleh mailtrap.io.
Sekarang buka inbox mailtrap.io di sana akan ada email yang masuk.
Seperti yang terlihat pada screenshot di atas, email berhasil masuk sesuai dengan isi yang kita buat pada emailku.blade.php. Tedapat informasi subject, pengirim, penerima, body, dan attachment.
Percobaan mengirim email dengan mailtrap sudah selesai.
Kirim Email dengan SMTP Gmail
Secara default Gmail tidak memperbolehkan aplikasi lain mengakses akun Gmail kamu. Namun Gmail memberikan kebebasan kepada penggunanya untuk mengizinkan aplikasi lain (pihak ketiga) mengakses akun Gmail kamu.
Pertama, kamu harus login akun Gmail.
Setelah login, pilih menu Kelola Akun Anda.
Kemudian, silakan pilih menu keamanan / security.
Scroll ke bawah sampai terlihat menu seperti di bawah ini. Klik Aktifkan akses (tidak direkomendasikan).
Kemudian geser aktifkan.
Sampai di sini pengaturan Gmail sudah selesai. Selanjutnya sesuaikan konfigurasi file .env.
Setting SMTP Gmail di .env
Cara menggunakan Gmail untuk mengirim email, silakan sesuaikan konfigurasi pada file .env laravel seperti di bawah ini.
MAIL_MAILER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
MAIL_USERNAME=email_kamu@gmail.com
MAIL_PASSWORD=password_email
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=email_kamu@gmail.com
MAIL_FROM_NAME="${APP_NAME}"
Menjalankan fungsi kirim email Laravel
Karena langkah-langkah di atas sudah selesai, kita akan mencoba menjalankan laravel, jalankan perintah:
php artisan serve
Kemudian akses alamat:
127.0.0.1:8000/kirim_email
Pada saat route kirim_email di atas diakses, maka akan terjadi proses pengiriman email yang dikirim melalui SMTP Gmail.
Sekarang buka inbox dari email penerima. Untuk contoh di sini saya memakai email outlook sebagai penerima. Jadi email dari Gmail dikirim ke Outlook.
Seperti yang terlihat pada screenshot di atas, email berhasil masuk sesuai dengan isi yang kita buat pada emailku.blade.php. Tedapat informasi subject, pengirim, penerima, body, dan attachment.
Selesai sudah dua percobaan mengirim email dengan SMTP Gmail dan fake SMTP Mailtrap. Untuk mendownload source code pengiriman email laravel dengan mailtrap silakan klik link di bawah ini.