Python - Mengirim Email menggunakan SMTP
Halaman SebelumnyaHalaman Berikutnya
Simple Mail Transfer Protocol (SMTP) adalah protokol, yang menangani pengiriman email dan perutean email antar server email.
Python menyediakan smtplib modul, yang mendefinisikan objek sesi klien SMTP yang dapat digunakan untuk mengirim email ke mesin Internet mana pun dengan daemon pendengar 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 dari parameter
-
tuan rumah Ini adalah host yang menjalankan server SMTP Anda. Anda dapat menentukan alamat IP dari host atau nama domain seperti tutorialspoint.com. Ini adalah argumen opsional.
-
pelabuhan Jika Anda menyediakan host argumen, maka Anda perlu menentukan port, di mana server SMTP mendengarkan. Biasanya port ini adalah 25.
-
namahost_lokal Jika server SMTP Anda berjalan pada mesin lokal Anda, maka Anda dapat menentukan localhost saja pada opsi ini.
Objek SMTP memiliki metode instance yang disebut sendmail , yang biasanya digunakan untuk melakukan pekerjaan pengiriman pesan. Dibutuhkan tiga parameter
-
Pengirim String dengan alamat pengirim.
-
Penerima Daftar string, satu untuk setiap penerima.
-
Pesan Pesan sebagai string yang diformat seperti yang ditentukan dalam berbagai RFC.
Contoh
Berikut adalah cara sederhana untuk mengirim satu email menggunakan skrip Python. Cobalah sekali
#!/usr/bin/python
import smtplib
sender = '[email protected]'
receivers = ['[email protected]']
message = """From: From Person <[email protected]>
To: To Person <[email protected]>
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 pesan, menggunakan kutipan rangkap tiga, berhati-hati untuk memformat header dengan benar. Sebuah email memerlukan Dari , Kepada , dan Subjek header, dipisahkan dari badan email dengan baris kosong.
Untuk mengirim email, Anda menggunakan smtpObj untuk terhubung ke server SMTP pada mesin lokal dan kemudian gunakan sendmail metode bersama dengan pesan, alamat dari, dan alamat tujuan sebagai parameter (meskipun dari dan ke alamat berada di dalam email itu sendiri, ini tidak selalu digunakan untuk merutekan email).
Jika Anda tidak menjalankan server SMTP di mesin lokal Anda, Anda dapat menggunakan smtplib klien untuk berkomunikasi dengan server SMTP jarak jauh. Kecuali jika Anda menggunakan layanan webmail (seperti Hotmail atau Yahoo! Mail), penyedia email Anda harus 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 diperlakukan sebagai teks sederhana. Bahkan jika Anda menyertakan tag HTML dalam pesan teks, itu akan ditampilkan sebagai teks sederhana dan tag HTML tidak akan diformat sesuai dengan sintaks HTML. Tetapi Python menyediakan opsi untuk mengirim pesan HTML sebagai pesan HTML yang 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 <[email protected]>
To: To Person <[email protected]>
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 perlu mengatur Content-type tajuk ke multibagian/campuran . Kemudian, bagian teks dan lampiran dapat ditentukan dalam batas .
Batas dimulai dengan dua tanda hubung diikuti dengan nomor unik, yang tidak dapat muncul di bagian pesan email. Batas akhir yang menunjukkan bagian akhir email juga harus diakhiri dengan dua tanda hubung.
File terlampir harus dikodekan dengan pack("m") berfungsi untuk memiliki pengkodean base64 sebelum transmisi.
Contoh
Berikut adalah contoh yang mengirimkan file /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 = '[email protected]'
reciever = '[email protected]'
marker = "AUNIQUEMARKER"
body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <[email protected]>
To: To Person <[email protected]>
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"