Cara Kirim Email dengan API Sendgrid di PHP untuk Notifikasi dan Contact Form
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:
- Melalui API
- Melalui protokol SMTP
Kita akan menggunakan metode yang pertama, karena direkomendasikan oleh Sendgrid.
Silakan daftar dulu ke SendGrid.
Oya, kita akan menggunakan paket free trial.
Mendapatkan API Key Sendgrid
Setelah sukses mendaftar, silakan masuk ke bagian integrasi: https://app.sendgrid.com/guide/integrate.
Lalu, pilih Web API, karena kita akan menggunakan API untuk mengirim email.
Berikutnya, pilih PHP. Karena kita akan menggunakan bahasa pemrograman PHP.
Berikutnya, silakan berikan nama API Key.
Klik Create API key untuk membuat API Key.
Maka kita akan mendapatkan API key seperti ini:
Silakan 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, silakan 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, silakan ketik perintah ini:
composer require sendgrid/sendgrid -vvv
Berikutnya kita akan menginstall library Dotenv untuk me-load
variabel Environment dari file .env
.
Karena kita akan menyimpan API Key dari Sendgrid di file .env
.
Silakan 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.
Silakan 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!
Silakan 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. Silakan jalankan server dengan perintah:
php -S localhost:8080
Lalu buka http://localhost:8080/send-email.php, maka hasilnya:
Untuk memastikan email terkirim atau tidak, silakan cek inbox.
Membuat Contact Form
Berikutnya kita coba eksperimen dengan membuat contact form. Silakan
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 Petani Kode";
$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…
Jika berhasil:
Coba cek inbox:
Sukses! 🎉
Apa Selanjutnya?
Selanjutnya terserah anda, mau diimplementasikan untuk apa.
Oya, untuk implementasi di Framework seperti Laravel, biasanya kodenya ditaruh di dalam controller.
Silakan baca juga ini: