2 Cara Mengirim Email Notifikasi dengan Laravel 8

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
2 Cara Mengirim Email Notifikasi dengan Laravel 8

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”.

Mailtrap Demo Inbox

Pada bagian SMTP Settings > Integrations pilih laravel, terdapat setting host, port, username, password, encryption. Masukkan semua konfigurasinya ke file .env proyek laravel.

Konfigurasi Mailtrap

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.

Mailtrap .env

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.

Mailtrap Inbox

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.

Gmail kelola akun

Kemudian, silakan pilih menu keamanan / security.

Scroll ke bawah sampai terlihat menu seperti di bawah ini. Klik Aktifkan akses (tidak direkomendasikan).

Akses aplikasi yang kurang aman

Kemudian geser aktifkan.

Aktifkan akses aplikasi yang kurang aman

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.

Outlook inbox

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.

Clone via GitHub