piton

Python ile e-posta gönderme

Python ile e-posta gönderme
E-postaları göndermek, kontrol etmek ve yanıtlamak, özellikle çok sayıda kişi veya müşteri için yaptığınız ve alıcının adını, adresini, yaşını ve diğer küçük şeyleri değiştirmeniz gereken zaman alıcı bir iştir. Her türlü kişisel/iş e-postalarınızı işleyebilecek bir program yazmak sizin için çok zor olurdu ama yine de bu konuda birçok şeyi otomatikleştirebilir ve sonunda size çok zaman kazandıracaktır.

Örneğin, müşterilerinize kalan faturaları için bir hatırlatma göndermek istiyorsanız ve telefon numarası, adres, yaş gibi müşteriyle ilgili tüm verileri bir excel tablosunda veya bir veritabanında bulundurduğunuzda bunu manuel olarak yapmak yerine bir Python'da bunu sizin için otomatik olarak yapacak basit bir program. Bu eğitimde, e-posta protokolünün nasıl çalıştığını ve değerli zamanınızdan tasarruf etmek için süreci nasıl otomatikleştirebileceğinizi öğreneceğiz.

SMTP hakkında birkaç kelime

Basit Posta Aktarım Protokolü (SMTP), posta hizmetinizin bilgisayarlı eşdeğeridir. Bir TCP/IP Ağının Uygulama katmanında çalışan bir protokoldür. İnternet üzerinden e-posta göndermek ve almak için standart bir protokoldür. Posta Aktarımı süreci, E-posta Sunucuları ve İstemcilerin birbirlerine e-posta gönderip almalarından oluşur.

Örneğin, bir GMAIL hesabınız var ve arkadaşınıza onun YAHOO hesabı üzerinden bir e-posta göndermek istiyorsunuz. Bir e-posta yazıp gönder'e basıyorsunuz, ancak arka uç süreci biraz karmaşık ve bu süreci anlamak için önce SMTP'yi anlamanız gerekecek. SMTP e-posta istemciniz önce MERHABA (veya EHLO) GMAIL sunucusuna, bu komutun veya başlığın eşdeğer olduğunu söyleyebilirsiniz ev sahibi HTTP protokolünde başlık ve alan adını kullanarak sunucuyu tanımlamak için kullanılır. HELO veya EHLO'dan sonra, istemci, verilen kullanıcı adı ve şifre ile sunucuya kimliğini doğrular YETKİ komut. Daha sonra gönderenin ve alıcının e-posta adresini ve ardından mesaj gövdesini belirtir ve e-postayı GMAIL Sunucusuna gönderir. GMAIL sunucusu, önce alıcının YAHOO'daki e-posta adresinin var olup olmadığını onaylayacak, ardından e-postayı, alıcının e-postalarını alabileceği YAHOO Sunucusuna gönderecektir.

SMTPLIB

SMTPLIB, tıpkı GMAIL, YAHOO, Thunderbird veya diğer herhangi bir e-posta istemciniz gibi bir SMTP istemcisi olarak kullanılabilen ve e-posta göndermek için kullanılabilen bir python kitaplığıdır. Grafiksel Kullanıcı Arayüzü olanlarla yapabileceğimiz tüm görevleri SMTPLIB istemcisi kullanarak gerçekleştirebiliriz.

Python'da varsayılan olarak gelir, sahip değilseniz, aşağıdaki komutu kullanarak yükleyebilirsiniz.

[e-posta korumalı]:~$ pip kurulum smtplib

VEYA Python3'te

[e-posta korumalı]:~$ pip kurulum smtplib

Python ile İlk E-postanızı Yazmak

Bu derste gönderici olarak bir GMAIL hesabı kullanacağım, ayrıca Python konsolunu kullanacağım, bu yüzden her bir kod satırını adım adım açıklamam daha kolay olacak. Başlamak için GMAIL'imizin daha az güvenli uygulamalara erişmesine izin vermemiz gerekiyor.

GMAIL hesabınıza giriş yapın ve ardından hesap ayarlarına gidin.

Şimdi daha az güvenli uygulamalara erişimin açık olduğundan emin olun.

Şimdi python konsolunuzu açın ve Python kullanarak ilk e-postanızı yazmaya başlayın

[e-posta korumalı]:~$ piton
piton 2.7.16 (varsayılan, 7 Ekim 2019, 17:36:04)
[GCC 8.3.0] linux2'de

Daha fazla bilgi için "yardım", "telif hakkı", "kredi" veya "lisans" yazın.

//SMTP kitaplığını içe aktar
>>> smtplib'i içe aktar
//GMAIL Sunucusuna etki alanı adı ve bağlantı noktası numarası ile bağlanın (Bu ayar,
her e-posta sağlayıcısı, lütfen aşağıda verilen tabloya bir göz atın)
>>> mailobj = smtplib.SMTP('smtp.gmail.com',587)
// sunucuya merhaba de
>>> posta nesnesi.ehlo()
(250, 'smtp.gmail.com hizmetinizde, [103.255.4.246]\nSIZE35882577\n8BITMIME\nSTARTTLS\
GELİŞTİRİLMİŞ DURUM KODLARI\nBORU HAZIRLAMA\nYAĞLAMA\nSMTPUTF8')
//Port 587, şifreli TLS bağlantısı kullandığımız anlamına gelir, bu nedenle şifreli TLS'yi başlatın
starttls() kullanarak iletişim, böylece kimlik bilgilerimiz ve mesajlarımız koklanmaz
>>> posta nesnesi.starttls()
(220, '2.0.0 TLS'yi başlatmaya hazır')
//e-posta ve şifre kullanarak GMAIL hesabınıza giriş yapın
>>> posta nesnesi.login('[e-posta korumalı]','s3cr3t_p4ssw0rd')
(235, '2.7.0 Kabul Edildi')
// gönderenin ve alıcının e-posta adresini ve e-posta içeriğini belirtin
>>> posta nesnesi.sendmail('[e-posta korumalı]','[e-posta korumalı]','Konu:
Selam Dünya! \n Merhaba dünya! bu benim Python'daki ilk merhaba dünya e-postam')

// GMAIL sunucusuna bağlantıyı kapat
>>> posta nesnesi.çıkmak()
(221, '2.0.0 kapatma bağlantısı b6sm4519863lfi.72 - gsmtp')

Yukarıdaki örnek programda verilen içeriği kendi içeriğinizle değiştirin. GMAIL kullanıcısı değilseniz, sağlayıcınızın e-posta sunucusunu kullanabilirsiniz. İşte bazı yaygın posta sağlayıcılarının Alan Adları ve bağlantı noktalarının listesi.

isim Sunucu Etki Alanı Adı Liman
Gmail smtp.gmail.com 587
Outlook / Hotmail smtp-posta.görünüm.com 587
Yahoo e smtp.posta.yahoo.com 587
verizon smtp.verizon.ağ 465
comcast smtp.comcast.ağ 587

IMAP Hakkında Bazı Sözler

Bu yüzden SMTP'nin e-posta göndermek için kullanıldığını inceledik, ancak IMAP (İnternet Erişim Mesajlaşma Protokolü) nedir?? SMTP, sunucudan e-posta aramak ve almak için kullanılamaz, bu amaçla IMAP veya POP3 protokolü kullanılır.

IMAPCLIENT, IMAPLIB ve PYZMAIL

Python'da, posta sunucusundan e-postaları bulmak, almak ve silmek için IMAP istemcisi olarak kullanılabilecek iki büyük kitaplık vardır. Python'un varsayılanı var imaplib kütüphane ama başka bir harici kütüphane isteksiz daha etkili ve kullanımı kolaydır. Bu eğitimde kullanacağımız isteksiz posta sunucusundan e-postaları almak için.

ile sorun isteksiz e-postaları posta sunucusundan ham biçimde almasıdır. Yani, ihtiyacımız olacak posta kullanıcı dostu çıktı için ayrıştırıcı olarak kitaplık. Her iki kitaplığı da yüklemek için şunu yazın

[e-posta korumalı]:~$ sudo pip install imapclient
[e-posta korumalı]:~$ sudo pip kurulum pyzmail

E-postalarınızı Posta Sunucusundan Alma

Şimdi, imapclient kullanarak posta sunucusundan e-posta aramayı ve indirmeyi öğreneceğiz. Sunucudan e-postaları aramak ve indirmek için imapclient kullanacağız, ardından bu ham içeriği ayrıştırmak için pyzmail kullanacağız. Haydi

// imapclient kitaplığını içe aktar
>>> impclient'i içe aktar
// GMAIL'in IMAP sunucusuna bağlanın
>>> nesne = impclient.IMAPClient('imap.gmail.com',ssl=Doğru)
// Kimlik bilgilerinizi kullanarak e-posta hesabınıza giriş yapın
>>> nesne.login('[e-posta korumalı]','s3cr4tp4ss')
'[e-posta korumalı] kimliği doğrulandı (Başarılı)'
// i okumak için mesaj klasörünü seçin.e GELEN KUTUSU, TASLAKLAR, GÖNDERİLEN postalar
>>> nesne.select_folder('INBOX', readonly=Doğru)
'VAR OLAN': 830, 'KALICI BAYRAKLAR': (), 'HIGHESTMODSEQ': 112999, 'UIDEXT': 931,
'BAYRAKLAR': ('\\Yanıtlandı', '\\İşaretli', '\\Taslak', '\\Silindi', '\\Görüldü',
'$Phishing Not', '$Phishing'), 'UIDVALIDITY': 1, 'salt okunur': ["], 'SON': 0
// Gelen kutunuzda mesajlarınızı arayın veya bir filtre uygulayın, aşağıdaki filtre görünecektir
25-Ekim-2019'dan sonra gelen e-postalar
>>> mail_ids = nesne.search(['BERİ', '25-Ekim-2019'])
>>> mail_id'ler
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// "mail_ids" listesi, 25-Ekim-2019'dan beri alınan e-posta kimliklerinin bir listesini içerir,
imapclient getirme işlevini kullanarak bir e-posta indirebilirsiniz.
>>> raw_mail = nesne.getir([919],['BODY[]','FLAGS'])
// Artık raw_mail değişkenindeki içerik raw formatındadır, üzerinde görüntülenemez
Bu nedenle, kullanıcı dostu bir çıktı için bu içeriği ayrıştırmak için bir ayrıştırıcıya ihtiyacımız var
>>> pyzmail'i içe aktar
>>> mesaj = pyzmail.PyzMessage.fabrika(raw_mail[919]['BODY[]'])
// Şimdi e-posta, konusunu almak için mesaj değişkeninde ayrıştırılır ve saklanır
e-posta, get_subject işlevini kullanın
>>> mesaj.get_subject()
u'Bu Cadılar Bayramı'nda yeteneklerinizi %25 indirimle süsleyin'
// Benzer şekilde, gönderen ayrıntılarını görebilirsiniz
>>> mesaj.get_addresses('from')
[(u'Usama Azad', '[e-posta korumalı]')]
>>> mesaj.get_addresses('to')
[(u'[e-posta korumalı]', '[e-posta korumalı]')]
// E-postanın gövdesini almak için şunu yazın
>>> mesaj.text_part.get_payload().deşifre (mesaj.text_part.karakter seti)
merhaba! Premium kurslarımızda sabit %25'in keyfini çıkarın”

GMAIL dışında başka bir E-posta Hizmeti sağlayıcısında hesabınız varsa, onların IMAP sunucusuna giriş yapabilirsiniz. İşte bazı ünlü posta sağlayıcılarının IMAP alan adı listesi.

Sağlayıcı IMAP Sunucusu için Alan Adı
YAHOO imap.posta.yahoo.com
Hotmail/Outlook imap-posta.görünüm.com
verizon gelen.verizon.ağ
comcast imap.comcast.ağ
AT&T imap.posta.dikkat.ağ

E-postanızı IMAP Sunucusundan Silme

Sunucudan e-postaları aramaya ve almaya benzer şekilde, kullanıcı kimliklerini kullanarak e-postaları posta sunucunuzdan da silebilirsiniz. Sadece verilen adımları izleyin

// Bir e-postayı silmek için, e-postanıza yazma erişimi elde etmek için salt okunuru 'Yanlış'a çevirmeniz gerekir
e-postalar
>>> nesne.select_folder('GİRİŞ KUTUSU', readonly=Yanlış)
>>> mail_ids = nesne.search(['BERİ', '25-Ekim-2019'])
>>> mail_id'ler
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Aşağıdaki komutu çalıştırdıktan sonra bir e-posta kullanıcı kimliği veya bir e-posta kullanıcı kimliği listesi sağlayın,
e-postanız INBOX'tan kaybolacak.
>>> nesne.sil_mesajları(919)
919: ('\\Görüldü', '\\Silindi')
 
// Bu komut, e-postalarınızı Posta sunucusundan kalıcı olarak siler
>>> nesne.sil()
('Başarı', [])

https://techtopz.com/build-a-birthday-reminder-application-in-python-on-mac/

Kendi doğum günü hatırlatıcınızı oluşturma

Önümüzdeki aylarda arkadaşlarınızın doğum günleri var ve onların doğum günlerini kutlamak istiyorsunuz. Ama ofisinizde çok işiniz var ve onları dilemeyi unutma ihtimaliniz var. Böylece bu görev python kullanılarak otomatik olarak gerçekleştirilebilir. Bu görevi gerçekleştirmek için kod aşağıdadır.

// Modülleri içe aktarıyoruz
yeniden içe aktar
// os modülü, işletim sistemi görevlerini gerçekleştirmek için kullanılır i.e dizinlere erişim
işletim sistemini içe aktar
tarih saatini içe aktar
smtplib'i içe aktar
 
// e-posta gönderecek bir fonksiyon tanımlıyoruz
def send_mail(alıcı_mail_adresi, isim):
sender_mail_address = "[e-posta korumalı]"
passwd = "senderPasswd"
// alan adı ve port numarası ile gmail sunucusuna bağlanılıyor
nesne = smtplib.SMTP('smtp.gmail.com', 587)
nesne.ehlo()
nesne.starttls()
// gmail hesabınıza giriş yapıyoruz
nesne.login(sender_mail_address, passwd)
// 'reciever_mail_address' adresine posta gönderiliyor.
nesne.sendmail(sender_mail_address, reciever_mail_address, "Konu: Doğum Günü Dilek Postası\n\n Doğum Günün Kutlu Olsun "+ad)
//bağlantıyı sonlandır
nesne.çıkmak()
// Ana Gövde
// veri içeren dosyanın bulunduğu dizine gidiyoruz
işletim sistemi.chdir("path_to_birthday_data_file")
1 iken:
// şimdiki anın tarih ve saatini alma
bugün = tarihsaat.tarih saat.bugün()
bugün = str(bugün)
// geçerli yılı, ayı, günü, saati, dakikayı ve saniyeyi almak
current_year = bugün[0:4]
cari_ay = bugün[5:7]
current_day = bugün[8:10]
current_hour = bugün[11:13]
akım_dakika = bugün[14:16]
current_sec = bugün[17:19]
// doğum günü dosyasını 'birthday_file' nesnesinde okuma modunda açma
doğumgünü_dosyası = open('birthday_file','r')
// 'birthday_file' tüm satırlarını satır listesine kaydetme
satırlar = doğum günü_dosyası.okuma satırları()
// 'birthday_file' nesnesini kapatıyoruz
doğum günü_dosyası.kapat()
// for döngüsü kullanarak her satırı okuma
satır içi satırlar için:
// 'birthday_file' içinde bir tarih bulmak için düzenli bir ifade yapıyoruz
tarihÖr = yeniden.derleme(r"\d4-\d2-\d2")
findDate=dateEx.arama(satır)
tarih = tarih bul.grup()
// dosyadan doğum günü_ayı ve doğum günü_gününü almak
doğum günü_ay = tarih[5:7]
doğum günü_günü = tarih[8:10]
// doğumgünü_dosyasından posta adresini bulmak için normal bir ifade yapıyoruz
mailEx = yeniden.derleme(r"\w*@\w*.com")
findMail = mailEx.arama(satır)
reciever_mail = findMail.grup()
//kişinin adını bulmak için düzenli bir ifade yapmak
adÖrnek = yeniden.derleme(r"\w*")
findName = nameEx.arama(satır)
isim = bulAd.grup()
// birinin doğum gününün gelip gelmediğini kontrol etmek
geçerli_ay == doğum günü_ay ve =geçerli_gün == doğum günü_gün ise:
// posta tam 08:00'de gönderiliyor
current_hour == '08' ve current_minute == '00' ve current_sec == '00' ise:
// 'send_mail' işlevi çağrılıyor
send_mail(alıcı_mail, isim)

Şimdi adları, e-posta adreslerini ve doğum tarihlerini kaydettiğimiz bir 'birthday_file' oluşturuyoruz. Bu basit bir metin dosyasıdır ve şöyle görünür.

açıklama

Bu dosyayı python betiğini kullanarak okuyacağız ve kimin doğum gününün geldiğini kontrol edip dileklerimizi ileteceğiz. Her şeyden önce bazı Modülleri içe aktaracağız. DATETIME Modülü, bize güncel tarih ve saati ve daha fazlasını veren işlevlere sahiptir. Ancak bunu yalnızca geçerli tarih ve saati bulmak için kullanacağız. SMTPLIB modülü mail göndermek için kullanılır ve yukarıda anlatılmıştır. RE modülü, bir dizgeden normal ifadeyi bulmak için kullanılan işlevlere sahiptir.

Bu scriptte adı 'name' olan 'alıcı_mail_adresi'ne mail gönderen 'send_mail' fonksiyonunu tanımlıyoruz. Her iki argüman da msg'nin ana gövdesinden işleve iletilir. Komut dosyasının ana gövdesinde 'reciever_mail_address' ve 'name'yi nasıl bulacağımızı göreceğiz.

Smtplib kullanarak e-posta gönderme yukarıda açıklanmıştır, okuyabilmeniz için burada tartışılmayacaktır.

Ana gövdede 'os' kullanarak 'birthday_file' kaydettiğimiz dizine gidiyoruz.chdir()'. Sonra her zaman doğru olan bir 'while döngüsü' var, bu yüzden doğum gününü sürekli kontrol edecek. Şimdi güncel tarih ve saati alıyoruz ve 'bugün' değişkenine kaydediyoruz. şuna benziyor.

2019-11-01 16:19:07.144925

Bu miktarların indekslerini kullanarak yılı, ayı, günü, saati, dakikayı ve saniyeyi çıkaracağız. Bundan sonra, doğum günü_dosyasını okuma modunda bir 'birthday_file' nesnesinde açacağız, böylece sadece okuyabileceğiz. Şimdi bu dosyanın tüm satırlarını satır listesine kaydedeceğiz. 'doğum günü_dosyası.readlines()', her satırı 'satırlar' listesine kaydeder. Bundan sonra doğum günü_dosyasını 'birthday_file' kullanarak kapatacağız.kapat()' işlevi.

Şimdi for döngüsünü kullanarak her satırı tek tek okuyacağız. Her satırda 'birthday_file' içinde yalnızca bir kişinin verileri mevcuttur, bu nedenle bu döngüde bir seferde yalnızca bir kişinin verilerini okuyoruz.

Bundan sonra, doğum tarihini, e-posta adresini ve RE modülünü kullanan kişinin adını çıkaracağız. Tarihi aşağıdaki formatta yazdığımız gibi

YYYY-AA-GG

Bu yüzden, satırda bu formatı bulan düzenli bir 'dateEx' ifadesi yapacağız.

yeniden.derleme(r”\d4-\d2-\d2”)

Yukarıdaki komut, '4 hane' ve ardından '-', ardından '2 hane' ve ardından '-' ve '2 hane' olan bir dize bulun. Bu bize kişinin doğum tarihini verecek, bu yüzden bu ifadeden doğum_günü ve doğum_ayı çıkaracağız.

Benzer şekilde, normal ifadeler kullanarak e-posta adresini bulacağız. Bundan sonra, doğum günü_ayı ve geçerli_ayı ve doğum günü_gününü ve geçerli_gününü karşılaştıracağız. Bu koşullar yerine getirilirse, doğum günü e-postasını 'send_mail' işlevini kullanarak tam olarak '08:00'de göndeririz.

Komut Dosyasını Cronjob ile Otomatik Olarak Çalıştırma

Şimdi bu python betiğinin her seferinde çalıştığından emin olacağız. Bunu yapmak için bu görevi crontab'a ekleyeceğiz. Linux'ta Crontab, görevleri otomatik olarak gerçekleştirmek için kullanılır. Yapmamız gereken sadece görevi crontab'a eklemek. Bunu yapmak için verilen adımları izleyin.

  1. Aşağıdaki komutu kullanarak terminalinize görev eklemek için crontab'ı açın
[e-posta korumalı]:~$ crontab -e
  1. Bu dosyanın sonunda # olmadan aşağıdaki komutu girin
@reboot python path_to_the_script

Yukarıdaki komutlar, sisteminizi her yeniden başlattığınızda sisteminizin python betiğini çalıştırmasını sağlayacaktır. Bu sayede sisteminiz her açıldığında python betiğini çalıştıracaktır.

Control & manage mouse movement between multiple monitors in Windows 10
Dual Display Mouse Manager lets you control & configure mouse movement between multiple monitors, by slowing down its movements near the border. Windo...
WinMouse lets you customize & improve mouse pointer movement on Windows PC
If you want to improve the default functions of your mouse pointer use freeware WinMouse. It adds more features to help you get the most out of your h...
Mouse left-click button not working on Windows 10
If you are using a dedicated mouse with your laptop, or desktop computer but the mouse left-click button is not working on Windows 10/8/7 for some rea...