Cara menggunakan python send email smtp

Kadangkala ketika ingin membuat fitur kirim e-mail di dalam aplikasi yang kita kembangkan, kita harus memasang mailserver yang cukup menyita ukuran harddisk padahal hanya untuk kirim e-mail saja.

Python memiliki sebuah modul bernama SMTP Server yang dapat digunakan untuk mengirim email. Dalam hal ini kita menggunakan contoh gmail. Untuk email dari provider lain, tinggal kita sesuaikan saja alamat server emailnya.

Berikut langkah dasar untuk mengirim email menggunakan Python yang dikutip dari GitLab.

There are four basic steps to sending emails using Python:

1. Set up the SMTP server and log in to our account.

2. Create appropriate headers for From, To, and Subject fields.

3. Add in the message body.

4. Send the message using the SMTP server object.

Langsung aja kita mulai langkah-langkahnya

Membuat Koneksi

Pertama, buatlah sebuah koneksi pada server python menggunakan yang berfungsi untuk menghubungkan, mengautentikasi, validasi, dan mengirim email. Pada smtplib, nilai default port adalah 25, namun pada tutorial kali ini menggunakan port 465. Kalian bisa melihat kode port jaringan penghubung internet lainnya disini.

import smtplibtry:
server_ssl = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server_ssl.ehlo() # optional
# ...send emails
except:
print 'Something went wrong...'
Membuat Email

Dalam sebuah teks email membutuhkan suatu format yaitu “From”, “To”, “Subject”, dan body fields.

From: [email protected]
To: [email protected], [email protected]
Subject: Kirim Pesan Lewat Python

Selanjutnya menghubungkan email dengan smtplib menggunakan format string yang dapat kalian pelajari lebih lanjut . Kalian bisa kirim email ke beberapa teman sekaligus loh..

sent_from = '[email protected]'
to = ['[email protected]', '[email protected]']
subject = 'Kirim Pesan Lewat Python'
body = 'Yey!! Email berhasil terkirim ^^'
email_text = """\
From: %s
To: %s
Subject: %s
%s
""" % (sent_from, ", ".join(to), subject, body)
Autentikasi dengan Akun Gmail

Untuk mengirim email melalui Gmail dengan SMTP, ada beberapa langkah autentikasi yang harus dilakukan pada akun kalian agar Google memberi terhubung melalui SMTP, yang dianggap sebagai metode “kurang aman” karena tidak berasal dari app Google.

Pertama, izinkan aplikasi yang kurang aman untuk mengakses akun kalian. Cek halaman berikut untuk melihat detail dari pengaturan ini.

Less secure apps & your Google Account

Untuk menonaktifkan pengaturan tersebut, dapat menggunakan link di bawah

Less secure app access

Berikut adalah koding untuk login setelah menyelesaikan proses autentikasi untuk memberi akses login pada email dan password kalian

import smtplibgmail_user = '[email protected]'
gmail_password = 'P@ssword!'
try:
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(gmail_user, gmail_password)
except:
print 'Something went wrong...'
Mengirim Email

Sekarang kalian sudah memiliki koneksi SMTP dan mendapatkan akses dengan Google. Berikut merupakan koding lengkap untuk mengirim email menggunakan Python.

import smtplibgmail_user = '[email protected]'
gmail_password = 'P@ssword!'
sent_from = gmail_user
to = ['[email protected]','[email protected]']
subject = 'Kirim Pesan Lewat Python'
body = 'Yey!! Email berhasil terkirim ^^'
email_text = """\
From: %s
To: %s
Subject: %s
%s
""" % (sent_from, ", ".join(to), subject, body)
try:
server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(gmail_user, gmail_password)
server.sendmail(sent_from, to, email_text)
server.close()
print ('Email sent!')
except:
print ('Something went wrong...')

Salin semua koding pada Sublime Text (kalian boleh menggunakan app Notepad lainnya) dan simpan di dalam “C:\buatemail” dalam bentuk file Python (*.py) dengan nama pakegmail.py

Bagaimana cara mengirim email otomatis dengan Python? Yuk simak rincian kode Python mengirim email selengkapnya di sini!

Cara agar Python mengirim email otomatis adalah dengan mengaktifkan protol SMTP (Simple Mail Transfer Protocol). Protokol ini berfungsi mulai dari mengirim, mengatur pesan, hingga membentuk rute email di antara server-server pesan elektronik.

Python sendiri memiliki modul smtplib yang mendefinisikan sesi klien pada objek SMTP yang juga berperan untuk mengirim email ke sistem internet mana saja, plus dengan daemon pendengar SMTP atau ESMTP.

Berikut adalah contoh sintaksis sederhana untuk membuat objek SMTP, yang sekaligus mengaktivasi sistem Python mengirim email otomatis:

import smtplib

smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )

Keterangan:

  • Host: Ini adalah host yang menjalankan server SMTP Anda. Anda dapat menentukan alamat IP host atau nama domain sendiri, contohnya seperti codekey.id. Poin ini bersifat opsional.
  • Port: jika Anda mencantumkan nama host, maka Anda wajib menentukan port sebagai wadah bagi server SMTP untuk mendengarkan perintah. Jenis port yang biasa dipakai adalah port 25.
  • Local_hostname: jika SMTP server Anda bekerja pada perangkat lokal, maka Anda bisa memilih opsi localhost pada fitur ini.

Objek SMTP memiliki metode instan yang disebut sendmail untuk mengirim pesan email otomatis. Lebih lanjut, metode ini tersusun atas tiga parameter penting:

  • Sender: string berisi alamat pengirim email.
  • Receivers: kumpulan string, yang mana masing-masing memuat alamat tujuan (penerima pesan).
  • Message: pesan (isi email) dalam format string yang ditentukan dalam berbagai RFC.

Artikel Terkait  Tutorial Python 9 : Cara Membuat Looping Python

Table of Contents

Contoh Skrip Kode Python Mengirim Email

Berikut adalah contoh skrip kode Python sederhana untuk mengirim email otomatis:

#!/usr/bin/python

import smtplib

sender = '[email protected]'
receivers = ['[email protected]']

message = """From: From andi <[email protected]>
To: To budi <[email protected]>
Subject: test SMTP e-mail python

Ini contoh email.
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Email berhasil terkirim"
except SMTPException:
   print "Error: gagal untuk mengirim email"

Kode di atas sudah memuat komponen dasar email dalam urutan yang benar. Agar dapat terkirim, maka email Anda membutuhkan header From, To, dan Subject yang dipisahkan dari isi pesan memakai satu baris kosong.

Kemudian kirimkan email memakai smtpObj agar Anda terhubung ke server SMTP di komputer local, lalu pakai metode sendmail bersama-sama dengan 3 komponen parameter yang telah dijelaskan tadi: sender, receiver, messages (catatan: From dan To biasanya sudah termasuk dalam e-mail itu sendiri, meski begitu, elemen tersebut tidak selalu dipakai untuk merutekan email).

Jika Anda tidak menjalankan server SMTP pada komputer lokal, sebagai gantinya gunakanlah klien smtplib untuk berkomunikasi dengan server SMTP jarak jauh. Kecuali Anda menggunakan layanan webmail (seperti Hotmail atau Yahoo! Mail), maka pihak penyedia pasti sudah memberikan informasi rincian server email, contohnya seperti berikut

smtplib.SMTP(‘andi.gmail.com’, 45)

Kode Python Mengirim Email dengan HTML

Ketika kita menjalankan kode Python mengirim email, maka semua isi konten di dalamnya akan diolah sebagai teks sederhana. Bahkan meskipun Anda memasukkan tags HTML, kode-kode tersebut akan tetap ditampilkan dalam bentuk teks biasa – bukan dalam format sintaksis HTML.

Akan tetapi Python menyediakan opsi sendiri untuk mengirimkan kode HTML sebagaimana aslinya (tanpa mengubah format). Cara tersebut adalah dengan menentukan versi Mime, tipe konten, beserta pengaturan karakter sebelum mengirim email.

Contoh Kode Python Mengirim Email HTML

Berikut adalah contoh koding email berisi tag HTML di Python:

#!/usr/bin/python

import smtplib

message = """From: From andi <[email protected]>
To: To budi <[email protected]>
MIME-Version: 1.0
Content-type: text/html
Subject: test SMTP e-mail python format HTML

Ini contoh email dengan format HTML

<h1>Ini adalah berita utama.</h1>
"""

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, receivers, message)         
   print "Email berhasil terkirim "
except SMTPException:
   print "Error: gagal untuk mengirim email "

Kode Python Mengirim Email dengan Lampiran

Terakhir ada rincian koding Python untuk mengirimkan email dengan lampiran. Di sini Anda perlu mengubah header Content-type menjadi multipart/mixed. Selanjutnya, tentukan masing-masing bagian teks dan lampiran email dengan boundaries.

Boundary diawali dengan dua tanda hubung ( – ) diikuti dengan serial angka unik yang tidak dapat muncul di bagian pesan email. Bagian akhir boundary juga ditandai dengan simbol yang sama untuk memperjelas bagian akhir dari pesan email Anda.

Lalu, file yang terlampir harus dikodekan dengan fungsi pack(“m”) agar mempunyai pengkodean base64 sebelum masuk ke proses transmisi.

Contoh Kode Python Mengirim Email dengan Lampiran

Berikut adalah contoh mengirim lampiran bernama /tmp/test.txt lewat email di Python:

#!/usr/bin/python

import smtplib
import base64

filename = "/tmp/document.txt"

fo = open(filename, "rb")
filecontent = fo.read()
encodedcontent = base64.b64encode(filecontent) 

sender = '[email protected]'
reciever = '[email protected]'

marker = "AUNIQUEMARKER"

body ="""
Ini contoh email dengan berkas.
"""

part1 = """From: From andi <[email protected]>
To: To budi <[email protected]>
Subject: test SMTP e-mail python dengan berkas
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary=%s
--%s
""" % (marker, marker)

part2 = """Content-Type: text/plain
Content-Transfer-Encoding:8bit

%s
--%s
""" % (body,marker)

part3 = """Content-Type: multipart/mixed; name=\"%s\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename=%s

%s
--%s--
""" %(filename, filename, encodedcontent, marker)
message = part1 + part2 + part3

try:
   smtpObj = smtplib.SMTP('localhost')
   smtpObj.sendmail(sender, reciever, message)
   print "Email berhasil terkirim"
except Exception:
   print "Error: gagal untuk mengirim email"

Demikianlah panduan kode-kode Python untuk mengirim email secara otomatis. Semoga ulasan di atas dapat menambah wawasan Anda, ya.