Python - 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 ini 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 localhost saja sebagai opsi ini.

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

Untuk mengirim email, Anda menggunakan smtpObj untuk menyambung 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 berada di dalam e -mail itu sendiri, ini tidak selalu digunakan untuk merutekan email).

Jika Anda tidak menjalankan server SMTP di komputer lokal Anda, Anda dapat menggunakan klien smtplib untuk berkomunikasi dengan server SMTP jauh. Kecuali jika Anda menggunakan layanan email web (seperti Hotmail atau Yahoo! Mail), penyedia email Anda pasti telah memberi Anda detail server email keluar yang dapat Anda berikan, 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. Meskipun 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 ini adalah contoh untuk mengirim konten HTML sebagai email. Coba 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 E-mail

Untuk mengirim e-mail dengan konten campuran perlu diatur Content-type tajuk ke multipart/mixed. Kemudian, bagian teks dan 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 yang dilampirkan harus dienkode dengan pack("m") berfungsi untuk memiliki pengkodean base64 sebelum transmisi.

Contoh

Berikut ini adalah contoh pengiriman file /tmp/test.txtsebagai lampiran. Coba 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"