ESP32 tidak hanya dapat digunakan untuk membaca sensor atau mengendalikan perangkat elektronik, tetapi juga mampu mengirim email secara otomatis melalui jaringan internet. Fitur ini sangat berguna untuk berbagai aplikasi Internet of Things (IoT), seperti sistem notifikasi keamanan, monitoring suhu, pendeteksi kebakaran, monitoring level air, hingga sistem otomatis yang mengirimkan laporan kondisi perangkat secara real-time. Pada tutorial ini, Anda akan mempelajari cara memprogram ESP32 agar dapat mengirim email menggunakan layanan Gmail SMTP Server. Email dikirim menggunakan akun Gmail sebagai pengirim (sender), sedangkan alamat penerima (recipient) dapat menggunakan akun email apa saja, baik Gmail maupun layanan email lainnya seperti Outlook, Yahoo Mail, dan sebagainya.
Perangkat Keras yang Dibutuhkan
- Modul ESP32 Dev Module (ESP-WROOM-32 38 Pin)
- Kabel Micro USB
Persiapan Akun Gmail
Sebelum ESP32 dapat mengirim email melalui Gmail, diperlukan konfigurasi khusus pada akun Google. Hal ini dilakukan karena Google tidak lagi mengizinkan aplikasi pihak ketiga menggunakan password akun utama untuk proses autentikasi SMTP. Sebagai gantinya, Google menyediakan fitur App Password (Kata Sandi Aplikasi) yang berfungsi sebagai password khusus untuk aplikasi seperti ESP32. Sebelum melanjutkan, perhatikan beberapa hal berikut:
- Disarankan untuk tidak menggunakan akun Gmail utama. Sebaiknya buat akun Gmail baru yang khusus digunakan untuk proses pengujian maupun proyek IoT sehingga lebih aman.
- Password yang digunakan pada program ESP32 bukan password login Gmail, melainkan App Password yang dibuat melalui akun Google.
Baca juga: ESP32 WebSocket - Cara Membangun Komunikasi Real-Time antara ESP32 dan Web Browser
Membuat App Password Gmail
Ikuti langkah-langkah berikut untuk memperoleh App Password yang nantinya akan digunakan pada program ESP32:
1. Buat Akun Gmail Baru
Buat sebuah akun Gmail baru yang akan digunakan sebagai akun pengirim email.
2. Login ke Akun Gmail
Masuk menggunakan akun Gmail yang baru saja dibuat.
3. Buka Halaman Google Account
Masuk ke menu Google Account melalui pengaturan akun Google.
4. Masuk ke Menu Security
Pilih menu Security (Keamanan) pada panel pengaturan akun Google.
5. Aktifkan 2-Step Verification
Aktifkan fitur 2-Step Verification (Verifikasi 2 Langkah). Perlu diketahui bahwa fitur App Password hanya tersedia apabila akun Google telah mengaktifkan Verifikasi 2 Langkah.
6. Buat App Password
Setelah Verifikasi 2 Langkah aktif, buka halaman App Passwords (Kata Sandi Aplikasi). Buat App Password baru, kemudian berikan nama sesuai kebutuhan, misalnya ESP32, IoT Project, atau nama lainnya.
7. Generate App Password
Klik tombol Create (Buat) atau Generate. Google akan menampilkan App Password yang terdiri dari 16 karakter.
8. Simpan App Password
Salin dan simpan App Password tersebut dengan baik. Password inilah yang nantinya digunakan pada program ESP32 sebagai pengganti password akun Gmail.
Catatan: Jangan pernah menggunakan password login Gmail pada program ESP32. Gunakan App Password yang telah dibuat pada langkah sebelumnya.
Kode Program ESP32
#include <WiFi.h>
#include <ESP_Mail_Client.h>
#define WIFI_SSID "YOUR_WIFI_SSID" // CHANGE IT
#define WIFI_PASSWORD "YOUR_WIFI_PASSWORD" // CHANGE IT
// the sender email credentials
#define SENDER_EMAIL "xxxxxx@gmail.com" // CHANGE IT
#define SENDER_PASSWORD "xxxx xxxx xxxx xxxx" // CHANGE IT to your Google App password
#define RECIPIENT_EMAIL "xxxxxx@gmail.com" // CHANGE IT
#define SMTP_HOST "smtp.gmail.com"
#define SMTP_PORT 587
SMTPSession smtp;
void setup() {
Serial.begin(9600);
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
Serial.print("Connecting to Wi-Fi");
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(300);
}
Serial.println();
Serial.print("Connected with IP: ");
Serial.println(WiFi.localIP());
Serial.println();
String subject = "Email Notification from ESP32";
String textMsg = "This is an email sent from ESP32.\n";
textMsg += "Sensor value: ";
textMsg += "15"; // OR replace this value read from a sensor
gmail_send(subject, textMsg);
}
void loop() {
// YOUR OTHER CODE HERE
}
void gmail_send(String subject, String textMsg) {
// set the network reconnection option
MailClient.networkReconnect(true);
smtp.debug(1);
smtp.callback(smtpCallback);
Session_Config config;
// set the session config
config.server.host_name = SMTP_HOST;
config.server.port = SMTP_PORT;
config.login.email = SENDER_EMAIL;
config.login.password = SENDER_PASSWORD;
config.login.user_domain = F("127.0.0.1");
config.time.ntp_server = F("pool.ntp.org,time.nist.gov");
config.time.gmt_offset = 3;
config.time.day_light_offset = 0;
// declare the message class
SMTP_Message message;
// set the message headers
message.sender.name = F("ESP32");
message.sender.email = SENDER_EMAIL;
message.subject = subject;
message.addRecipient(F("To Whom It May Concern"), RECIPIENT_EMAIL);
message.text.content = textMsg;
message.text.transfer_encoding = "base64";
message.text.charSet = F("utf-8");
message.priority = esp_mail_smtp_priority::esp_mail_smtp_priority_low;
// set the custom message header
message.addHeader(F("Message-ID: <abcde.fghij@gmail.com>"));
// connect to the server
if (!smtp.connect(&config)) {
Serial.printf("Connection error, Status Code: %d, Error Code: %d, Reason: %s\n", smtp.statusCode(), smtp.errorCode(), smtp.errorReason().c_str());
return;
}
if (!smtp.isLoggedIn()) {
Serial.println("Not yet logged in.");
} else {
if (smtp.isAuthenticated())
Serial.println("Successfully logged in.");
else
Serial.println("Connected with no Auth.");
}
// start sending Email and close the session
if (!MailClient.sendMail(&smtp, &message))
Serial.printf("Error, Status Code: %d, Error Code: %d, Reason: %s\n", smtp.statusCode(), smtp.errorCode(), smtp.errorReason().c_str());
}
// callback function to get the Email sending status
void smtpCallback(SMTP_Status status) {
// print the current status
Serial.println(status.info());
// print the sending result
if (status.success()) {
Serial.println("----------------");
Serial.printf("Message sent success: %d\n", status.completedCount());
Serial.printf("Message sent failed: %d\n", status.failedCount());
Serial.println("----------------\n");
for (size_t i = 0; i < smtp.sendingResult.size(); i++) {
// get the result item
SMTP_Result result = smtp.sendingResult.getItem(i);
Serial.printf("Message No: %d\n", i + 1);
Serial.printf("Status: %s\n", result.completed ? "success" : "failed");
Serial.printf("Date/Time: %s\n", MailClient.Time.getDateTimeString(result.timestamp, "%B %d, %Y %H:%M:%S").c_str());
Serial.printf("Recipient: %s\n", result.recipients.c_str());
Serial.printf("Subject: %s\n", result.subject.c_str());
}
Serial.println("----------------\n");
// free the memory
smtp.sendingResult.clear();
}
}
Cara Menjalankan Program
Setelah seluruh persiapan selesai, ikuti langkah-langkah berikut untuk mengunggah program ke board ESP32.
1. Hubungkan ESP32 ke Komputer
Hubungkan board ESP32 ke PC atau laptop menggunakan kabel Micro USB.
2. Buka Arduino IDE
Jalankan aplikasi Arduino IDE.
3. Pilih Board dan Port
Pada menu Tools, pilih:
- Board: ESP32 Dev Module (atau board ESP32 yang digunakan)
- Port: Sesuaikan dengan port COM tempat ESP32 terhubung.
4. Install Library ESP Mail Client
Buka Library Manager melalui Arduino IDE. Cari library ESP Mail Client. Pilih library ESP Mail Client yang dikembangkan oleh Mobizt, kemudian klik Install. Library ini digunakan agar ESP32 dapat berkomunikasi dengan server SMTP Gmail untuk mengirim email.
5. Buka Program
Salin kode program yang telah disediakan kemudian buka menggunakan Arduino IDE.
6. Konfigurasi Jaringan WiFi
Ubah parameter berikut sesuai dengan jaringan WiFi yang digunakan.
- WIFI_SSID → nama jaringan WiFi
- WIFI_PASSWORD → password WiFi
Pastikan ESP32 terhubung ke jaringan internet agar dapat mengakses server Gmail.
7. Konfigurasi Email Pengirim
Masukkan informasi akun Gmail yang akan digunakan sebagai pengirim email dengan mengubah parameter berikut:
- SENDER_EMAIL
- SENDER_PASSWORD
Isi SENDER_EMAIL menggunakan alamat Gmail yang telah dibuat sebelumnya. Sedangkan SENDER_PASSWORD harus diisi menggunakan App Password, bukan password login Gmail.
8. Tentukan Email Penerima
Selanjutnya, ubah nilai RECIPIENT_EMAIL. Isi dengan alamat email tujuan. Email penerima dapat berupa:
- Gmail
- Outlook
- Yahoo Mail
- iCloud Mail
- Layanan email lainnya yang valid
Jika hanya ingin melakukan pengujian, Anda juga dapat menggunakan alamat Gmail yang sama sebagai pengirim sekaligus penerima.
Perlu Diperhatikan
Sebelum mengunggah program, pastikan konfigurasi berikut sudah benar.
- Email pengirim harus menggunakan Gmail.
- Password pengirim harus berupa App Password yang telah dibuat melalui akun Google.
- Email penerima dapat menggunakan layanan email apa pun.
Kesalahan konfigurasi pada salah satu parameter di atas dapat menyebabkan proses pengiriman email gagal.
9. Upload Program
Klik tombol Upload pada Arduino IDE untuk mengunggah program ke board ESP32. Tunggu hingga proses upload selesai.
10. Buka Serial Monitor
Setelah proses upload berhasil, buka Serial Monitor. ESP32 akan menampilkan proses koneksi ke jaringan WiFi, autentikasi ke server Gmail, hingga status pengiriman email. Jika seluruh proses berhasil, Serial Monitor akan menampilkan informasi bahwa email telah berhasil dikirim.
11. Periksa Email Penerima
Buka akun email penerima yang telah dikonfigurasi sebelumnya. Jika semua konfigurasi telah dilakukan dengan benar, Anda akan menerima email yang dikirim oleh ESP32 melalui Gmail.
Baca juga: DIYables ESP32 Web Server - Cara Mengontrol LED melalui Web Browser Menggunakan ESP32
Dalam praktik, hasil dan kendala yang ditemui bisa berbeda tergantung perangkat, konfigurasi, versi library, dan sistem yang digunakan.
- Diskusi umum dan tanya jawab praktik: https://t.me/edukasielektronika
- Kendala spesifik dan kasus tertentu: http://bit.ly/Chatarduino



0 on: "DIYables ESP32 Gmail - Cara Mengirim Email Menggunakan Gmail dengan ESP32"