Cara kirim email dengan API Sendgrid di PHP untuk notifikasi, kontak, dll

Notifikasi email adalah fitur yang harus dibuat, apabila kita ingin berkomunikasi dengan user secara otomatis.

Contoh kasus penerapan notifikasi email:

  • Pengiriman notifikasi email ke mahasiswa saat nilai diinputkan admin pada sistem informasi akademik.
  • Pengiriman email ke pemilik web saat ada orang yang submit dari contact form.
  • Pengiriman email saat reset password.
  • Pengiriman email saat ada berita baru.
  • dll.

Nah, pada kesempatan ini. Kita akan belajar cara menggunakan API Sendgrid untuk mengirim email.

Apa itu SendGrid?

Sendgrid adalah layanan yang menyediakan API untuk mengirim email dan email list untuk email marketing. Sendgrid telah digunakan oleh beberapa start-up ternama seperti Uber, Spotify, Airbnb, dll.

Sendgrid menyediakan dua metode untuk mengakses layanan mereka:

  1. Melalui API
  2. Melalui protokol SMTP

Kita akan menggunakan metode yang pertama, karena direkomendasikan oleh Sendgrid.

Silahkan daftar dulu ke SendGrid.

Oya, kita akan menggunakan paket free trial.

Mendapatkan API Key Sendgrid

Setelah sukses mendaftar, silahkan masuk ke bagian integrasi: https://app.sendgrid.com/guide/integrate.

Lalu, pilih Web API, karena kita akan menggunakan API untuk mengirim email.

Pilih metode pengiriman

Berikutnya, pilih PHP. Karena kita akan menggunakan bahasa pemrograman PHP.

Pilih bahasa pemrograman PHP untuk implementasi

Berikutnya, silahkan berikan nama API Key.

Membuat nama API Key

Klik Create API key untuk membuat API Key.

Maka kita akan mendapatkan API key seperti ini:

API Key sendgrid

Silahkan simpan API Key tersebut di tempat yang aman. Jangan sampai orang lain tahu. hehe.

Membuat Project Baru dengan Composer

Apabila kamu sudah punya project—yang menggunakan framework seperti Laravel— maka langkah ini boleh tidak dilakukan.

Namun, apabila kamu belum punya project, silahkan buat dulu. Ikuti perintah berikut.

mkdir belajar-sendgrid
cd belajar-sendgrid
echo "vendor" > .gitignore
echo ".env" >> .gitignore

Perintah di atas adalah perintah untuk membuat direktori project dan menambahkan direktori vendor dan .env ke dalam .gitignore agar tidak dicatat oleh Git.

Setelah itu, siapkan project dengan composer:

composer init

Isi keterangan project, sehingga tercipta file composer.json dengan isi seperti ini:

{
    "name": "ardianta/sendgrid-example",
    "description": "Belajar menggunakan API sendgrid untuk kirim email",
    "type": "project",
    "license": "MIT",
    "authors": [
        {
            "name": "Ardianta Pargo",
            "email": "[email protected]"
        }
    ]
}

Menginstall Library SendGrid

Sendgrid sudah menyediakan library untuk mengakses API mereka, sehingga kita tidak peru repot-repot membuat kode dari nol dengan CURL atau semacamnya.

Untuk menginstal library Sendgrid, silahkan ketik perintah ini:

composer require sendgrid/sendgrid -vvv

Berikutnya kita akan menginstall library Dotenv untuk me-load variabel Environtment dari file .env. Karena kita akan menyimpan API Key dari Sendgrid di file .env.

Silahkan ketik perintah berikut:

composer require vlucas/phpdotenv -vvv

Kode PHP untuk Kirim Email

Sebenarnya kita sudah diberikan sampel kode untuk kirim email pada dokumentasi Sendgrid. Kode tersebut bisa kita copas.

Silahkan buat file baru bernama send-email.php, lalu isi dengan kode berikut:

<?php
// using SendGrid's PHP Library
// https://github.com/sendgrid/sendgrid-php
// If you are using Composer (recommended)
require 'vendor/autoload.php';
// If you are not using Composer
// require("path/to/sendgrid-php/sendgrid-php.php");

// initialize dotenv
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

$from = new SendGrid\Email("Dian", "[email protected]");
$subject = "Belajar Kirim Email dengan API SendGrid";
$to = new SendGrid\Email("Ardianta", "[email protected]");
$content = new SendGrid\Content("text/plain", "Hello, ini adalah email yang dikirim melalui API");
$mail = new SendGrid\Mail($from, $subject, $to, $content);
$apiKey = getenv('SENDGRID_API_KEY');
$sg = new \SendGrid($apiKey);

// kirim email
$response = $sg->client->mail()->send()->post($mail);

// untuk debugging
echo "<pre>";
echo $response->statusCode();
print_r($response->headers());
echo $response->body();
echo "</pre>";

Perhatikan!

Silahkan ubah nilai yang ada di baris ini dengan alamat email dan pesan yang akan dikirim:

$from = new SendGrid\Email("Dian", "[email protected]");
$subject = "Belajar Kirim Email dengan API SendGrid";
$to = new SendGrid\Email("Ardianta", "[email protected]");
$content = new SendGrid\Content("text/plain", "Hello, ini adalah email yang dikirim melalui API");

Tips: Nilai-nilai tersebut bisa diambil dari database, biar lebih dinamis.

Setelah itu buat file .env, lalu isi seperti ini:

SENDGRID_API_KEY=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

Percobaan Kirim Email dengan PHP

Sekarang, waktunya kita mencoba. Silahkan jalankan server dengan perintah:

php -S localhost:8080

Lalu buka http://localhost:8080/send-email.php, maka hasilnya:

Kirim email dengan PHP

Untuk memastikan email terkirim atau tidak, silahkan cek inbox.

Inbox email Yahoo

Membuat Contact Form

Berikutnya kita coba eksperimen dengan membuat contact form. Silahkan buat file contact.html, lalu isi seperti ini:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Contact Us</title>
</head>
<body>
    
    <h2>Contact Us</h2>
    <p>Kirimkan keluhan, saran, pertanyaan, dan masukan anda ke kami</p>

    <form action="send-email.php" method="POST">
        <label for="name">Nama:</label>
        <br>
        <input type="text" name="name" placeholder="nama anda" />
        <br>
        <label for="email">Email:</label>
        <br>
        <input type="email" name="email" placeholder="[email protected]" />
        <br>
        <label for="message">Pesan</label>
        <br>
        <textarea name="message" placeholder="Tuliskan pesan anda..." rows="5"></textarea>
        <br>
        <input type="submit" name="send" value="Kirim" />
    </form>

</body>
</html>

Setelah itu, modifikasi kode send-email.php menjadi seperti ini:

<?php

if(!isset($_POST['send'])) die("Akses dilarang!");

require 'vendor/autoload.php';

// initialize dotenv
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

$from = new SendGrid\Email($_POST["name"], $_POST["email"]);
$subject = "[Submission] Contact Form di Petanikode";
$to = new SendGrid\Email("Ardianta", "[email protected]");
$content = new SendGrid\Content("text/plain", $_POST["message"]);
$mail = new SendGrid\Mail($from, $subject, $to, $content);
$apiKey = getenv('SENDGRID_API_KEY');
$sg = new \SendGrid($apiKey);

// kirim email
$response = $sg->client->mail()->send()->post($mail);

// jika kode respon 202 berarti berhasil
if($response->statusCode() == 202) {
    echo "Pesan telah terikirm. Kembali ke <a href='contact.html'>halaman sebelumnya</a>";
} else {
    echo "Pesan gagal dikirim, <a href='contact.html'>Coba ulang</a>!";
}

Percobaan Kirim Email melalui Contact Form

Sekarang mari kita coba…

Kirim email melalui contact form

Jika berhasil:

Kirim email melalui contact form

Coba cek inbox:

Kirim email melalui contact form

Sukses! 🎉

Apa Selanjutnya?

Selanjutnya terserah anda, mau diimplementasikan untuk apa.

Oya, untuk implementasi di Framwork seperti Laravel, biasanya kodenya ditaruh di dalam controller.

Silahkan baca juga ini: