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

Rabu, 03 Desember 2025

Panduan Lengkap Mengirim Email via SMTP pada Raspberry Pi Pico W (MicroPython)

Pelajari prosedur pengiriman email menggunakan Raspberry Pi Pico melalui protokol SMTP. Kapabilitas ini sangat berguna dalam implementasi sistem otomasi dan aplikasi IoT, misalnya untuk mengirim notifikasi peringatan, melaporkan data hasil pembacaan sensor, maupun komunikasi sistem lainnya. Raspberry Pi Pico akan diprogram menggunakan firmware MicroPython.

Pengenalan Server SMTP

SMTP (Simple Mail Transfer Protocol) merupakan protokol standar pada tingkat aplikasi yang digunakan untuk melakukan transmisi email melalui jaringan TCP/IP. Untuk mengirim email dari Raspberry Pi Pico, perangkat harus terhubung ke server SMTP yang sesuai dengan akun email pengirim.

Modul uMail

Untuk menyederhanakan proses pengiriman email pada MicroPython, kita memanfaatkan modul pihak ketiga bernama uMail. Modul ini tidak termasuk dalam pustaka standar MicroPython, sehingga harus diunggah secara manual ke Raspberry Pi Pico. Petunjuk pengunggahan akan dijelaskan pada bagian berikutnya dalam tutorial.

Konfigurasi Server SMTP

Agar Raspberry Pi Pico dapat mengirim email, Anda harus memiliki akun email sebagai alamat pengirim dan mengetahui parameter konfigurasi SMTP yang digunakan oleh penyedia layanan email tersebut. Bagian selanjutnya akan menyajikan konfigurasi SMTP dari sejumlah penyedia email yang umum digunakan.

Pengaturan Server SMTP Gmail

Jika menggunakan akun Gmail, parameter koneksi SMTP adalah sebagai berikut:

- SMTP Server: smtp.gmail.com

- SMTP Username: alamat email Gmail lengkap

- SMTP Password: kata sandi Gmail (atau App Password jika autentikasi dua faktor diaktifkan)

- SMTP Port (TLS): 587

- SMTP Port (SSL): 465

- TLS/SSL Required: Ya

Pengaturan Server SMTP Outlook

Untuk akun Outlook, gunakan konfigurasi berikut:

- SMTP Server: smtp.office365.com

- SMTP Username: alamat email Outlook lengkap

- SMTP Password: kata sandi Outlook

- SMTP Port (TLS): 587

- TLS/SSL Required: Ya

Pengaturan Server SMTP Live atau Hotmail

Untuk akun Live atau Hotmail, gunakan parameter berikut:

- SMTP Server: smtp.live.com

- SMTP Username: alamat email Live/Hotmail lengkap

- SMTP Password: kata sandi Windows Live/Hotmail

- SMTP Port (TLS): 587

- TLS/SSL Required: Ya

Jika Anda menggunakan penyedia email selain yang tercantum di atas, Anda perlu mencari parameter SMTP spesifik penyedia tersebut. Informasi ini biasanya tersedia pada halaman dukungan resmi penyedia layanan email atau dapat ditemukan melalui pencarian cepat di Google.

 

Baca juga: Raspberry Pi Pico W - Kirim Pesan ke WhatsApp (MicroPython) 

Email Pengirim (Akun Baru)

Disarankan untuk membuat akun email terpisah yang berfungsi khusus sebagai sender account untuk proses pengiriman email melalui Raspberry Pi Pico. Hindari menggunakan akun email pribadi utama sebagai pengirim, karena kesalahan implementasi, seperti loop yang tidak disengaja atau frekuensi permintaan SMTP yang berlebihan dapat menyebabkan akun tersebut diblokir atau dinonaktifkan sementara oleh penyedia layanan email.

 

Implementasi pada contoh ini menggunakan layanan Gmail sebagai SMTP relay, namun Anda bebas menggunakan penyedia email lain yang mendukung autentikasi SMTP. Alamat email penerima dapat berupa email pribadi utama Anda tanpa menimbulkan risiko operasional.

Buat Akun Email Pengirim

Buat akun email baru untuk mengirim email dengan Raspberry Pi Pico. Jika Anda ingin menggunakan akun Gmail, buka tautan ini untuk membuat akun baru.


Pembuatan App Password

Untuk memungkinkan perangkat eksternal atau aplikasi non-OAuth - seperti Raspberry Pi Pico -mengirim email melalui akun Gmail, Anda perlu membuat App Password. App Password adalah kredensial 16 digit yang memberikan akses terbatas dan aman kepada aplikasi yang tidak mendukung mekanisme autentikasi modern (OAuth 2.0).

Fitur ini hanya tersedia untuk akun Google yang telah mengaktifkan autentikasi dua langkah (2-Step Verification).

Langkah Mengaktifkan 2-Step Verification

1. Akses Google Account Anda melalui browser.

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

3. Pada bagian “Signing in to Google”, pilih 2-Step Verification, kemudian klik Get Started atau Mulai.

4. Ikuti seluruh instruksi verifikasi hingga proses aktivasi selesai.

Langkah Membuat App Password

1. Masuk kembali ke halaman Google Account.

2. Gunakan kolom pencarian internal dan cari App Passwords atau Kata Sandi Aplikasi.

3. Buka menu App Passwords, lalu buat kata sandi aplikasi baru untuk konfigurasi SMTP yang akan digunakan perangkat Anda.



4. Sekarang Anda dapat menghasilkan App Password baru yang akan digunakan oleh Raspberry Pi Pico untuk autentikasi SMTP. Berikan identifikasi yang sesuai pada entri tersebut—misalnya “Pi Pico” untuk memudahkan pengelolaan dan pelacakan kredensial di kemudian hari.

 

Klik Create untuk menghasilkan App Password. Sistem akan menampilkan kode autentikasi 16 digit. Simpan kredensial ini pada lokasi penyimpanan yang aman, karena nilai tersebut akan digunakan pada tahap konfigurasi SMTP berikutnya (walaupun antarmuka menyatakan bahwa penyimpanan ulang tidak diperlukan).



Pada tahap ini, Anda telah memperoleh app password yang akan digunakan sebagai kredensial autentikasi SMTP dalam skrip MicroPython pada Raspberry Pi Pico untuk proses pengiriman email.



Jika Anda menggunakan penyedia layanan email selain Gmail, lakukan penelusuran mengenai prosedur pembuatan application-specific password. Informasi tersebut umumnya tersedia melalui pencarian cepat dengan kata kunci: "nama_penyedia_email + application password" atau "nama_penyedia_email + generate app password".

Mengunggah Modul uMail

Untuk mengaktifkan fungsi pengiriman email pada Raspberry Pi Pico, digunakan modul uMail, yang merupakan pustaka eksternal dan tidak termasuk dalam distribusi standar MicroPython. Oleh karena itu, file modul harus di-deploy secara manual ke papan.

Sebelum implementasi, unduh atau salin berkas sumber uMail dari repositori GitHub resminya. Kemudian unggah berkas tersebut ke Raspberry Pi Pico dan simpan dengan nama `umail.py` pada direktori root sistem berkas perangkat. Modul ini harus tersedia di sistem berkas agar dapat di-import dan dieksekusi oleh skrip MicroPython.

 

# Complete project details: https://RandomNerdTutorials.com/raspberry-pi-pico-w-send-email-micropython/

# uMail (MicroMail) for MicroPython Copyright (c) 2018 Shawwwn <shawwwn1@gmai.com> https://github.com/shawwwn/uMail/blob/master/umail.py License: MIT

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()

 

1. Buat berkas baru pada Thonny IDE dan tempelkan kode modul uMail yang telah disediakan sebelumnya.

2. Navigasikan ke File > Save As…, kemudian pilih target penyimpanan Raspberry Pi Pico sebagai lokasi deployment.

3. Simpan berkas tersebut dengan nama `umail.py` (nama file harus dipertahankan agar modul dapat di-import dengan benar).

Setelah prosedur ini selesai, modul uMail akan tersedia pada sistem berkas Raspberry Pi Pico. Dengan demikian, pustaka dapat diakses langsung dalam skrip MicroPython melalui perintah: import umail.

Mengirim Email dengan Raspberry Pi Pico (MicroPython) – Implementasi Kode

Kode program MicroPython ini menginisiasi proses pengiriman email sederhana secara otomatis pada saat Raspberry Pi Pico melakukan boot atau reset, memanfaatkan koneksi jaringan dan kredensial SMTP yang telah dikonfigurasi sebelumnya.


# Rui Santos & Sara Santos - Random Nerd Tutorials

# Complete project details at https://RandomNerdTutorials.com/raspberry-pi-pico-w-send-email-micropython/

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

import umail

import network

import time


# Your network credentials

ssid = 'REPLACE_WITH_YOUR_SSID'

password = 'REPLACE_WITH_YOUR_PASSWORD'


# Email details

sender_email = 'REPLACE_WITH_THE_SENDER_EMAIL'

sender_name = 'Raspberry Pi Pico'

sender_app_password = 'REPLACE_WITH_THE_SENDER_EMAIL_APP_PASSWORD'

recipient_email ='REPLACE_WITH_THE_RECIPIENT_EMAIL'

email_subject ='Hello from RPi Pico W'


# Init Wi-Fi Interface

def init_wifi(ssid, password):

    wlan = network.WLAN(network.STA_IF)

    wlan.active(True)

    # Connect to your network

    wlan.connect(ssid, password)

    # Wait for Wi-Fi connection

    connection_timeout = 10

    while connection_timeout > 0:

        print(wlan.status())

        if wlan.status() >= 3:

            break

        connection_timeout -= 1

        print('Waiting for Wi-Fi connection...')

        time.sleep(1)

    # Check if connection is successful

    if wlan.status() != 3:

        print('Failed to connect to Wi-Fi')

        return False

    else:

        print('Connection successful!')

        network_info = wlan.ifconfig()

        print('IP address:', network_info[0])

        return True

    

# Connect to your network

init_wifi(ssid, password)


# Send the email

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


try:

    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 the Raspberry Pi Pico. Testing.")

    smtp.send()

    print("Email Sent Successfully")

    

except Exception as e:

    print("Failed to send email:", e)

finally:

smtp.quit()

 

Anda harus mengonfigurasi parameter kredensial pada kode program sebelum mengunggahnya ke papan, termasuk: SSID dan kata sandi jaringan Wi-Fi, alamat email pengirim, display name pengirim, kata sandi aplikasi (bukan kata sandi akun email), alamat email penerima, serta subject email. Setelah seluruh parameter dikonfigurasi, jalankan kode program untuk melakukan pengujian. Jika Anda ingin agar kode program dieksekusi secara otomatis tanpa koneksi ke komputer, simpan file tersebut pada Raspberry Pi Pico dengan nama main.py, sehingga akan dipanggil secara otomatis selama proses boot.

Cara Kerja Kode

Pertama, impor pustaka-pustaka yang diperlukan. Modul umail, yang sebelumnya telah diunggah ke Raspberry Pi Pico, digunakan sebagai antarmuka untuk melakukan transaksi SMTP. Selain itu, modul network diperlukan untuk mengonfigurasi Pico dalam mode station (STA), sehingga perangkat dapat terhubung ke jaringan Wi-Fi lokal dan memperoleh akses ke internet.

 

import umail

import network

 

Masukkan kredensial jaringan, SSID, dan kata sandi Anda pada variabel berikut agar papan Anda dapat terhubung ke internet:

 

ssid = 'REPLACE_WITH_YOUR_SSID'

password = 'REPLACE_WITH_YOUR_PASSWORD'

 

Masukkan parameter kredensial email, yang mencakup alamat email pengirim, identitas tampilan pengirim (display name), serta kata sandi aplikasi yang berfungsi sebagai token autentikasi SMTP. Penggunaan kata sandi aplikasi bersifat wajib karena kredensial login email standar tidak akan diterima oleh server SMTP. Untuk prosedur pembuatan kata sandi aplikasi, lihat penjelasan pada bagian sebelumnya.

 

# Email details

sender_email = 'REPLACE_WITH_THE_SENDER_EMAIL'

sender_name = 'Raspberry Pi Pico'

sender_app_password = 'REPLACE_WITH_THE_SENDER_EMAIL_APP_PASSWORD'

 

Masukkan email penerima pada variabel recipient_email:

 

recipient_email ='REPLACE_WITH_THE_RECIPIENT_EMAIL'

 

Subjek email ditetapkan ke Halo dari RPi Pico W, tetapi Anda dapat mengubahnya pada variabel email_subject.

 

email_subject ='Hello from RPi Pico W'

 

Kami mendefinisikan fungsi init_wifi() yang menerima parameter SSID dan kata sandi jaringan sebagai argumen. Fungsi ini bertugas melakukan inisialisasi antarmuka WLAN, mengonfigurasi Pico dalam mode station, serta mengeksekusi proses autentikasi dan asosiasi ke access point. Fungsi ini harus dipanggil pada tahap awal eksekusi program untuk memastikan Raspberry Pi Pico mendapatkan konektivitas jaringan sebelum melakukan operasi berbasis internet.

 

# Init Wi-Fi Interface

def init_wifi(ssid, password):

    wlan = network.WLAN(network.STA_IF)

    wlan.active(True)

    # Connect to your network

    wlan.connect(ssid, password)

    # Wait for Wi-Fi connection

    connection_timeout = 10

    while connection_timeout > 0:

        print(wlan.status())

        if wlan.status() >= 3:

            break

        connection_timeout -= 1

        print('Waiting for Wi-Fi connection...')

        time.sleep(1)

    # Check if connection is successful

    if wlan.status() != 3:

        print('Failed to connect to Wi-Fi')

        return False

    else:

        print('Connection successful!')

        network_info = wlan.ifconfig()

        print('IP address:', network_info[0])

        return True

 

Sebelum melakukan proses transmisi email, Raspberry Pi Pico harus memperoleh konektivitas jaringan. Oleh karena itu, eksekusikan fungsi init_wifi() dengan menyertakan parameter SSID dan kata sandi yang sesuai. Fungsi ini akan menginisialisasi antarmuka WLAN, menjalankan proses autentikasi, dan memastikan perangkat terasosiasi dengan access point sebelum melanjutkan ke tahap pengiriman email.

 

# Connect to your network

init_wifi(ssid, password)

 

Sekarang perangkat siap untuk melakukan proses penyusunan dan transmisi email.

 

Langkah pertama adalah menginisialisasi objek klien SMTP menggunakan parameter konfigurasi server SMTP milik penyedia layanan email Anda. Pada contoh ini digunakan konfigurasi SMTP Gmail. Jika Anda menggunakan penyedia email yang berbeda, sesuaikan nilai server host, nomor port, serta persyaratan enkripsi (TLS/SSL) sesuai spesifikasi layanan tersebut. Objek klien ini akan menangani negosiasi protokol dan sesi autentikasi sebelum email dikirimkan.

 

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

 

Selanjutnya, blok try–except digunakan untuk menangani proses pengiriman email sekaligus mendeteksi dan menampilkan pesan kesalahan apabila terjadi kegagalan selama eksekusi.

 

Pada tahap autentikasi, skrip memanggil metode login() pada instance klien SMTP. Metode ini melakukan proses otentikasi SMTP dengan menggunakan kredensial pengirim, yaitu alamat email dan application-specific password yang telah dihasilkan sebelumnya. Setelah autentikasi berhasil, sesi SMTP siap digunakan untuk transmisi email.

 

smtp.login(sender_email, sender_app_password)

 

Tetapkan penerima menggunakan metode to() dan berikan email penerima sebagai argumen:

 

smtp.to(recipient_email)

 

Selanjutnya, metode write() pada objek klien SMTP digunakan untuk membangkitkan dan menuliskan header serta payload email ke dalam aliran transmisi. Metode ini dapat dipanggil, antara lain, untuk menetapkan header "From", sehingga identitas pengirim terdefinisi dengan benar sesuai format standar protokol SMTP.


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

 

Anda dapat menggunakan baris berikut untuk mengatur subjek email.

 

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

 

Terakhir, Anda dapat menulis konten email Anda. Ini hanyalah email percobaan. Atur pesan menjadi "Halo dari Raspberry Pi Pico. Pengujian.". Metode write() akan mengirimkan email ke server SMTP.

 

smtp.write("Hello from the Raspberry Pi Pico. Testing.")

 

Jika Anda perlu mengirim string panjang sebagai isi email, bagi pesan email menjadi beberapa bagian yang lebih kecil dan kirim setiap bagian menggunakan metode write().

Terakhir, gunakan metode send() untuk membuat server SMTP mengirimkan email kepada penerima.

 

smtp.send()

 

Jika gagal mengirim email, akan muncul pesan kesalahan berikut:

 

except Exception as e:

    print("Failed to send email:", e)

 

Terakhir, tutup koneksi dengan server menggunakan metode quit().

finally:

 

    smtp.quit()

 

Demonstrasi

Setelah modul umail.py berhasil diunggah ke memori Raspberry Pi Pico, Anda dapat mengeksekusi contoh kode program untuk melakukan validasi fungsional terhadap proses pengiriman email melalui protokol SMTP. Kode program tersebut akan melakukan inisialisasi jaringan, membangun sesi SMTP, serta mengirimkan payload email sebagai verifikasi bahwa seluruh konfigurasi telah diterapkan dengan benar.



Pico harus terhubung ke internet dan mengirim email.



Setelah beberapa saat, Anda akan menerima email baru di akun email penerima.


Buka email untuk memeriksa isinya.


 

 

Baca juga: Cara Membuat Web Server Asinkron di Raspberry Pi Pico W Menggunakan MicroPython

 

 

 

 

 

 

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: "Panduan Lengkap Mengirim Email via SMTP pada Raspberry Pi Pico W (MicroPython)"