Python 3 - Mengirim Email menggunakan SMTP

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 apa 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 detail parameternya -

  • host- 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.

  • port- Jika Anda memberikan argumen host , maka Anda perlu menentukan port, tempat server SMTP mendengarkan. Biasanya port ini akan menjadi 25.

  • local_hostname- Jika server SMTP Anda berjalan di komputer lokal Anda, maka Anda dapat menentukan opsi localhost saja .

Objek SMTP memiliki metode instance yang disebut sendmail, yang biasanya digunakan untuk mengirimkan pesan. Dibutuhkan tiga parameter -

  • The pengirim - Sebuah string dengan alamat pengirim.

  • The penerima - Sebuah daftar string, satu untuk setiap penerima.

  • The Pesan - Pesan sebagai string diformat sebagai ditentukan dalam berbagai RFC.

Contoh

Berikut adalah cara sederhana untuk mengirim satu email menggunakan skrip Python. Coba sekali -

#!/usr/bin/python3

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 tanda kutip tiga, berhati-hati dalam memformat header dengan benar. Sebuah email membutuhkanFrom, To, dan a Subject header, dipisahkan dari badan email dengan baris kosong.

Untuk mengirim email, Anda menggunakan smtpObj untuk menyambung ke server SMTP di komputer lokal. Kemudian gunakan 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 merutekan email).

Jika Anda tidak menjalankan server SMTP di komputer lokal, Anda dapat menggunakan klien smtplib untuk berkomunikasi dengan server SMTP jauh. Kecuali Anda menggunakan layanan webmail (seperti gmail atau Yahoo! Mail), penyedia email Anda pasti telah memberikan Anda rincian server email keluar yang dapat Anda berikan, sebagai berikut -

mail = smtplib.SMTP('smtp.gmail.com', 587)

Mengirim email HTML menggunakan Python

Saat Anda mengirim pesan teks menggunakan Python, maka semua konten diperlakukan sebagai teks sederhana. Meskipun Anda menyertakan tag HTML dalam pesan teks, itu akan ditampilkan sebagai teks sederhana dan tag HTML tidak akan diformat sesuai dengan sintaks HTML. Namun, Python menyediakan opsi untuk mengirim pesan HTML sebagai pesan HTML yang sebenarnya.

Saat mengirim pesan email, Anda dapat menentukan versi Mime, jenis konten dan set karakter untuk mengirim email HTML.

Contoh

Berikut ini adalah contoh untuk mengirim konten HTML sebagai email. Coba sekali -

#!/usr/bin/python3

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 E-mail

Untuk mengirim email dengan konten campuran membutuhkan pengaturan Content-type tajuk ke multipart/mixed. Kemudian, teks dan bagian lampiran dapat ditentukan di dalamnyaboundaries.

Batas dimulai dengan dua tanda hubung diikuti dengan nomor unik, yang tidak dapat muncul di bagian pesan email. Batas akhir yang menunjukkan bagian terakhir email juga harus diakhiri dengan dua tanda hubung.

File terlampir harus dikodekan dengan pack("m") berfungsi untuk memiliki pengkodean basis 64 sebelum transmisi.

Contoh

Berikut ini adalah contoh yang mengirimkan file /tmp/test.txtsebagai lampiran. Coba sekali -

#!/usr/bin/python3

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