Python

Menghantar e-mel dengan Python

Menghantar e-mel dengan Python
Menghantar, memeriksa dan membalas e-mel adalah tugas yang memakan masa, terutama ketika anda melakukannya untuk sebilangan besar orang atau pelanggan di mana anda hanya perlu menukar nama, alamat, usia dan perkara kecil lain penerima. Menjadi tugas yang sangat sukar bagi anda untuk menulis program yang dapat menangani semua jenis e-mel peribadi / perniagaan anda tetapi anda masih boleh mengautomasikan banyak perkara dalam hal ini yang akhirnya akan menjimatkan banyak masa.

Sebagai contoh, anda ingin menghantar peringatan kepada pelanggan anda untuk baki bil mereka dan anda mempunyai semua data yang berkaitan dengan pelanggan seperti nombor telefon, alamat, usia dan lain-lain dalam lembaran excel atau pangkalan data, dan bukannya melakukannya secara manual, anda boleh menulis program mudah di Python untuk melakukannya secara automatik untuk anda. Dalam tutorial ini, kita akan belajar bagaimana protokol e-mel berfungsi dan bagaimana anda dapat mengotomatisasi proses untuk menjimatkan masa berharga anda.

Satu perkataan mengenai SMTP

Simple Mail Transfer Protocol (SMTP) adalah berkomputer yang setara dengan perkhidmatan pos anda. Ini adalah protokol yang berfungsi pada lapisan Aplikasi Rangkaian TCP / IP. Ini adalah protokol standard untuk menghantar dan menerima e-mel melalui internet. Proses Pemindahan Mel terdiri daripada Pelayan E-mel dan Pelanggan menghantar dan menerima e-mel antara satu sama lain.

Contohnya, anda mempunyai akaun GMAIL dan anda ingin menghantar e-mel kepada rakan anda di akaun YAHOO-nya. Anda menulis e-mel dan tekan send, tetapi proses backend agak rumit, dan untuk memahami proses ini, anda harus memahami SMTP terlebih dahulu. Pelanggan e-mel SMTP anda terlebih dahulu menghantar HELO (atau EHLO) ke pelayan GMAIL, anda boleh mengatakan arahan atau tajuk ini setara dengan Tuan rumah header dalam protokol HTTP dan digunakan untuk mengenal pasti pelayan menggunakan nama domain. Selepas HELO atau EHLO, pelanggan mengesahkan dirinya ke pelayan dengan menggunakan nama pengguna dan kata laluan yang diberikan AUTH perintah. Kemudian menentukan alamat e-mel pengirim dan penerima dan kemudian badan mesej dan menghantar e-mel ke Pelayan GMAIL. Pelayan GMAIL terlebih dahulu akan mengesahkan bahawa sama ada alamat e-mel penerima di YAHOO ada atau tidak, maka ia akan menghantar e-mel tersebut ke Pelayan YAHOO di mana penerima dapat mengambil e-melnya dari.

SMTPLIB

SMTPLIB adalah pustaka python yang boleh digunakan sebagai klien SMTP seperti GMAIL, YAHOO, Thunderbird atau pelanggan e-mel anda yang lain dan boleh digunakan untuk menghantar e-mel. Kami dapat melakukan semua tugas menggunakan klien SMTPLIB yang dapat kami lakukan dengan mereka yang mempunyai Antaramuka Pengguna Grafik.

Ia datang secara lalai di Python, sekiranya anda tidak memilikinya maka anda boleh memasang menggunakan perintah berikut.

[dilindungi e-mel]: ~ $ pip pasang smtplib

ATAU di Python3

[dilindungi e-mel]: ~ $ pip pasang smtplib

Menulis E-mel pertama anda dengan Python

Dalam tutorial ini, saya akan menggunakan akaun GMAIL sebagai pengirim, dan saya juga akan menggunakan konsol Python, jadi akan lebih mudah bagi saya untuk menerangkan setiap baris kod langkah demi langkah. Untuk memulakan, kita perlu membenarkan GMAIL kita mengakses aplikasi yang kurang selamat.

Oleh itu, log masuk ke akaun GMAIL anda dan kemudian pergi ke tetapan akaun.

Sekarang pastikan bahawa akses untuk aplikasi yang kurang selamat dihidupkan.

Sekarang buka konsol python anda dan mulailah menulis e-mel pertama anda menggunakan Python

[dilindungi e-mel]: ~ $ python
Python 2.7.16 (lalai, 7 Okt 2019, 17:36:04)
[GCC 8.3.0] pada linux2

Ketik "bantuan", "hak cipta", "kredit" atau "lesen" untuk maklumat lebih lanjut.

// import perpustakaan SMTP
>>> import smtplib
// sambungkan ke Pelayan GMAIL dengan nama domain dan nombor port (Tetapan ini berbeza untuk
setiap penyedia e-mel, sila lihat jadual yang diberikan di bawah)
>>> mailobj = smtplib.SMTP ('smtp.gmail.com ', 587)
// bertanya khabar pelayan
>>> suratobj.ehlo ()
(250, 'smtp.gmail.com untuk perkhidmatan anda, [103.255.4.246] \ nSIZE35882577 \ n8BITMIME \ nSTARTTLS \
NENHANCEDSTATUSCODES \ nPIPELINING \ nCHUNKING \ nSMTPUTF8 ')
// Port 587 bermaksud bahawa kita menggunakan sambungan TLS yang disulitkan, jadi mulailah TLS yang disulitkan
komunikasi menggunakan starttls (), supaya kelayakan dan mesej kami tidak diendam
>>> suratobj.permulaan ()
(220, '2.0.0 Bersedia untuk memulakan TLS ')
// log masuk ke akaun GMAIL anda menggunakan e-mel dan kata laluan
>>> suratobj.log masuk ('[dilindungi e-mel]', 's3cr3t_p4ssw0rd')
(235, '2.7.0 Diterima ')
// nyatakan alamat e-mel pengirim dan penerima serta kandungan e-mel
>>> suratobj.sendmail ('[dilindungi e-mel]', '[dilindungi e-mel]', 'Subjek:
Hai dunia! \ n Helo dunia! ini adalah e-mel dunia hello pertama saya di Python ')

// sambungan rapat ke pelayan GMAIL
>>> suratobj.berhenti ()
(221, '2.0.0 menutup sambungan b6sm4519863lfi.72 - gsmtp ')

Dalam program contoh di atas, ganti kandungan yang diberikan dengan yang anda sendiri. Sekiranya anda bukan pengguna GMAIL, anda boleh menggunakan pelayan e-mel penyedia anda. Berikut adalah senarai Nama Domain dan port beberapa penyedia mel biasa.

Nama Nama Domain Pelayan Pelabuhan
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-mel.pandangan.com 587
Mel Yahoo smtp.mel.yahoo.com 587
Verizon smtp.verizon.bersih 465
Comcast smtp.siaran.bersih 587

Beberapa Perkataan mengenai IMAP

Oleh itu, kami baru mengetahui bahawa SMTP digunakan untuk menghantar e-mel, tetapi apa itu IMAP (Internet Access Messaging Protocol)? SMTP tidak dapat digunakan untuk mencari dan mendapatkan e-mel dari pelayan, protokol IMAP atau POP3 digunakan untuk tujuan tersebut.

IMAPCLIENT, IMAPLIB dan PYZMAIL

Terdapat dua perpustakaan utama di Python yang boleh digunakan sebagai klien IMAP untuk mencari, mengambil dan menghapus e-mel dari pelayan mel. Python mempunyai lalai imaplib perpustakaan tetapi perpustakaan luaran yang lain orang kurang upaya lebih berkesan dan senang digunakan. Dalam tutorial ini kita akan gunakan orang kurang upaya untuk mengambil e-mel dari pelayan mel.

Masalah dengan orang kurang upaya adalah bahawa ia mengambil e-mel dari pelayan mel dalam format mentah. Jadi, kita perlukan pyzmail perpustakaan sebagai penghurai untuk output yang mesra pengguna. Untuk memasang kedua-dua perpustakaan, ketik

[dilindungi e-mel]: ~ $ sudo pip memasang imapclient
[dilindungi e-mel]: ~ $ sudo pip pasang pyzmail

Mendapatkan E-mel anda dari Pelayan Mel

Sekarang, kita akan belajar mencari dan memuat turun e-mel dari pelayan mel menggunakan imapclient. Kami akan menggunakan imapclient untuk mencari dan memuat turun e-mel dari pelayan, kemudian kami akan menggunakan pyzmail untuk menguraikan kandungan mentah ini. Mari

// import pustaka imapclient
>>> import imapclient
// Sambungkan ke pelayan IMAP GMAIL
>>> obj = tidak sesuai.Pelanggan IMAP ('imap.gmail.com ', ssl = Betul)
// Log masuk ke akaun e-mel anda menggunakan bukti kelayakan anda
>>> obj.log masuk ('[dilindungi e-mel]', 's3cr4tp4ss')
'[dilindungi e-mel] disahkan (Berjaya)'
// Pilih folder mesej untuk dibaca i.e INBOX, DRAF, MENGHANTAR mel
>>> obj.select_folder ('INBOX', hanya baca = Benar)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGS': ('\\ Dijawab', '\\ Ditandai', '\\ Draf', '\\ Dihapus', '\\ Dilihat',
'$ NotPhishing', '$ Phishing'), 'UIDVALIDITY': 1, 'READ-ONLY': ["], 'TERBARU': 0
// Cari mesej anda di INBOX anda, atau gunakan penapis, penapis di bawah akan muncul
anda surat yang diterima selepas 25-Okt-2019
>>> surat_id = obj.cari (['SEJAK', '25-Okt-2019'])
>>> surat mel
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Senarai "mail_ids" mengandungi senarai id e-mel yang diterima sejak 25-Okt-2019,
anda boleh memuat turun e-mel menggunakan fungsi pengambilan imapclient.
>>> raw_mail = obj.ambil ([919], ['BODY []', 'FLAGS'])
// Sekarang, kandungan dalam variabel raw_mail dalam format mentah, tidak dapat ditampilkan di
skrin secara langsung, Oleh itu, kami memerlukan penghurai untuk menguraikan kandungan ini untuk output yang mesra pengguna
>>> import pyzmail
>>> mesej = pyzmail.PyzMessage.kilang (raw_mail [919] ['BODY []'])
// Sekarang e-mel dihurai dan disimpan dalam pemboleh ubah mesej, untuk mendapatkan subjek
e-mel, gunakan fungsi get_subject
>>> mesej.get_subject ()
uTingkatkan kemahiran anda pada Halloween ini dengan potongan 25% '
// Begitu juga, anda dapat melihat perincian pengirim
>>> mesej.get_addresses ('dari')
[(u'Usama Azad ',' [dilindungi e-mel] ')]
>>> mesej.get_addresses ('hingga')
[(u '[email dilindungi]', '[email dilindungi]')]
// Untuk mendapatkan isi e-mel, ketik
>>> mesej.bahagian_ teks.get_payload ().menyahkod (mesej.bahagian_ teks.carta)
awak ”Hai! Nikmati 25% secara tetap untuk kursus premium kami ”

Sekiranya anda mempunyai akaun di beberapa penyedia Perkhidmatan E-mel lain selain GMAIL, anda boleh log masuk ke pelayan IMAP mereka. Berikut adalah senarai nama domain IMAP beberapa penyedia mel terkenal.

Penyedia Nama Domain untuk Pelayan IMAP
YAHOO meniru.mel.yahoo.com
Hotmail / Outlook imap-mel.pandangan.com
Verizon masuk.verizon.bersih
Comcast meniru.siaran.bersih
AT&T meniru.mel.at.bersih

Memadamkan E-mel anda dari Pelayan IMAP

Sama seperti mencari dan mengambil e-mel dari pelayan, anda juga boleh menghapus e-mel dari pelayan mel anda menggunakan uid mereka. Ikuti sahaja langkah yang diberikan

// Untuk menghapus e-mel, anda hanya perlu mengubah baca menjadi 'Salah' untuk mendapatkan akses menulis ke alamat anda
e-mel
>>> obj.select_folder ('INBOX', hanya baca = Salah)
>>> surat_id = obj.cari (['SEJAK', '25-Okt-2019'])
>>> surat mel
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Sediakan uid e-mel atau senarai uids e-mel, setelah menjalankan perintah di bawah,
e-mel anda akan hilang dari INBOX.
>>> obj.delete_messages (919)
919: ('\\ Dilihat', '\\ Dihapus')
 
// Perintah ini akan menghapus e-mel anda secara kekal dari pelayan Mail
>>> obj.menghapuskan ()
('Kejayaan', [])

https: // techtopz.com / bina-ulang tahun-peringatan-aplikasi-di-python-on-mac /

Membuat peringatan ulang tahun anda sendiri

Anda mempunyai hari lahir rakan anda dalam beberapa bulan akan datang dan anda ingin mengucapkan selamat ulang tahun kepada mereka. Tetapi anda mempunyai banyak pekerjaan di pejabat anda dan ada kemungkinan anda akan lupa menginginkannya. Jadi tugas ini dapat dilakukan secara automatik menggunakan python. Berikut adalah kod untuk melaksanakan tugas ini.

// mengimport Modul
import semula
// modul os digunakan untuk melaksanakan tugas sistem operasi i.e mengakses direktori
import os
masa data import
import smtplib
 
// menentukan fungsi yang akan menghantar e-mel
def send_mail (penerima_mail_address, nama):
sender_mail_address = "[e-mel dilindungi]"
passwd = "senderPasswd"
// menyambung ke pelayan gmail dengan nama domain dan nombor port
obj = smtplib.SMTP ('smtp.gmail.com ', 587)
obj.ehlo ()
obj.permulaan ()
// log masuk ke akaun gmail anda
obj.log masuk (sender_mail_address, passwd)
// menghantar surat ke 'reciever_mail_address'.
obj.sendmail (sender_mail_address, reciever_mail_address, "Subject: BirthDay Wishing Mail \ n \ n HappyBirthday" + nama)
// menamatkan sambungan
obj.berhenti ()
// Badan Utama
// pergi ke direktori di mana fail yang mengandungi data ada
os.chdir ("path_to_birthday_data_file")
sementara 1:
// mendapatkan tarikh dan masa saat ini
hari ini = masa.masa tarikh.hari ini ()
hari ini = str (hari ini)
// mendapatkan tahun semasa, bulan, hari, jam, minit dan kedua
current_year = hari ini [0: 4]
current_month = hari ini [5: 7]
current_day = hari ini [8:10]
current_hour = hari ini [11:13]
current_minute = hari ini [14:16]
current_sec = hari ini [17:19]
// membuka fail ulang tahun dalam objek 'birthday_file' dalam mod baca
birthday_file = terbuka ('birthday_file', 'r')
// menyimpan semua baris 'birthday_file' dalam senarai baris
garisan = ulang tahun_file.bacaan semula ()
// menutup objek 'birthday_file'
ulang tahun_file.tutup ()
// membaca setiap baris menggunakan gelung
untuk baris dalam baris:
// membuat ungkapan biasa untuk mencari tarikh dalam 'birthday_file'
tarikhEx = semula.menyusun (r "\ d 4 - \ d 2 - \ d 2")
cariTarikh = tarikhEx.cari (baris)
tarikh = cariTarikh.kumpulan()
// mendapatkan ulang tahun_bulan dan hari lahir_bulan dari fail
tarikh_bulan = tarikh [5: 7]
hari ulang tahun = tarikh [8:10]
// membuat ungkapan biasa untuk mencari alamat e-mel dari birthday_file
mailEx = semula.menyusun (r "\ w * @ \ w *.com ")
cariMail = mailEx.cari (baris)
reciever_mail = cariMail.kumpulan()
// membuat ungkapan biasa untuk mencari nama orang itu
namaEx = re.menyusun (r "\ w *")
cariNama = namaEx.cari (baris)
nama = cariNama.kumpulan()
// memeriksa sama ada ulang tahun seseorang akan datang atau tidak
jika current_month == birthday_month dan = current_day == birthday_day:
// menghantar surat tepat jam 08:00
jika current_hour == '08' dan current_minute == '00' dan current_sec == '00':
// memanggil fungsi 'send_mail'
send_mail (penerima_mail, nama)

Sekarang kita membuat 'birthday_file', di mana kita menyimpan nama, alamat e-mel dan tarikh lahir mereka. Ini adalah fail teks ringkas dan kelihatan seperti ini.

Penjelasan

Kami akan membaca fail ini menggunakan skrip python dan memeriksa ulang tahun siapa yang akan datang dan mengucapkan selamat datang. Pertama sekali kita akan mengimport beberapa Modul. Modul DATETIME mempunyai fungsi yang memberi kita tarikh dan masa terkini dan banyak lagi. Tetapi kami hanya akan menggunakan ini untuk mencari tarikh dan masa semasa. Modul SMTPLIB digunakan untuk menghantar surat dan telah dijelaskan di atas. Modul RE mempunyai fungsi yang digunakan untuk mencari ungkapan biasa dari rentetan.

Dalam skrip ini, kita mendefinisikan fungsi 'send_mail', yang mengirim surat ke 'reciever_mail_address', yang namanya adalah 'name'. Kedua-dua argumen diteruskan ke fungsi dari badan utama msg. Di bahagian utama skrip, kita akan melihat bagaimana kita mencari 'reciever_mail_address' dan 'name'.

Menghantar e-mel menggunakan smtplib telah dijelaskan di atas, jadi anda boleh membacanya dan tidak akan dibincangkan di sini.

Di badan utama, kita pergi ke direktori di mana kita telah menyimpan 'birthday_file' menggunakan 'os.chdir () '. Kemudian kita mempunyai 'while loop' yang selalu berlaku sehingga akan memeriksa ulang tahun secara berterusan. Sekarang kita mendapat tarikh dan masa terkini dan menyimpannya dalam pemboleh ubah 'hari ini'. Ia kelihatan seperti ini.

2019-11-01 16:19:07.144925

Kami akan mengekstrak tahun, bulan, hari, jam, minit dan saat menggunakan indeks kuantiti ini. Selepas ini, kita akan membuka birthday_file dalam objek 'birthday_file' dalam mod baca, jadi kita hanya dapat membacanya. Sekarang kita akan menyimpan semua baris fail ini dalam senarai baris. 'ulang tahun_file.readlines () 'akan menyimpan setiap baris dalam senarai' baris '. Selepas ini kami akan menutup birthday_file menggunakan 'birthday_file.tutup () 'fungsi.

Sekarang kita akan membaca setiap baris satu demi satu menggunakan loop. Di setiap baris hanya data satu orang yang tersedia di 'birthday_file', jadi kami hanya membaca data satu orang pada satu masa dalam lingkaran ini.

Selepas ini, kami akan mengekstrak Tarikh lahir, alamat e-mel dan nama orang yang menggunakan modul RE. Seperti yang telah kami tuliskan tarikhnya dalam format berikut

YYYY-MM-DD

Oleh itu, kita akan membuat ungkapan biasa 'dateEx' yang menemui format ini dalam baris.

semula.menyusun (r ”\ d 4 - \ d 2 - \ d 2”)

Perintah di atas cari rentetan yang mempunyai '4 digit' diikuti oleh '-' kemudian '2 digit' diikuti oleh '-' dan '2 digit'. Ini akan memberi kita tarikh lahir orang itu sehingga kita akan mengekstrak tarikh lahir dan hari lahir dari ungkapan ini.

Begitu juga kita akan mencari alamat e-mel menggunakan ungkapan biasa. Selepas ini, kita akan membandingkan tarikh_bulan dan bulan_bulan dan tarikh_dan_dan_dan_bulan. Sekiranya syarat ini dipenuhi, kami akan menghantar e-mel ulang tahun dengan menggunakan fungsi 'send_mail' tepat '08: 00 '.

Menjalankan Skrip Secara Automatik melalui Cronjob

Sekarang kita akan memastikan bahawa skrip python ini berjalan setiap masa. Untuk melakukan ini, kami akan menambahkan tugas ini ke crontab. Crontab, di linux, digunakan untuk melaksanakan tugas secara automatik. Yang harus kita buat hanyalah menambahkan tugas ke crontab. Untuk melakukannya, ikuti langkah-langkah yang diberikan.

  1. Buka crontab untuk menambahkan tugas di terminal anda menggunakan arahan berikut
[dilindungi e-mel]: ~ $ crontab -e
  1. Di akhir fail ini masukkan arahan berikut tanpa #
@reboot python path_to_the_script

Perintah di atas akan membolehkan sistem anda menjalankan skrip python setiap kali anda memulakan semula sistem anda. Dengan cara ini, sistem anda akan menjalankan skrip python setiap kali sistem anda dihidupkan.

Permainan Terbaik untuk Dimainkan dengan Penjejakan Tangan
Oculus Quest baru-baru ini memperkenalkan idea hebat penjejakan tangan tanpa pengawal. Dengan jumlah permainan dan aktiviti yang semakin meningkat yan...
Cara Menunjukkan Overlay OSD dalam Aplikasi dan Permainan Linux Skrin Penuh
Bermain permainan skrin penuh atau menggunakan aplikasi dalam mod skrin penuh bebas gangguan dapat memisahkan anda dari maklumat sistem yang relevan y...
5 Kad Tangkap Permainan Teratas
Kita semua telah melihat dan menyukai streaming permainan permainan di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain terat...