Pyton

Wysyłanie e-maili za pomocą Pythona

Wysyłanie e-maili za pomocą Pythona
Wysyłanie, sprawdzanie i odpowiadanie na e-maile to czasochłonne zadanie, zwłaszcza gdy robisz to dla dużej liczby osób lub klientów, gdzie wystarczy zmienić imię i nazwisko odbiorcy, adres, wiek i inne drobiazgi. Byłoby bardzo trudnym zadaniem napisanie programu, który poradziłby sobie ze wszystkimi typami Twoich osobistych/biznesowych e-maili, ale nadal możesz zautomatyzować wiele rzeczy w tym zakresie, co ostatecznie pozwoli Ci zaoszczędzić dużo czasu.

Na przykład chcesz wysłać klientom przypomnienie o pozostałych rachunkach, a wszystkie dane dotyczące klientów, takie jak ich numery telefonów, adres, wiek itp., znajdują się w arkuszu programu Excel lub w bazie danych, a następnie zamiast robić to ręcznie, możesz napisać prosty program w Pythonie, który automatycznie zrobi to za Ciebie. W tym samouczku dowiemy się, jak działa protokół poczty e-mail i jak zautomatyzować ten proces, aby zaoszczędzić cenny czas.

Słowo o SMTP

Simple Mail Transfer Protocol (SMTP) jest skomputeryzowanym odpowiednikiem Twojej usługi pocztowej. Jest to protokół, który działa w warstwie aplikacji sieci TCP/IP. Jest to standardowy protokół wysyłania i odbierania wiadomości e-mail przez Internet. Proces przesyłania poczty składa się z serwerów pocztowych i klientów wysyłających i odbierających wiadomości e-mail do siebie nawzajem.

Na przykład masz konto GMAIL i chcesz wysłać e-mail do znajomego na jego koncie YAHOOOO. Piszesz e-mail i klikasz wyślij, ale proces zaplecza jest trochę skomplikowany i aby zrozumieć ten proces, musisz najpierw zrozumieć SMTP. Twój klient poczty e-mail SMTP wysyła jako pierwszy HELO (lub EHLO) na serwer GMAIL, możesz powiedzieć, że to polecenie lub nagłówek jest równoważny Gospodarz nagłówka w protokole HTTP i służy do identyfikacji serwera po nazwie domeny. Po HELO lub EHLO klient uwierzytelnia się na serwerze za pomocą podanej nazwy użytkownika i hasła, używając AUTH Komenda. Następnie określa adres e-mail nadawcy i odbiorcy, a następnie treść wiadomości i wysyła e-mail na serwer GMAIL. Serwer GMAIL najpierw potwierdzi, czy adres e-mail odbiorcy w YAHOO istnieje, czy nie, a następnie wyśle ​​e-mail do serwera YAHOO, z którego odbiorca może pobrać swoje e-maile.

SMTPLIB

SMTPLIB to biblioteka Pythona, która może być używana jako klient SMTP, podobnie jak GMAIL, YAHOO, Thunderbird lub dowolny inny klient poczty e-mail i może być używana do wysyłania wiadomości e-mail. Możemy wykonać wszystkie zadania za pomocą klienta SMTPLIB, które możemy wykonać z tymi posiadającymi graficzny interfejs użytkownika.

Jest on domyślnie dostępny w Pythonie, jeśli go nie masz, możesz zainstalować za pomocą następującego polecenia.

[ochrona poczty e-mail]:~$ pip zainstaluj smtplib

LUB w Pythonie3

[ochrona poczty e-mail]:~$ pip zainstaluj smtplib

Pisanie pierwszego e-maila w Pythonie

W tym samouczku będę używał konta GMAIL jako nadawcy, będę również korzystał z konsoli Pythona, więc będzie mi łatwiej wyjaśnić krok po kroku każdą linię kodu. Aby rozpocząć, musimy zezwolić naszemu Gmailowi ​​na dostęp do mniej bezpiecznych aplikacji.

Więc zaloguj się na swoje konto GMAIL, a następnie przejdź do ustawień konta.

Teraz upewnij się, że dostęp dla mniej bezpiecznych aplikacji jest włączony.

Teraz otwórz konsolę Pythona i zacznij pisać swój pierwszy e-mail za pomocą Pythona

[ochrona poczty e-mail]:~$ python
Pyton 2.7.16 (domyślnie, 7 października 2019, 17:36:04)
[RWP 8.3.0] na linux2

Wpisz „pomoc”, „prawa autorskie”, „kredyty” lub „licencja”, aby uzyskać więcej informacji.

//importuj bibliotekę SMTP
>>> importuj plik smtplib
//połącz się z serwerem GMAIL z nazwą domeny i numerem portu (to ustawienie jest inne dla
każdego dostawcy poczty e-mail, spójrz na poniższą tabelę)
>>> mailobj = smtplib.SMTP('smtp.gmail.com',587)
//przywitaj się z serwerem
>>> mailobj.ehlo()
(250, 'smtp.gmail.com do usług, [103.255.4.246]\nSIZE35882577\n8BITMIME\nSTARTTLS\
nKODY STATUSU ZAAWANSOWANEGO\nPIPELINING\nCHUNKING\nSMTPUTF8')
//Port 587 oznacza, że ​​używamy szyfrowanego połączenia TLS, więc uruchom szyfrowany TLS
komunikacja za pomocą starttls(), dzięki czemu nasze dane uwierzytelniające i komunikaty nie zostaną podsłuchane
>>> mailobj.starttls()
(220, '2.0.0 Gotowy do uruchomienia TLS')
//zaloguj się do swojego konta GMAIL przy użyciu adresu e-mail i hasła
>>> mailobj.login('[email chroniony]','s3cr3t_p4ssw0rd')
(235, '2.7.0 Akceptowane”)
//podaj adres e-mail nadawcy i odbiorcy oraz treść e-maila
>>> mailobj.sendmail('[email chroniony]','[email chroniony]','Temat:
Witaj świecie! \n Witaj świecie! to jest mój pierwszy e-mail hello world w Pythonie')

// zamknij połączenie z serwerem GMAIL
>>> mailobj.porzucić()
(221, '2.0.0 połączenie zamykające b6sm4519863lfi.72 - gsmtp')

W powyższym przykładowym programie zamień podaną treść na własną. Jeśli nie jesteś użytkownikiem GMAIL, możesz użyć serwera poczty e-mail swojego dostawcy. Oto lista nazw domen i portów niektórych popularnych dostawców poczty.

Nazwa Nazwa domeny serwera Port
Gmail smtp.gmail.com 587
Outlook / Hotmail poczta smtp.perspektywy.com 587
Poczta Yahoo smtp.Poczta.wieśniak.com 587
Verizon smtp.werizonie.netto 465
Comcast smtp.comcast.netto 587

Kilka słów o IMAP

Tak więc właśnie zbadaliśmy, że SMTP jest używany do wysyłania e-maili, ale czym jest IMAP (Internet Access Messaging Protocol)? SMTP nie może być używany do wyszukiwania i pobierania wiadomości e-mail z serwera, do tego celu używany jest protokół IMAP lub POP3.

IMAPCLIENT, IMAPLIB i PYZMAIL

Istnieją dwie główne biblioteki w Pythonie, które mogą być używane jako klient IMAP do wyszukiwania, pobierania i usuwania wiadomości e-mail z serwera pocztowego. Python ma domyślnie imaplib biblioteka, ale inna biblioteka zewnętrzna imaplient jest bardziej efektywny i łatwy w użyciu. W tym samouczku użyjemy imaplient pobierać e-maile z serwera pocztowego.

Problem z imaplient polega na tym, że pobiera wiadomości e-mail z serwera pocztowego w surowym formacie. Więc będziemy potrzebować pyzmail biblioteka jako parser dla przyjaznego dla użytkownika wyjścia. Aby zainstalować obie biblioteki, wpisz

[ochrona poczty e-mail]:~$ sudo pip zainstaluj imapclient
[ochrona poczty e-mail]: ~ $ sudo pip zainstaluj pyzmail

Pobieranie wiadomości e-mail z serwera pocztowego

Teraz dowiemy się, jak wyszukiwać i pobierać e-maile z serwera pocztowego za pomocą imapclient. Użyjemy imapclient do wyszukiwania i pobierania wiadomości e-mail z serwera, a następnie użyjemy pyzmaila do przetworzenia nieprzetworzonej treści. chodźmy

// importuj bibliotekę imapclient
>>> importuj imapclient
// Połącz się z serwerem IMAP Gmaila
>>> obj = imapclient.IMAPClient('imap.gmail.com',ssl=prawda)
// Zaloguj się na swoje konto e-mail przy użyciu swoich danych logowania
>>> obj.login('[email chroniony]','s3cr4tp4ss')
„[e-mail chroniony] uwierzytelniony (sukces)”
// Wybierz folder wiadomości do przeczytania i.e SKRZYNKA ODBIORCZA, PROJEKTY, WYSŁANE e-maile
>>> obj.select_folder('INBOX', readonly=True)
'EXISTS': 830, 'PERMANENTFLAGS': (), 'HIGHESTMODSEQ': 112999, 'UIDNEXT': 931,
'FLAGI': ('\\Answered', '\\Flagged', '\\Draft', '\\Deleted', '\\Seen',
'$NotPhishing', '$Phishing'), 'UIDVALIDITY': 1, 'TYLKO DO ODCZYTU': ["], 'OSTATNIO': 0
// Przeszukaj swoje wiadomości w skrzynce odbiorczej lub zastosuj filtr, poniżej pojawi się filtr
Ci maile otrzymane po 25.10.2019
>>> identyfikatory_e-mail = obj.search(['SINCE', '25.10.2019'])
>>> identyfikatory_e-mail
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Lista „mail_ids” zawiera listę identyfikatorów e-mail otrzymanych od 25 października 2019 r,
możesz pobrać wiadomość e-mail za pomocą funkcji pobierania imapclient.
>>> surowa_poczta = obj.fetch([919],['BODY[]';'FLAGI'])
// Teraz zawartość zmiennej raw_mail jest w formacie raw, nie można jej wyświetlić na
screen bezpośrednio, więc potrzebowalibyśmy parsera, aby przeanalizować tę zawartość w celu uzyskania przyjaznego dla użytkownika wyniku
>>> importuj pyzmail
>>> wiadomość = pyzmail.PyzMessage.fabryka(poczta_surowa[919]['BODY[]'])
// Teraz e-mail jest analizowany i przechowywany w zmiennej wiadomości, aby uzyskać temat
e-mail, użyj funkcji get_subject
>>> wiadomość.pobierz_temat()
u'Ubierz swoje umiejętności w te Halloween z 25% zniżką'
// Podobnie możesz zobaczyć dane nadawcy
>>> wiadomość.pobierz_adresy('z')
[(u'Usama Azad', '[email chroniony]')]
>>> wiadomość.pobierz_adresy('do')
[(u'[email chroniony]', '[email chroniony]')]
// Aby uzyskać treść wiadomości e-mail, wpisz
>>> wiadomość.część_tekstowa.get_payload().dekodować (wiadomość.część_tekstowa.zestaw znaków)
Cześć! Ciesz się mieszkaniem 25% na naszych kursach premium”

Jeśli masz konto u innego dostawcy usług poczty e-mail innego niż GMAIL, możesz zalogować się na jego serwer IMAP. Oto lista nazw domen IMAP niektórych znanych dostawców poczty.

Dostawca Nazwa domeny dla serwera IMAP
WIEŚNIAK imap.Poczta.wieśniak.com
Hotmail/Outlook imap-mail.perspektywy.com
Verizon przychodzący.werizonie.netto
Comcast imap.comcast.netto
AT&T imap.Poczta.att.netto

Usuwanie wiadomości e-mail z serwera IMAP

Podobnie jak w przypadku wyszukiwania i pobierania wiadomości e-mail z serwera, możesz również usuwać wiadomości e-mail z serwera pocztowego za pomocą ich uid. Wystarczy postępować zgodnie z podanymi krokami

// Aby usunąć wiadomość e-mail, musisz ustawić tylko do odczytu na „Fałsz”, aby uzyskać dostęp do zapisu na swoim
e-maile
>>> obj.select_folder('INBOX', readonly=False)
>>> identyfikatory_e-mail = obj.search(['SINCE', '25.10.2019'])
>>> identyfikatory poczty
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
 
// Podaj uid e-mail lub listę uid e-mail, po uruchomieniu poniższego polecenia,
Twój e-mail zniknie z INBOX.
>>> obj.usuń_wiadomości(919)
919: ('\\Widoczne', '\\Usunięte')
 
// To polecenie trwale usunie twoje e-maile z serwera pocztowego
>>> obj.wykreślić()
('Sukces', [])

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

Tworzenie własnego przypomnienia o urodzinach

Masz urodziny swoich znajomych w najbliższych miesiącach i chcesz złożyć im życzenia urodzinowe. Ale masz dużo pracy w swoim biurze i istnieje możliwość, że zapomnisz ich życzyć. Więc to zadanie może być wykonane automatycznie za pomocą Pythona. Poniżej znajduje się kod do wykonania tego zadania.

// importowanie modułów
importuj ponownie
// moduł os służy do wykonywania zadań systemu operacyjnego i.e dostęp do katalogów
importuj system
importuj datę i godzinę
importuj smtplib
 
// zdefiniowanie funkcji, która będzie wysyłała e-maile
def send_mail(adres_e-mail_odbiorcy, imię):
sender_mail_address = "[email chroniony]"
passwd = "hasło nadawcy"
//połączenie z serwerem Gmail z nazwą domeny i numerem portu
obj = smtplib.SMTP('smtp.gmail.com”, 587)
obiekt.ehlo()
obiekt.starttls()
// logowanie do konta gmail
obiekt.login(sender_mail_address, passwd)
// wysyłanie poczty na adres 'reciever_mail_address'.
obiekt.sendmail(sender_mail_address, reciever_mail_address, "Temat: Mail z życzeniami urodzin\n\n HappyBirthday "+name)
// kończę połączenie
obiekt.porzucić()
// Główny korpus
// przejście do katalogu, w którym znajduje się plik zawierający dane
os.chdir("ścieżka_do_pliku_danych_urodzin")
podczas gdy 1:
// pobieranie daty i czasu chwili obecnej
dzisiaj = data/godzina.data i godzina.dzisiaj()
dzisiaj = str(dzisiaj)
// pobieranie bieżącego roku, miesiąca, dnia, godziny, minuty i sekundy
bieżący_rok = dzisiaj[0:4]
bieżący_miesiąc = dzisiaj[5:7]
bieżący_dzień = dzisiaj[8:10]
bieżąca_godzina = dzisiaj[11:13]
bieżąca_minuta = dzisiaj[14:16]
current_sec = dzisiaj[17:19]
// otwieranie pliku urodzin w obiekcie 'birthday_file' w trybie odczytu
plik_urodzin = otwórz('plik_urodzin','r')
// zapisanie wszystkich linii 'birthday_file' na liście linii
linie = plik_urodzin.readlines()
// zamknięcie obiektu 'birthday_file''
plik_urodziny.blisko()
// czytanie każdej linii za pomocą pętli for
dla linii w liniach:
// tworzenie wyrażenia regularnego w celu znalezienia daty w 'birthday_file'
dataEx = re.kompiluj(r"\d4-\d2-\d2")
findDate=dataEx.szukaj(wiersz)
data = znajdźDatę.Grupa()
// pobieranie miesiąca_urodzin i dnia_urodzin z pliku
miesiąc_urodzin = data[5:7]
dzień_urodzin = data[8:10]
// tworzenie wyrażenia regularnego, aby znaleźć adres e-mail z pliku_urodzin
mailEx = re.kompiluj(r"\w*@\w*.pl")
findMail = pocztaEx.szukaj(wiersz)
odbiorca_mail = znajdźPocztę.Grupa()
//tworzenie wyrażenia regularnego, aby znaleźć imię osoby
nazwaEx = re.kompiluj(r"\w*")
findName = nazwaEx.szukaj(wiersz)
nazwa = znajdźNazwę.Grupa()
// sprawdzanie czy ktoś ma urodziny czy nie
if bieżący_miesiąc == urodziny_miesiąc i =bieżący_dzień == urodziny_dzień:
// wysłanie maila dokładnie o 08:00
if bieżąca_godzina == '08' i bieżąca_minuta == '00' i bieżąca_s == '00':
// wywołanie funkcji 'send_mail'
send_mail(recever_mail, imię)

Teraz tworzymy 'plik_urodzinowy', w którym zapisujemy imiona, adresy e-mail i ich datę urodzenia. To jest prosty plik tekstowy i wygląda tak.

Wyjaśnienie

Przeczytamy ten plik za pomocą skryptu python i sprawdzimy, czyje urodziny nadchodzą i życzymy im. Przede wszystkim zaimportujemy niektóre moduły. Moduł DATETIME posiada funkcje, które podają nam aktualną datę i godzinę oraz wiele innych. Ale użyjemy tego tylko do znalezienia aktualnej daty i godziny. Moduł SMTPLIB służy do wysyłania poczty i został wyjaśniony powyżej. Moduł RE posiada funkcje, które służą do znajdowania wyrażenia regularnego z ciągu znaków.

W tym skrypcie definiujemy funkcję 'send_mail', która wysyła pocztę na adres 'reciever_mail_address', którego nazwa to 'name'. Oba argumenty są przekazywane do funkcji z głównego ciała msg. W głównej części skryptu zobaczymy, jak znajdujemy 'reciever_mail_address' i 'name'.

Wysyłanie e-maili za pomocą smtplib zostało wyjaśnione powyżej, więc możesz je przeczytać i nie będzie tutaj omawiane.

W głównym ciele przechodzimy do katalogu, w którym zapisaliśmy 'birthday_file' za pomocą 'os.chdir()'. Następnie mamy pętlę while, która zawsze jest prawdziwa, więc będzie stale sprawdzać urodziny. Teraz otrzymujemy aktualną datę i godzinę i zapisujemy ją w zmiennej „dzisiaj”. To wygląda tak.

2019-11-01 16:19:07.144925

Wyodrębnimy rok, miesiąc, dzień, godzinę, minuty i sekundy za pomocą wskaźników tych wielkości. Następnie otworzymy plik_urodzinowy w obiekcie 'plik_urodzinowy' w trybie odczytu, więc możemy go tylko odczytać. Teraz zapiszemy wszystkie wiersze tego pliku na liście wierszy. 'plik_urodzinowy.readlines()' zapisze każdą linię na liście 'lines'. Następnie zamkniemy plik_urodzin za pomocą „plik_urodzin”.funkcja close()'.

Teraz przeczytamy każdą linię po kolei za pomocą pętli for. W każdym wierszu dostępne są tylko dane jednej osoby w pliku 'birthday_file', więc w tej pętli odczytujemy dane tylko jednej osoby na raz.

Następnie wyodrębnimy datę urodzenia, adres e-mail i imię osoby korzystającej z modułu RE. Jak zapisaliśmy datę w następującym formacie

RRRR-MM-DD

Utworzymy więc wyrażenie regularne 'dateEx', które znajdzie ten format w wierszu.

re.kompiluj(r”\d4-\d2-\d2”)

Powyższe polecenie znajdź ciąg, który ma „4 cyfry”, po których następuje „-”, a następnie „2 cyfry”, a następnie „-” i „2 cyfry”. To da nam datę urodzenia osoby, więc z tego wyrażenia wyodrębnimy dzień_urodzenia i miesiąc_urodzenia.

Podobnie znajdziemy adres e-mail za pomocą wyrażeń regularnych. Następnie porównamy urodziny_miesiąc i bieżący_miesiąc oraz urodziny_dzień i bieżący_dzień. Jeśli te warunki są spełnione, wyślemy wiadomość urodzinową za pomocą funkcji „send_mail” dokładnie o godzinie „08:00”.

Automatyczne uruchamianie skryptu przez Cronjob

Teraz upewnimy się, że ten skrypt Pythona będzie działał za każdym razem. W tym celu dodamy to zadanie do crontab. Crontab w Linuksie służy do automatycznego wykonywania zadań. Musimy tylko dodać zadanie do crontab. Aby to zrobić, wykonaj podane kroki.

  1. Otwórz crontab, aby dodać zadanie w terminalu za pomocą następującego polecenia
[email chroniony]:~$ crontab -e
  1. Na końcu tego pliku wpisz następujące polecenie bez #
@reboot Pythona ścieżka_do_skryptu

Powyższe polecenia umożliwią Twojemu systemowi uruchomienie skryptu Pythona za każdym razem, gdy ponownie uruchomisz system. W ten sposób twój system będzie uruchamiał skrypt Pythona za każdym razem, gdy twój system jest włączony.

Gry Jak używać AutoKey do automatyzacji gier Linux
Jak używać AutoKey do automatyzacji gier Linux
AutoKey to narzędzie do automatyzacji pulpitu dla systemów Linux i X11, zaprogramowane w Python 3, GTK i Qt. Korzystając ze skryptów i funkcji MAKRO, ...
Gry How to Show FPS Counter in Linux Games
How to Show FPS Counter in Linux Games
Linux gaming got a major push when Valve announced Linux support for Steam client and their games in 2012. Since then, many AAA and indie games have m...
Gry How to download and Play Sid Meier's Civilization VI on Linux
How to download and Play Sid Meier's Civilization VI on Linux
Introduction to the game Civilization 6 is a modern take on the classic concept introduced in the series of the Age of Empires games. The idea was fai...