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