Mengirim Email dengan Python SMTP: Panduan Cepat dan Mudah
Halaman Sebelumnya Halaman Berikutnya
Protokol Transfer Email Sederhana (SMTP) adalah protokol yang menangani pengiriman email dan pengiriman email antara server email.
Python menyediakan modul smtplib, yang mendefinisikan objek sesi klien SMTP yang dapat digunakan untuk mengirim email ke mesin Internet apa pun dengan daemon listener SMTP atau ESMTP.
Berikut adalah sintaks sederhana untuk membuat satu objek SMTP, yang nantinya dapat digunakan untuk mengirim email −
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Berikut adalah detail parameter −
host − Ini adalah host yang menjalankan server SMTP Anda. Anda dapat menentukan alamat IP host atau nama domain seperti tutorialspoint.com. Ini adalah argumen opsional.
port − Jika Anda menyediakan argumen host, maka Anda perlu menentukan port tempat server SMTP sedang mendengarkan. Biasanya port ini adalah 25.
local_hostname − Jika server SMTP Anda berjalan di mesin lokal Anda, maka Anda dapat menentukan hanya localhost sebagai opsi ini.
Objek SMTP memiliki metode instance yang disebut sendmail, yang biasanya digunakan untuk melakukan tugas pengiriman pesan. Ia menerima tiga parameter −
Pengirim sender − Sebuah string dengan alamat pengirim.
Penerima receivers − Daftar string, satu untuk setiap penerima.
Pesan message − Sebuah pesan sebagai string yang diformat sesuai yang ditentukan dalam RFC yang berbeda.
Contoh
Berikut adalah cara sederhana untuk mengirim satu email menggunakan skrip Python. Cobalah sekali −
#!/usr/bin/python import smtplib sender = 'from@fromdomain.com' receivers = ['to@todomain.com'] message = """From: From Person <from@fromdomain.com> To: To Person <to@todomain.com> Subject: SMTP e-mail test This is a test e-mail message. """ try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print "Successfully sent email" except SMTPException: print "Error: unable to send email" Di sini, Anda telah menempatkan email dasar dalam message, menggunakan tanda kutip tiga, dengan memperhatikan pemformatan header dengan benar. Sebuah email memerlukan header From, To, dan Subject, yang dipisahkan dari isi email dengan baris kosong.
Untuk mengirim email Anda menggunakan smtpObj untuk terhubung ke server SMTP di mesin lokal dan kemudian menggunakan metode sendmail bersama dengan pesan, alamat dari, dan alamat tujuan sebagai parameter (meskipun alamat dari dan ke ada di dalam email itu sendiri, ini tidak selalu digunakan untuk mengirim email).
Jika Anda tidak menjalankan server SMTP di mesin lokal Anda, Anda dapat menggunakan klien smtplib untuk berkomunikasi dengan server SMTP jarak jauh. Kecuali jika Anda menggunakan layanan webmail (seperti Hotmail atau Yahoo! Mail), penyedia email Anda harus telah memberikan detail server email keluar yang dapat Anda berikan kepada mereka, sebagai berikut −
smtplib.SMTP('mail.your-domain.com', 25) Mengirim Email HTML menggunakan Python
Saat Anda mengirim pesan teks menggunakan Python, maka semua konten dianggap sebagai teks sederhana. Bahkan jika Anda menyertakan tag HTML dalam pesan teks, itu ditampilkan sebagai teks sederhana dan tag HTML tidak akan diformat sesuai sintaks HTML. Namun Python menyediakan opsi untuk mengirim pesan HTML sebagai pesan HTML sebenarnya.
Saat mengirim pesan email, Anda dapat menentukan versi Mime, tipe konten, dan set karakter untuk mengirim email HTML.
Contoh
Berikut adalah contoh untuk mengirim konten HTML sebagai email. Cobalah sekali −
#!/usr/bin/python import smtplib message = """From: From Person <from@fromdomain.com> To: To Person <to@todomain.com> MIME-Version: 1.0 Content-type: text/html Subject: SMTP HTML e-mail test This is an e-mail message to be sent in HTML format <b>This is HTML message.</b> <h1>This is headline.</h1> """ try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print "Successfully sent email" except SMTPException: print "Error: unable to send email" Mengirim Lampiran sebagai Email
Untuk mengirim email dengan konten campuran memerlukan untuk mengatur header Content-type ke multipart/mixed. Kemudian, bagian teks dan lampiran dapat ditentukan dalam boundaries.
Sebuah boundary dimulai dengan dua tanda hubirng diikuti oleh angka unik, yang tidak dapat muncul dalam bagian pesan email. Sebuah boundary akhir yang menunjukkan bagian akhir email juga harus diakhiri dengan dua tanda hubirng.
Berkas yang dilampirkan harus dienkode dengan fungsi pack("m") untuk memiliki enkode base64 sebelum transmisi.
Contoh
Berikut adalah contoh, yang mengirim berkas /tmp/test.txt sebagai lampiran. Cobalah sekali −
#!/usr/bin/python import smtplib import base64 filename = "/tmp/test.txt" # Read a file and encode it into base64 format fo = open(filename, "rb") filecontent = fo.read() encodedcontent = base64.b64encode(filecontent) # base64 sender = 'webmaster@tutorialpoint.com' reciever = 'amrood.admin@gmail.com' marker = "AUNIQUEMARKER" body =""" This is a test email to send an attachement. """ # Define the main headers. part1 = """From: From Person <me@fromdomain.net> To: To Person <amrood.admin@gmail.com> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) # Define the message action part2 = """Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body,marker) # Define the attachment section 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 "Successfully sent email" except Exception: print "Error: unable to send email"