Blog Archive

Arduino Indonesia. Gambar tema oleh Storman. Diberdayakan oleh Blogger.

Supported by Electronics 3 in 1

1. Jasa pencetakan PCB single layer dengan harga paling murah.

(Metode Pembuatan dengan Transfer Toner)
>PCB design sendiri (siap cetak) : Rp.150,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

(Metode Sablon Full Masking dan Silk Screen minimal pemesanan 100 Pcs)
>PCB design sendiri (siap cetak) : Rp.200,-/Cm2
>PCB design dari kami : Rp.250,-/Cm2

2. Jasa perancangan, perakitan, dan pembuatan trainer pembelajaran elektronika untuk SMK dan Mahasiswa.

3. Jasa perancangan, perakitan, dan pembuatan berbagai macam kontroller, sensor, aktuator, dan tranduser.
>Design Rangkaian / Sistem Elektronika
>Design Rangkaian / Sistem Instrumentasi
>Design Rangkaian / Sistem Kendali
>Kerjasama Riset (data atau peralatan)
>Kerjasama Produksi Produk-Produk KIT Elektronika
>Produksi Instrumentasi Elektronika

4. Jasa Pembuatan Proyek, Tugas Akhir, Tugas Laboratorium, PKM, Karya Ilmiah, SKRIPSI, dll

Like My Facebook

Popular Posts

Jumat, 19 Desember 2025

MicroPython - Mengirim Email dengan ESP32/ESP8266

Pelajari cara memprogram board ESP32 atau ESP8266 NodeMCU menggunakan MicroPython untuk mengirim email melalui server SMTP. Fitur ini sangat berguna dalam proyek otomasi dan Internet of Things (IoT), seperti untuk mengirim notifikasi peringatan, menyampaikan pesan berisi data pembacaan sensor, serta berbagai kebutuhan monitoring dan komunikasi sistem lainnya.

Pengenalan Server SMTP

SMTP (Simple Mail Transfer Protocol) adalah standar internet yang digunakan untuk proses pengiriman email. Untuk dapat mengirim email menggunakan board ESP32 atau ESP8266, perangkat harus terhubung ke sebuah server SMTP sebagai perantara pengiriman pesan email.

Modul uMail

Untuk mempermudah pengiriman email menggunakan MicroPython, kita akan menggunakan modul bernama uMail. Modul ini bukan bagian dari pustaka standar MicroPython, sehingga perlu diunggah secara manual ke board ESP32 atau ESP8266. Langkah-langkah pengunggahan modul ini akan dijelaskan pada bagian selanjutnya dalam tutorial.

Konfigurasi Server SMTP

Agar ESP32 atau ESP8266 dapat mengirim email, diperlukan sebuah alamat email pengirim serta informasi konfigurasi server SMTP dari penyedia layanan email yang digunakan. Informasi ini mencakup alamat server, port, dan metode keamanan. Berikut ini adalah pengaturan SMTP untuk beberapa penyedia email yang umum digunakan.

Pengaturan Server SMTP Gmail

Jika Anda menggunakan akun Gmail, berikut adalah detail konfigurasi server SMTP yang diperlukan:

Konfigurasi Server SMTP Gmail

- Server SMTP: smtp.gmail.com

- Username SMTP: Alamat email Gmail lengkap

- Password SMTP: Kata sandi akun Gmail

- Port SMTP (TLS): 587

- Port SMTP (SSL): 465

- TLS/SSL: Wajib digunakan

Konfigurasi Server SMTP Outlook

Untuk akun Outlook, berikut pengaturan server SMTP yang digunakan:

- Server SMTP: smtp.office365.com

- Username SMTP: Alamat email Outlook lengkap

- Password SMTP: Kata sandi akun Outlook

- Port SMTP: 587

- TLS/SSL: Wajib digunakan

Konfigurasi Server SMTP Live / Hotmail

Jika Anda menggunakan akun Live atau Hotmail, gunakan pengaturan berikut:

- Server SMTP: smtp.live.com

- Username SMTP: Alamat email Live atau Hotmail lengkap

- Password SMTP: Kata sandi akun Windows Live/Hotmail

- Port SMTP: 587

- TLS/SSL: Wajib digunakan

Jika Anda menggunakan penyedia layanan email lain, silakan cari informasi pengaturan server SMTP yang sesuai. Data tersebut umumnya dapat ditemukan dengan mudah melalui dokumentasi resmi atau pencarian singkat di internet.

Email Pengirim (Akun Baru)

Kami menyarankan untuk membuat akun email khusus yang digunakan sebagai pengirim email ke alamat email utama Anda. Hindari menggunakan email pribadi utama sebagai email pengirim pada sistem ESP32 atau ESP8266. Jika terjadi kesalahan pada kode program atau perangkat secara tidak sengaja mengirim terlalu banyak permintaan, akun email tersebut berisiko diblokir atau dinonaktifkan sementara oleh penyedia layanan email.

 

Pada tutorial ini, kita akan menggunakan akun Gmail yang baru dibuat sebagai email pengirim. Namun, Anda dapat menggunakan penyedia layanan email lain sesuai kebutuhan. Untuk email penerima, Anda dapat menggunakan email pribadi utama tanpa kendala.

Membuat Akun Email Pengirim

Buat sebuah akun email baru yang akan digunakan khusus untuk pengiriman email melalui ESP32 atau ESP8266. Jika Anda ingin menggunakan Gmail, silakan buat akun baru melalui halaman pendaftaran Gmail resmi.



Membuat App Password

Agar perangkat atau aplikasi eksternal dapat mengirim email menggunakan akun Gmail, Anda perlu membuat App Password. App Password adalah kode sandi khusus sepanjang 16 digit yang memungkinkan aplikasi atau perangkat dengan tingkat keamanan lebih rendah (seperti ESP32 atau ESP8266) untuk mengakses akun Google Anda tanpa menggunakan kata sandi utama.

 

Perlu diperhatikan bahwa App Password hanya dapat digunakan pada akun Gmail yang telah mengaktifkan verifikasi dua langkah (2-Step Verification).

Mengaktifkan Verifikasi Dua Langkah

Ikuti langkah-langkah berikut untuk mengaktifkan 2-Step Verification pada akun Google Anda:

1. Buka halaman Google Account.

2. Pada panel navigasi, pilih menu Security (Keamanan).

3. Pada bagian Signing in to Google, pilih 2-Step Verification, lalu klik Get started (Mulai).

4. Ikuti petunjuk yang ditampilkan hingga proses verifikasi dua langkah berhasil diaktifkan.

Membuat App Password

Setelah verifikasi dua langkah aktif, Anda dapat membuat App Password dengan langkah berikut:

1. Buka kembali halaman Google Account.

2. Masuk ke menu Security (Keamanan).

3. Pada bagian Signing in to Google, pilih App Passwords.

4. Buat App Password baru dan simpan kode yang dihasilkan untuk digunakan pada konfigurasi SMTP di ESP32 atau ESP8266.

Pada bagian Select app, pilih Mail. Untuk opsi Select device, pilih Other (Lainnya) lalu berikan nama perangkat, misalnya ESP32. Setelah itu, klik Generate.

 

Sebuah jendela akan muncul yang menampilkan App Password yang akan digunakan oleh ESP32 atau ESP8266 untuk mengirim email melalui server SMTP. Simpan kode sandi tersebut dengan baik (meskipun tertulis bahwa Anda tidak perlu mengingatnya), karena kode ini akan diperlukan pada tahap konfigurasi dan pemrograman selanjutnya.


Sekarang, Anda telah memiliki App Password yang akan digunakan pada skrip MicroPython ESP32/ESP8266 untuk proses pengiriman email melalui server SMTP.



Jika Anda menggunakan penyedia layanan email selain Gmail, silakan pelajari cara membuat App Password sesuai dengan kebijakan masing-masing penyedia. Panduan pembuatannya umumnya dapat ditemukan dengan mudah melalui dokumentasi resmi atau dengan melakukan pencarian singkat menggunakan kata kunci “nama penyedia email + app password”.

Mengunggah Modul uMail

Untuk mengirim email, kita akan menggunakan modul uMail. Modul ini dapat ditemukan pada repositori GitHub resminya yang juga menyediakan beberapa contoh penggunaan. Perlu diperhatikan bahwa pustaka ini tidak termasuk dalam library standar MicroPython, sehingga harus diunggah secara manual ke board ESP32 atau ESP8266. Sebelum menggunakan modul ini, unggah file berikut ke board Anda dan simpan dengan nama `umail.py`.

 

import usocket


DEFAULT_TIMEOUT = 10 # sec

LOCAL_DOMAIN = '127.0.0.1'

CMD_EHLO = 'EHLO'

CMD_STARTTLS = 'STARTTLS'

CMD_AUTH = 'AUTH'

CMD_MAIL = 'MAIL'

AUTH_PLAIN = 'PLAIN'

AUTH_LOGIN = 'LOGIN'


class SMTP:

    def cmd(self, cmd_str):

        sock = self._sock;

        sock.write('%s\r\n' % cmd_str)

        resp = []

        next = True

        while next:

            code = sock.read(3)

            next = sock.read(1) == b'-'

            resp.append(sock.readline().strip().decode())

        return int(code), resp


    def __init__(self, host, port, ssl=False, username=None, password=None):

        import ssl

        self.username = username

        addr = usocket.getaddrinfo(host, port)[0][-1]

        sock = usocket.socket(usocket.AF_INET, usocket.SOCK_STREAM)

        sock.settimeout(DEFAULT_TIMEOUT)

        sock.connect(addr)

        if ssl:

            sock = ssl.wrap_socket(sock)

        code = int(sock.read(3))

        sock.readline()

        assert code==220, 'cant connect to server %d, %s' % (code, resp)

        self._sock = sock


        code, resp = self.cmd(CMD_EHLO + ' ' + LOCAL_DOMAIN)

        assert code==250, '%d' % code

        if not ssl and CMD_STARTTLS in resp:

            code, resp = self.cmd(CMD_STARTTLS)

            assert code==220, 'start tls failed %d, %s' % (code, resp)

            self._sock = ssl.wrap_socket(sock)


        if username and password:

            self.login(username, password)


    def login(self, username, password):

        self.username = username

        code, resp = self.cmd(CMD_EHLO + ' ' + LOCAL_DOMAIN)

        assert code==250, '%d, %s' % (code, resp)


        auths = None

        for feature in resp:

            if feature[:4].upper() == CMD_AUTH:

                auths = feature[4:].strip('=').upper().split()

        assert auths!=None, "no auth method"


        from ubinascii import b2a_base64 as b64

        if AUTH_PLAIN in auths:

            cren = b64("\0%s\0%s" % (username, password))[:-1].decode()

            code, resp = self.cmd('%s %s %s' % (CMD_AUTH, AUTH_PLAIN, cren))

        elif AUTH_LOGIN in auths:

            code, resp = self.cmd("%s %s %s" % (CMD_AUTH, AUTH_LOGIN, b64(username)[:-1].decode()))

            assert code==334, 'wrong username %d, %s' % (code, resp)

            code, resp = self.cmd(b64(password)[:-1].decode())

        else:

            raise Exception("auth(%s) not supported " % ', '.join(auths))


        assert code==235 or code==503, 'auth error %d, %s' % (code, resp)

        return code, resp


    def to(self, addrs, mail_from=None):

        mail_from = self.username if mail_from==None else mail_from

        code, resp = self.cmd(CMD_EHLO + ' ' + LOCAL_DOMAIN)

        assert code==250, '%d' % code

        code, resp = self.cmd('MAIL FROM: <%s>' % mail_from)

        assert code==250, 'sender refused %d, %s' % (code, resp)


        if isinstance(addrs, str):

            addrs = [addrs]

        count = 0

        for addr in addrs:

            code, resp = self.cmd('RCPT TO: <%s>' % addr)

            if code!=250 and code!=251:

                print('%s refused, %s' % (addr, resp))

                count += 1

        assert count!=len(addrs), 'recipient refused, %d, %s' % (code, resp)


        code, resp = self.cmd('DATA')

        assert code==354, 'data refused, %d, %s' % (code, resp)

        return code, resp


    def write(self, content):

        self._sock.write(content)


    def send(self, content=''):

        if content:

            self.write(content)

        self._sock.write('\r\n.\r\n') # the five letter sequence marked for ending

        line = self._sock.readline()

        return (int(line[:3]), line[4:].strip().decode())


    def quit(self):

        self.cmd("QUIT")

        self._sock.close()

 

Terlepas dari IDE yang Anda gunakan, berikut adalah langkah-langkah umum untuk mengunggah library uMail ke board ESP32 atau ESP8266:

1. Pastikan board Anda sudah menjalankan firmware MicroPython (lihat bagian Prerequisites).

2. Buat file baru pada IDE yang digunakan dengan nama `umail.py`, lalu salin kode library uMail ke dalam file tersebut dan simpan.

3. Hubungkan board ke komputer dan lakukan komunikasi serial menggunakan IDE.

4. Unggah file `umail.py` ke board ESP32/ESP8266.

Jika langkah-langkah di atas dilakukan dengan benar, maka library uMail telah berhasil diunggah dan siap digunakan. Selanjutnya, Anda dapat memanfaatkan fungsi-fungsi pada library ini dengan menambahkan perintah berikut pada kode program: `import umail`

Mengirim Email dengan ESP32/ESP8266 (MicroPython) – Kode Program

Pada tahap ini, file `umail.py` seharusnya sudah tersimpan di board sehingga ESP32 atau ESP8266 dapat mengirim email menggunakan modul uMail.

 

Contoh skrip berikut akan mengirim sebuah email sederhana setiap kali board ESP32/ESP8266 dinyalakan atau dilakukan proses reset.

 

import umail

import network


# Your network credentials

ssid = 'REPLACE_WITH_YOUR_SSID'

password = 'REPLACE_WITH_YOUR_PASSWORD'


# Email details

sender_email = 'REPLACE_WITH_THE_SENDER_EMAIL'

sender_name = 'ESP32' #sender name

sender_app_password = 'REPLACE_WITH_THE_SENDER_EMAIL_APP_PASSWORD'

recipient_email ='REPLACE_WITH_THE_RECIPIENT_EMAIL'

email_subject ='Test Email'


def connect_wifi(ssid, password):

  #Connect to your network

  station = network.WLAN(network.STA_IF)

  station.active(True)

  station.connect(ssid, password)

  while station.isconnected() == False:

    pass

  print('Connection successful')

  print(station.ifconfig())

    

# Connect to your network

connect_wifi(ssid, password)


# Send the email

smtp = umail.SMTP('smtp.gmail.com', 465, ssl=True) # Gmail's SSL port

smtp.login(sender_email, sender_app_password)

smtp.to(recipient_email)

smtp.write("From:" + sender_name + "<"+ sender_email+">\n")

smtp.write("Subject:" + email_subject + "\n")

smtp.write("Hello from ESP32")

smtp.send()

smtp.quit()

 

Sebelum mengunggah kode ke board, Anda perlu menyesuaikan beberapa parameter pada program, antara lain SSID dan password Wi-Fi, alamat email pengirim, nama pengirim, App Password yang sesuai, alamat email penerima, serta subjek email.

 

Setelah seluruh data tersebut diisi dengan benar, Anda dapat mengunggah kode ke board ESP32 atau ESP8266. Pastikan file program disimpan dengan nama `main.py`, karena MicroPython akan menjalankan file ini secara otomatis saat board dinyalakan atau di-reset. Jika nama file berbeda, program tidak akan berjalan sebagaimana mestinya.

Cara Kerja Program

Langkah pertama dalam program adalah memanggil library yang dibutuhkan. Program menggunakan library `umail` yang sebelumnya telah diunggah ke board untuk menangani proses pengiriman email, serta library `network` untuk mengonfigurasi ESP32/ESP8266 sebagai Wi-Fi station sehingga dapat terhubung ke jaringan internet (jaringan lokal).

 

import umail # Micropython lib to send emails: https://github.com/shawwwn/uMail

import network

 

Masukkan kredensial jaringan Wi-Fi, yaitu SSID dan password, ke dalam variabel yang disediakan agar board dapat terhubung ke jaringan internet.

 

ssid = 'REPLACE_WITH_YOUR_SSID'

password = 'REPLACE_WITH_YOUR_PASSWORD'

 

Masukkan detail email pengirim, meliputi alamat email, nama pengirim, serta App Password yang sesuai. Perlu diperhatikan bahwa penggunaan App Password wajib dilakukan, kata sandi email biasa tidak dapat digunakan. Silakan lihat penjelasan pada bagian sebelumnya mengenai pembuatan App Password.

 

# Email details

sender_email = 'REPLACE_WITH_THE_SENDER_EMAIL'

sender_name = 'ESP32' #sender name

sender_app_password = 'REPLACE_WITH_THE_SENDER_EMAIL_APP_PASSWORD'

 

Masukkan alamat email penerima ke dalam variabel `recipient_email`.

 

recipient_email ='REPLACE_WITH_THE_RECIPIENT_EMAIL'

 

Subjek email secara default diatur sebagai “Test Email”, namun Anda dapat mengubahnya melalui variabel `email_subject` sesuai kebutuhan.

 

email_subject ='Test Email'

 

Kami membuat sebuah fungsi bernama `connect_wifi()` yang menerima parameter SSID dan password dari jaringan yang akan digunakan. Fungsi ini dipanggil pada tahap selanjutnya untuk menghubungkan board ESP32/ESP8266 ke jaringan internet.

 

def connect_wifi(ssid, password):

  #Connect to your network

  station = network.WLAN(network.STA_IF)

  station.active(True)

  station.connect(ssid, password)

  while station.isconnected() == False:

    pass

  print('Connection successful')

  print(station.ifconfig())

 

Sebelum mengirim email, ESP32/ESP8266 harus terhubung ke jaringan internet. Oleh karena itu, panggil fungsi `connect_wifi()` dengan menyertakan parameter SSID dan password jaringan.

 

# Connect to your network

connect_wifi(ssid, password)

 

Setelah koneksi internet berhasil, kita dapat mulai menyiapkan dan mengirim email.

 

Langkah pertama adalah membuat klien SMTP dengan nama `smtp` menggunakan konfigurasi server SMTP dari penyedia layanan email yang digunakan. Pada contoh ini, digunakan akun Gmail. Jika Anda menggunakan penyedia email lain, sesuaikan pengaturan alamat server, port, serta opsi SSL/TLS sesuai dengan ketentuan layanan tersebut.

 

smtp = umail.SMTP('smtp.gmail.com', 465, ssl=True) # Gmail's SSL port

 

Selanjutnya, lakukan proses login ke akun email menggunakan metode `login()` pada klien SMTP dengan memasukkan alamat email dan App Password yang sesuai sebagai parameter.

 

smtp.login(sender_email, sender_app_password)

 

Tentukan alamat email penerima menggunakan metode `to()` dengan memasukkan alamat email penerima sebagai parameter.

 

smtp.to(recipient_email)

 

Selanjutnya, gunakan metode `write()` untuk menuliskan isi email. Metode ini dapat digunakan, misalnya, untuk menetapkan nama pengirim pada email.

 

smtp.write("From:" + sender_name + "<"+ sender_email+">\n")

 

Baris kode berikut dapat digunakan untuk menentukan subjek email.

 

smtp.write("Subject:" + email_subject + "\n")

 

Terakhir, Anda dapat menuliskan isi email yang akan dikirim. Pada contoh ini, email yang dikirim masih berupa email uji coba, dengan pesan “Hello from the ESP32/ESP8266”. Metode `write()` berfungsi untuk mengirimkan konten email tersebut ke server SMTP.

 

smtp.write("Hello from the ESP32/ESP8266")

 

Jika Anda perlu mengirim isi email dengan teks yang panjang, pecah pesan email menjadi beberapa bagian yang lebih kecil, lalu kirimkan setiap bagian tersebut menggunakan metode `write()`. 


Terakhir, gunakan metode `send()` untuk memerintahkan server SMTP agar mengirim email tersebut ke alamat penerima.

 

smtp.send()

 

Pada tahap akhir, tutup koneksi dengan server SMTP menggunakan metode `quit()`.

 

smtp.quit()

 

Berikut versi Bahasa Indonesia teknis dan mudah dipahami sebagai pengganti kalimat Demonstrasi

Setelah modul uMail dan skrip `main.py` berhasil diunggah ke board, jalankan program atau lakukan reset/restart pada board. Jika koneksi berhasil, Anda akan melihat pesan pada shell/terminal yang menunjukkan bahwa board telah terhubung ke jaringan internet dengan sukses.



Setelah beberapa saat, email baru akan diterima pada akun email penerima.



Buka email tersebut untuk memeriksa isi pesan yang dikirim.


 

 

 

 

 

 

 

 

 

 

Siap Untuk Membuat Proyek Impianmu Menjadi Kenyataan?

Klik di sini untuk chat langsung via WhatsApp dan dapatkan dukungan langsung dari tim ahli kami! 

 

0 on: "MicroPython - Mengirim Email dengan ESP32/ESP8266"