Python

Mengirim email dengan Python

Mengirim email dengan Python
Mengirim, memeriksa, dan membalas email adalah tugas yang memakan waktu, terutama ketika Anda melakukannya untuk banyak orang atau pelanggan di mana Anda hanya perlu mengubah nama penerima, alamat, usia, dan hal-hal kecil lainnya. Ini akan menjadi tugas yang sangat sulit bagi Anda untuk menulis sebuah program yang dapat menangani semua jenis email pribadi/bisnis Anda, tetapi Anda tetap dapat mengotomatiskan banyak hal dalam hal ini yang pada akhirnya akan menghemat banyak waktu Anda.

Misalnya, Anda ingin mengirim pengingat kepada pelanggan Anda untuk tagihan mereka yang tersisa dan Anda memiliki semua data terkait pelanggan seperti nomor telepon, alamat, usia, dll. di lembar excel atau database, alih-alih melakukannya secara manual, Anda dapat menulis program sederhana dengan Python untuk melakukannya secara otomatis untuk Anda. Dalam tutorial ini, kita akan mempelajari cara kerja protokol email dan bagaimana Anda dapat mengotomatiskan proses untuk menghemat waktu berharga Anda.

Sepatah kata tentang SMTP

Simple Mail Transfer Protocol (SMTP) adalah komputerisasi yang setara dengan layanan 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 Klien yang saling 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. Klien email SMTP Anda pertama kali mengirim send HALO (atau EHLO) ke server GMAIL, Anda dapat mengatakan perintah atau header ini setara dengan Tuan rumah header dalam protokol HTTP dan digunakan untuk mengidentifikasi server menggunakan nama domain. Setelah HELO atau EHLO, klien mengotentikasi dirinya ke server dengan nama pengguna dan kata sandi yang diberikan menggunakan AUTH perintah. Kemudian menentukan alamat email pengirim dan penerima dan kemudian isi pesan dan mengirim email ke Server GMAIL. Server GMAIL akan mengkonfirmasi terlebih dahulu apakah alamat email penerima di YAHOO ada atau tidak, kemudian akan mengirimkan email ke Server YAHOO dimana penerima dapat mengambil email dari.

SMTPLIB

SMTPLIB adalah pustaka python yang dapat digunakan sebagai klien SMTP seperti GMAIL, YAHOO, Thunderbird atau klien email lainnya dan dapat digunakan untuk mengirim email. Kami dapat melakukan semua tugas menggunakan klien SMTPLIB yang dapat kami lakukan dengan mereka yang memiliki Antarmuka Pengguna Grafis.

Itu datang secara default di Python, jika Anda tidak memilikinya maka Anda dapat menginstal menggunakan perintah berikut:.

[dilindungi email]:~$ pip install smtplib

ATAU di Python3

[dilindungi email]:~$ 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 kami ke aplikasi yang kurang aman.

Jadi login ke akun GMAIL Anda dan kemudian pergi ke pengaturan akun.

Sekarang pastikan akses untuk aplikasi yang kurang aman diaktifkan.

Sekarang buka konsol python Anda dan mulailah menulis email pertama Anda menggunakan Python

[dilindungi email]:~$ python
Python 2.7.16 (default, 7 Okt 2019, 17:36:04)
[GCC 8.3.0] di linux2

Ketik "bantuan", "hak cipta", "kredit" atau "lisensi" untuk informasi lebih lanjut.

//impor perpustakaan SMTP
>>> impor smtplib
//sambungkan ke Server GMAIL dengan nama domain dan nomor port (Pengaturan ini berbeda untuk
masing-masing penyedia email, silakan lihat tabel yang diberikan di bawah ini)
>>> mailobj = smtplib.SMTP('smtp.gmail.com',587)
//salam ke server
>>> mailobj.halo()
(250, 'smtp.gmail.com siap melayani Anda, [103.255.4.246]\nSIZE35882577\n8BITMIME\nSTARTTLS\
nKODE STATUS YANG DISEMPURNAKAN\nPIPELINING\nCHUNKING\nSMTPUTF8')
//Port 587 berarti kita menggunakan koneksi TLS terenkripsi, jadi mulailah TLS terenkripsi
komunikasi menggunakan starttls(), sehingga kredensial dan pesan kami tidak terendus
>>> mailobj.mulai ()
(220, '2.0.0 Siap untuk memulai TLS')
//login ke akun GMAIL Anda menggunakan email dan kata sandi
>>> mailobj.login('[dilindungi email]','s3cr3t_p4ssw0rd')
(235, '2.7.0 Diterima')
//tentukan alamat email pengirim dan penerima serta konten email
>>> mailobj.sendmail('[email protected]','[email protected]','Subjek:
Halo Dunia! \n Halo dunia! ini adalah email hello world pertama saya dengan Python')

// tutup koneksi ke server GMAIL
>>> mailobj.berhenti()
(221, '2.0.0 menutup koneksi b6sm4519863lfi.72 - gsmtp')

Dalam contoh program di atas, ganti konten yang diberikan dengan konten Anda sendiri. Jika Anda bukan pengguna GMAIL, Anda dapat menggunakan server email penyedia Anda. Berikut adalah daftar Nama Domain dan port dari beberapa penyedia email umum.

Nama Nama Domain Server Pelabuhan
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-mail.pandangan.com 587
yahoo mail smtp.surat.yahoo.com 587
Verizon smtp.verizon.bersih 465
Comcast smtp.comcast.bersih 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 klien IMAP untuk menemukan, mengambil, dan menghapus email dari server email. Python memiliki default imaplib perpustakaan tetapi perpustakaan eksternal lainnya tidak cocok lebih efektif dan mudah digunakan. Dalam tutorial ini kita akan menggunakan tidak cocok untuk mengambil email dari server email.

Masalah dengan tidak cocok apakah itu mengambil email dari server surat dalam format mentah raw. Jadi, kita akan membutuhkan pyzmail perpustakaan sebagai pengurai untuk keluaran yang ramah pengguna. Untuk menginstal kedua perpustakaan, ketik

[dilindungi email]:~$ Sudo pip install imapclient
[dilindungi email]:~$ sudo pip install pyzmail

Mendapatkan Email Anda dari Server Mail

Sekarang, kita akan mempelajari cara mencari dan mengunduh email dari server email menggunakan imapclient. Kami akan menggunakan imapclient untuk mencari dan mengunduh email dari server, kemudian kami akan menggunakan pyzmail untuk mengurai konten mentah ini. mari kita

// impor pustaka klien yang tidak sesuai
>>> impor imapclient
// Hubungkan ke server IMAP GMAIL
>>> obj = imapclient.IMAPClient('imap.gmail.com',ssl=Benar)
// Masuk ke akun email Anda menggunakan kredensial Anda
>>> obj.login('[dilindungi email]','s3cr4tp4ss')
'[dilindungi email] diautentikasi (Berhasil)'
// Pilih folder pesan untuk dibaca i.e INBOX, DRAFT, KIRIM email
>>> obj.pilih_folder('INBOX', readonly=Benar)
'ADA': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'BENDERA': ('\\Dijawab', '\\Berbendera', '\\Draf', '\\Dihapus', '\\Terlihat',
'$NotPhishing', '$Phishing'), 'UIDVALIDITY': 1, 'READ-ONLY': ["], 'RECENT': 0
// Cari pesan Anda di INBOX Anda, atau terapkan filter, filter di bawah ini akan ditampilkan
Anda email yang diterima setelah 25-Okt-2019
>>> mail_ids = obj.cari(['SINCE', '25-Oct-2019'])
>>> mail_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Daftar “mail_ids” berisi daftar id email yang diterima sejak 25-Okt-2019,
Anda dapat mengunduh email menggunakan fungsi pengambilan imapclient.
>>> raw_mail = obj.ambil([919],['BODY[]','FLAGS'])
// Sekarang, konten dalam variabel raw_mail dalam format mentah, tidak dapat ditampilkan di
layar secara langsung, Jadi kami memerlukan pengurai untuk mengurai konten ini untuk keluaran yang ramah pengguna
>>> impor pyzmail
>>> pesan = pyzmail.Pesan Pyz.pabrik(raw_mail[919]['BODY[]'])
// Sekarang email diurai dan disimpan dalam variabel pesan, untuk mendapatkan subjek
email, gunakan fungsi get_subject
>>> pesan.get_subjek()
u'Berdandan keterampilan Anda di Halloween ini dengan diskon 25%'
// Demikian pula, Anda dapat melihat detail pengirim
>>> pesan.get_addresses('dari')
[(u'Usama Azad', '[email protected]')]
>>> pesan.get_addresses('ke')
[(u'[email protected]', '[email protected]')]
// Untuk mendapatkan isi email, ketik
>>> pesan.text_part.get_payload().memecahkan kode (pesan.text_part.rangkaian karakter)
kamu”Hai! Nikmati flat 25% untuk kursus premium kami”

Jika Anda memiliki akun di beberapa penyedia Layanan Email selain GMAIL, Anda dapat masuk ke server IMAP mereka. Berikut adalah daftar nama domain IMAP dari beberapa penyedia email terkenal.

Pemberi Nama Domain untuk Server IMAP
YAHOO gambar.surat.yahoo.com
Hotmail/Outlook imap-mail.pandangan.com
Verizon masuk.verizon.bersih
Comcast gambar.comcast.bersih
AT&T gambar.surat.att.bersih

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

// Untuk menghapus email, Anda harus mengubah hanya baca menjadi 'Salah' untuk mendapatkan akses tulis ke
email
>>> obj.pilih_folder('INBOX', readonly=False)
>>> mail_ids = obj.cari(['SINCE', '25-Oct-2019'])
>>> mail_id
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Berikan uid email atau daftar uid email, setelah menjalankan perintah di bawah ini,
email Anda akan hilang dari INBOX.
>>> obj.delete_messages(919)
919: ('\\Dilihat', '\\Dihapus')
 
// Perintah ini akan menghapus email Anda secara permanen dari server Mail
>>> obj.menghapus()
('Sukses', [])

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 mengucapkannya. Jadi tugas ini dapat dilakukan secara otomatis menggunakan python. Berikut adalah kode untuk melakukan tugas ini this.

// mengimpor Modul
impor ulang
// modul os digunakan untuk melakukan tugas sistem operasi i.e mengakses direktori
impor os
waktu impor
impor smtplib
 
// mendefinisikan fungsi yang akan mengirim email
def send_mail(alamat_penerima_, nama):
sender_mail_address = "[email dilindungi]"
passwd = "pengirimPasswd"
//menghubungkan ke server gmail dengan nama domain dan nomor port
obj = smtplib.SMTP('smtp.gmail.com', 587)
obj.halo()
obj.mulai ()
// masuk ke akun gmail Anda
obj.login(alamat_pengirim_, passwd)
// mengirim email ke 'reciever_mail_address'.
obj.sendmail(sender_mail_address, reciever_mail_address, "Subject: Surat Ucapan Hari Lahir\n\n Selamat Ulang Tahun "+nama)
// mengakhiri koneksi
obj.berhenti()
// Tubuh utama
// pergi ke direktori di mana file yang berisi data ada
os.chdir("path_to_birthday_data_file")
sementara 1:
// mendapatkan tanggal dan waktu saat ini
hari ini = tanggal waktu.tanggal Waktu.hari ini()
hari ini = str(hari ini)
// mendapatkan tahun, bulan, hari, jam, menit, dan detik saat ini
tahun_saat ini = hari ini[0:4]
saat_bulan = hari ini[5:7]
hari_saat ini = hari ini[8:10]
jam_saat ini = hari ini[11:13]
saat_menit = hari ini[14:16]
current_sec = hari ini[17:19]
// membuka file ulang tahun di objek 'file_ulang tahun' dalam mode baca
file_ulang tahun = buka('file_ulang tahun','r')
// menyimpan semua baris 'birthday_file' di daftar baris
baris = file_ulang tahun.garis baca()
// menutup objek 'birthday_file'
file_ulang tahun.Menutup()
// membaca setiap baris menggunakan for loop
untuk baris dalam baris:
// membuat ekspresi reguler untuk menemukan tanggal di 'birthday_file'
dateEx = ulang.kompilasi(r"\d4-\d2-\d2")
findDate=tanggalEx.pencarian (baris)
tanggal = temukanTanggal.kelompok()
// mendapatkan birthday_month dan birthday_day dari file
ulang tahun_bulan = tanggal[5:7]
hari_ulang tahun = tanggal[8:10]
// membuat ekspresi reguler untuk menemukan alamat email dari file_ulang tahun
mailEx = re.kompilasi(r"\w*@\w*.com")
findMail = mailEx.pencarian (baris)
penerima_mail = findMail.kelompok()
//membuat ekspresi reguler untuk menemukan nama orang
namaEx = re.kompilasi(r"\w*")
findName = namaEx.pencarian (baris)
nama = temukanNama.kelompok()
// memeriksa apakah ulang tahun seseorang akan datang atau tidak
jika current_month == birthday_month dan =current_day == birthday_day:
// mengirim email tepat pukul 08:00
jika current_hour == '08' dan current_minute == '00' dan current_sec == '00':
// memanggil fungsi 'send_mail'
send_mail(mail_penerima, nama)

Sekarang kita membuat 'birthday_file', di mana kita menyimpan nama, alamat email, dan tanggal lahirnya. 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 mengucapkan selamat kepada mereka. Pertama-tama kita akan mengimpor beberapa Modul. Modul DATETIME memiliki fungsi yang memberi kita tanggal dan waktu saat ini dan banyak lagi. Tapi 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 menemukan 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 badan utama msg. Di bagian utama skrip kita akan melihat bagaimana kita menemukan 'reciever_mail_address' dan 'name'.

Mengirim email menggunakan smtplib sudah dijelaskan di atas, 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 kami memiliki 'lingkaran while' yang selalu benar sehingga akan memeriksa ulang tahun secara terus menerus. Sekarang kita mendapatkan tanggal dan waktu saat ini dan menyimpannya di variabel 'hari ini'. Sepertinya ini.

01-11-2019 16:19:07.144925

Kami akan mengekstrak tahun, bulan, hari, jam, menit, dan detik menggunakan indeks dari jumlah ini. Setelah ini, kita akan membuka file_ulang tahun di objek 'file_ulang tahun' dalam mode baca, jadi kita hanya bisa membacanya. Sekarang kita akan menyimpan semua baris file ini dalam daftar baris. 'file_ulang tahun.readlines()' akan menyimpan setiap baris dalam daftar 'baris'. Setelah ini kita akan menutup birthday_file menggunakan 'birthday_file.tutup()' fungsi.

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 kami akan membuat ekspresi reguler 'dateEx' yang menemukan format ini di baris.

kembali.kompilasi(r”\d4-\d2-\d2”)

Perintah di atas temukan string yang memiliki '4 digit' diikuti oleh '-' lalu '2 digit' diikuti oleh '-' dan '2 digit'. Ini akan memberi kami tanggal lahir orang tersebut sehingga kami akan mengekstrak tanggal_lahir dan bulan_lahir 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'.

Menjalankan Script Secara Otomatis melalui Cronjob

Sekarang kami 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.

  1. Buka crontab untuk menambahkan tugas di terminal Anda menggunakan perintah berikut
[dilindungi email]:~$ crontab -e
  1. 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.

Instal Game Strategi OpenRA terbaru di Ubuntu Linux
OpenRA adalah mesin game Strategi Waktu Nyata Libre/Gratis yang membuat ulang game Westwood awal seperti Command & Conquer klasik: Red Alert. Mod yang...
Instal Dolphin Emulator terbaru untuk Gamecube & Wii di Linux
Dolphin Emulator memungkinkan Anda memainkan game Gamecube & Wii pilihan Anda di Komputer Pribadi (PC) Linux. Menjadi emulator game sumber terbuka da...
Cara Menggunakan Cheat Engine GameConqueror di Linux
Artikel ini mencakup panduan tentang menggunakan mesin cheat GameConqueror di Linux. Banyak pengguna yang bermain game di Windows sering menggunakan a...