
Simple Mail Transfer Protocol (SMTP) adalah komputerisasi yang setara dengan service pos Anda. Ini adalah protokol yang bekerja pada lapisan Aplikasi dari Jaringan TCP/IP. Ini adalah protokol standar untuk mengirim dan menerima email melalui internet. Proses Transfer Surat terdiri dari Server Email dan Client yang copyg mengirim dan menerima email.
Misalnya, Anda memiliki akun GMAIL dan Anda ingin mengirim email ke teman Anda di akun YAHOO-nya. Anda menulis email dan tekan kirim, tetapi proses backend sedikit rumit, dan untuk memahami proses ini, Anda harus memahami SMTP terlebih dahulu. Client email SMTP Anda pertama kali mengirimHELO (atau EHLO) ke server GMAIL, Anda dapat mengatakan perintah atau header ini setara dengan Hostheader dalam protokol HTTP dan digunakan untuk mengidentifikasi server menggunakan nama domain. Setelah HELO atau EHLO, client mengotentikasi dirinya ke server dengan nama user dan password yang diberikan menggunakanAUTH memerintah. Kemudian menentukan alamat email pengirim dan penerima dan kemudian isi pesan dan mengirim email ke Server GMAIL. Server GMAIL pertama-tama akan mengkonfirmasi apakah alamat email penerima di YAHOO ada atau tidak, kemudian akan mengirim email ke Server YAHOO tempat penerima dapat mengambil emailnya.
SMTPLIB
SMTPLIB adalah pustaka python yang dapat digunakan sebagai client SMTP seperti GMAIL, YAHOO, Thunderbird atau client email lainnya dan dapat digunakan untuk mengirim email. Kami dapat melakukan semua tugas menggunakan client SMTPLIB yang dapat kami lakukan dengan mereka yang memiliki Interface Pengguna Grafis.
Itu datang secara default di Python, jika Anda tidak memilikinya maka Anda dapat menginstal menggunakan perintah berikut.
[email protected]:~$ pip install smtplib
ATAU di Python3
[email protected]:~$ pip install smtplib
Menulis Email pertama Anda dengan Python
Dalam tutorial ini, saya akan menggunakan akun GMAIL sebagai pengirim, juga saya akan menggunakan konsol Python, jadi akan lebih mudah bagi saya untuk menjelaskan setiap baris kode langkah demi langkah. Untuk memulai, kami perlu mengizinkan akses GMAIL ke aplikasi yang kurang aman.
Jadi login ke akun GMAIL Anda dan kemudian pergi ke pengaturan akun.
Sekarang pastikan bahwa akses untuk aplikasi yang kurang aman diaktifkan.
Sekarang buka konsol python Anda dan mulailah menulis email pertama Anda menggunakan Python
[email protected]:~$ python
Python 2.7.16 (default, Oct 7 2019, 17:36:04)
[GCC 8.3.0] on linux2
Ketik “bantuan”, “hak cipta”, “kredit” atau “lisensi” untuk informasi lebih lanjut.
//import the SMTP library
>>> import smtplib
//connect to the GMAIL Server with domain name and port number (This setting differs for
each email provider, please take a look at the table given below)
>>> mailobj = smtplib.SMTP('smtp.gmail.com',587)
//say hello to the server
>>> mailobj.ehlo()
(250, 'smtp.gmail.com at your service, [103.255.4.246]nSIZE35882577n8BITMIMEnSTARTTLS
nENHANCEDSTATUSCODESnPIPELININGnCHUNKINGnSMTPUTF8')
//Port 587 means that we’re using encrypted TLS connection, so start encrypted TLS
communication using starttls(), so that our credentials and messages don’t get sniffed
>>> mailobj.starttls()
(220, '2.0.0 Ready to start TLS')
//login to your GMAIL account using email and password
>>> mailobj.login('[email protected]','s3cr3t_p4ssw0rd')
(235, '2.7.0 Accepted')
//specify sender and recipient’s email address and email content
>>> mailobj.sendmail('[email protected]','[email protected]','Subject:
Hello world! n Hello world! this is my first hello world email in Python')
{}
// close connection to the GMAIL server
>>> mailobj.quit()
(221, '2.0.0 closing connection b6sm4519863lfi.72 - gsmtp')
Dalam contoh program di atas, ganti konten yang diberikan dengan konten Anda sendiri. Jika Anda bukan user GMAIL, Anda dapat menggunakan server email penyedia Anda. Beriku
t adalah daftar Nama Domain dan port dari beberapa penyedia email umum.
Name | Server Domain Name | Port |
Gmail | smtp.gmail.com | 587 |
Outlook / Hotmail | smtp-mail.outlook.com | 587 |
email yahoo | smtp.mail.yahoo.com | 587 |
Verizon | smtp.verizon.net | 465 |
Comcast | smtp.comcast.net | 587 |
Beberapa Kata tentang IMAP
Jadi kami baru saja mempelajari bahwa SMTP digunakan untuk mengirim email, tetapi untuk apa IMAP (Internet Access Messaging Protocol)? SMTP tidak dapat digunakan untuk mencari dan mendapatkan email dari server, protokol IMAP atau POP3 digunakan untuk tujuan itu.
IMAPCLIENT, IMAPLIB, dan PYZMAIL
Ada dua perpustakaan utama dalam Python yang dapat digunakan sebagai client IMAP untuk menemukan, mengambil, dan menghapus email dari server email. Python memiliki defaultimaplib perpustakaan tetapi perpustakaan eksternal lainnya imapclientlebih efektif dan mudah digunakan. Dalam tutorial ini kita akan menggunakanimapclient untuk mengambil email dari server email.
Masalah dengan imapclientadalah bahwa ia mengambil email dari server surat dalam format mentah. Jadi, kita akan membutuhkanpyzmaillibrary sebagai pengurai untuk keluaran yang ramah user. Untuk menginstal kedua perpustakaan, ketik
[email protected]:~$ sudo pip install imapclient
[email protected]:~$ sudo pip install pyzmail
Mendapatkan Email Anda dari Server Mail
Sekarang, kita akan mempelajari cara mencari dan mengdownload email dari server email menggunakan imapclient. Kami akan menggunakan imapclient untuk mencari dan mengdownload email dari server, kemudian kami akan menggunakan pyzmail untuk mengurai konten mentah ini. mari kita
// import imapclient library
>>> import imapclient
// Connect to GMAIL’s IMAP server
>>> obj = imapclient.IMAPClient('imap.gmail.com',ssl=True)
// Login to your email account using your credentials
>>> obj.login('[email protected]','s3cr4tp4ss')
'[email protected] authenticated (Success)'
// Select message folder to read i.e INBOX, DRAFTS, SENT mails
>>> obj.select_folder('INBOX', readonly=True)
{'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGS': ('Answered', 'Flagged', 'Draft', 'Deleted', 'Seen',
'$NotPhishing', '$Phishing'), 'UIDVALIDITY': 1, 'READ-ONLY': [''], 'RECENT': 0}
// Search your messages in your INBOX, or apply a filter, below filter will show
you the mails received after 25-Oct-2019
>>> mail_ids = obj.search(['SINCE', '25-Oct-2019'])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// list “mail_ids” contains a list of email ids received since 25-Oct-2019,
you can download an email using imapclient fetch function.
>>> raw_mail = obj.fetch([919],['BODY[]','FLAGS'])
// Now, the content in raw_mail variable is in raw format, it can’t be displayed on the
screen directly, So we’d need a parser to parse this content for a user friendly output
>>> import pyzmail
>>> message = pyzmail.PyzMessage.factory(raw_mail[919]['BODY[]'])
// Now email is parsed and stored in message variable, to get the subject of
the email, use get_subject function
>>> message.get_subject()
u'Dress up your skills this Halloween with 25% off'
// Similarly, you can see sender details
>>> message.get_addresses('from')
[(u'Usama Azad', '[email protected]')]
>>> message.get_addresses('to')
[(u'[email protected]', '[email protected]')]
// To get the body of the email, type
>>> message.text_part.get_payload().decode(message.text_part.charset)
u”Hi! Enjoy flat 25% on our premium courses”
Jika Anda memiliki akun di beberapa penyedia Layanan Email selain GMAIL, Anda dapat login ke server IMAP mereka. Berikut adalah daftar nama domain IMAP dari beberapa penyedia email terkenal.
Provider | Domain Name for IMAP Server |
YAHOO | imap.mail.yahoo.com |
Hotmail/Outlook | imap-mail.outlook.com |
Verizon | masuk.verizon.net |
Comcast | imap.comcast.net |
AT&T | imap.mail.att.net |
Menghapus Email Anda dari Server IMAP
Mirip dengan mencari dan mengambil email dari server, Anda juga dapat menghapus email dari server email Anda menggunakan uid mereka. Ikuti saja langkah-langkah yang diberikan
// To delete an email, you have to turn read only to ‘False’ to get write access to your
emails
>>> obj.select_folder('INBOX', readonly=False)
>>> mail_ids = obj.search(['SINCE', '25-Oct-2019'])
>>> mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Provide an email uid or a list of email uids, after running below command,
your email will get disappeared from INBOX.
>>> obj.delete_messages(919)
{919: ('Seen', 'Deleted')}
// This command will permanently delete your emails from the Mail server
>>> obj.expunge()
('Success', [])
https://techtopz.com/build-a-birthday-reminder-application-in-python-on-mac/
Membuat pengingat ulang tahun Anda sendiri
Anda memiliki ulang tahun teman-teman Anda dalam beberapa bulan mendatang dan Anda ingin mengucapkan selamat ulang tahun kepada mereka. Tetapi Anda memiliki banyak pekerjaan di kantor Anda dan ada kemungkinan Anda akan lupa untuk mendoakannya. Jadi tugas ini dapat dilakukan secara otomatis menggunakan python. Berikut adalah kode untuk melakukan tugas ini.
// importing Modules
import re
// os module is used to perform operating system tasks i.e accessing direcotories
import os
import datetime
import smtplib
// defining a function which will be sending emails
def send_mail(reciever_mail_address, name):
sender_mail_address = "[email protected]"
passwd = "senderPasswd"
//connecting to gmail server with domain name and port number
obj = smtplib.SMTP('smtp.gmail.com', 587)
obj.ehlo()
obj.starttls()
// logging into your gmail account
obj.login(sender_mail_address, passwd)
// sending mail to ‘reciever_mail_address’.
obj.sendmail(sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mailnn HappyBirthday "+name)
// ending connection
obj.quit()
// Main Body
// going to the directory in which file containing data is present
os.chdir("path_to_birthday_data_file")
while 1:
// getting date and time of present moment
today = datetime.datetime.today()
today = str(today)
// getting current year, month, day, hour, minute and second
current_year = today[0:4]
current_month = today[5:7]
current_day = today[8:10]
current_hour = today[11:13]
current_minute = today[14:16]
current_sec = today[17:19]
// opening birthday file in ‘birthday_file’ object in read cara
birthday_file = open('birthday_file','r')
// saving all the lines of ‘birthday_file’ in lines list
lines = birthday_file.readlines()
// closing ‘birthday_file’ object
birthday_file.close()
// reading each line using for loop
for line in lines:
// making a regular expression to find a date in ‘birthday_file’
dateEx = re.compile(r"d{4}-d{2}-d{2}")
findDate=dateEx.search(line)
date = findDate.group()
// getting birthday_month and birthday_day from file
birthday_month = date[5:7]
birthday_day = date[8:10]
// making a regular expression to find mail address from birthday_file
mailEx = re.compile(r"w*@w*.com")
findMail = mailEx.search(line)
reciever_mail = findMail.group()
//making a regular expression to find the name of the person
nameEx = re.compile(r"w*")
findName = nameEx.search(line)
name = findName.group()
// checking if someone’s birthday is coming or not
if current_month == birthday_month and =current_day == birthday_day:
// sending mail at exact 08:00
if current_hour == '08' and current_minute == '00' and current_sec == '00':
// calling ‘send_mail’ function
send_mail(reciever_mail, name)
Sekarang kita membuat ‘birthday_file’, di mana kita menyimpan nama, alamat email dan tanggal lahir mereka. Ini adalah file teks sederhana dan terlihat seperti ini.
Penjelasan
Kami akan membaca file ini menggunakan skrip python dan memeriksa ulang tahun siapa yang akan datang dan mendoakannya. Pertama-tama kita akan mengimpor beberapa Modul. Modul DATETIME memiliki fungsi yang memberi kita tanggal dan waktu saat ini dan banyak lagi. Tetapi kami hanya akan menggunakan ini untuk menemukan tanggal dan waktu saat ini. Modul SMTPLIB digunakan untuk mengirim email dan telah dijelaskan di atas. Modul RE memiliki fungsi yang digunakan untuk mencari ekspresi reguler dari sebuah string.
Dalam skrip ini, kami mendefinisikan fungsi ‘send_mail’, yang mengirim email ke ‘reciever_mail_address’, yang namanya ‘name’. Kedua argumen diteruskan ke fungsi dari isi utama pesan. Di bagian utama skrip kita akan melihat bagaimana kita menemukan ‘reciever_mail_address’ dan ‘name’.
Mengirim email menggunakan smtplib sudah dijelaskan diatas, jadi anda bisa membacanya dan tidak akan dibahas disini.
Di badan utama, kita pergi ke direktori tempat kita menyimpan ‘birthday_file’ menggunakan ‘os.chdir()’. Kemudian kita memiliki ‘lingkaran while’ yang selalu benar sehingga akan memeriksa ulang tahun secara terus menerus. Sekarang kita mendapatkan tanggal dan waktu saat ini dan menyimpannya dalam variabel ‘hari ini’. Ini terlihat seperti ini.
2019-11-01 16:19:07.144925
Kami akan mengekstrak tahun, bulan, hari, jam, menit dan detik menggunakan indeks jumlah ini. Setelah ini, kita akan membuka file_ulang tahun di objek ‘file_ulang tahun’ dalam cara baca, jadi kita hanya bisa membacanya. Sekarang kita akan menyimpan semua baris file ini dalam daftar baris. ‘birthday_file.readlines()’ akan menyimpan setiap baris dalam daftar ‘baris’. Setelah ini kita akan menutup birthday_file menggunakan fungsi ‘birthday_file.close()’.
Sekarang kita akan membaca setiap baris satu per satu menggunakan for loop. Di setiap baris hanya data satu orang yang tersedia di ‘birthday_file’, jadi kami hanya membaca data satu orang pada satu waktu dalam loop ini.
Setelah ini, kami akan mengekstrak Tanggal lahir, alamat email, dan nama orang menggunakan modul RE. Seperti yang telah kami tulis tanggal dalam format berikut:
YYYY-MM-DD
Jadi kita akan membuat ekspresi reguler ‘dateEx’ yang menemukan format ini di baris.
re.compile(r”d{4}-d{2}-d{2}”)
Perintah di atas menemukan string yang memiliki ‘4 digit’ diikuti oleh ‘-‘ lalu ‘2 digit’ diikuti oleh ‘-‘ dan ‘2 digit’. Ini akan memberi kita tanggal lahir orang tersebut sehingga kita akan mengekstrak hari_kelahiran dan bulan_kelahiran dari ekspresi ini.
Demikian pula kita akan menemukan alamat email menggunakan ekspresi reguler. Setelah ini, kita akan membandingkan tanggal_bulan dan bulan_saat ini dan hari_ulang tahun dan hari_saat ini. Jika kondisi ini terpenuhi, kami akan mengirimkan email ulang tahun menggunakan fungsi ‘send_mail’ tepat ’08:00′.
Running Script Automatically via Cronjob
Sekarang kita akan memastikan bahwa skrip python ini berjalan setiap saat. Untuk melakukan ini, kami akan menambahkan tugas ini ke crontab. Crontab, di linux, digunakan untuk melakukan tugas secara otomatis. Yang harus kita lakukan hanyalah menambahkan tugas ke crontab. Untuk melakukannya, ikuti langkah-langkah yang diberikan.
- Buka crontab untuk menambahkan tugas di terminal Anda menggunakan perintah berikut
[email protected]:~$ crontab -e
- Di akhir file ini masukkan perintah berikut tanpa #
@reboot python path_to_the_script
Perintah di atas akan memungkinkan sistem Anda untuk menjalankan skrip python setiap kali Anda me-restart sistem Anda. Dengan cara ini, sistem Anda akan menjalankan skrip python setiap kali sistem Anda aktif.