Wysyłanie e -maili z Python

Wysyłanie e -maili z Python
Wysyłanie, sprawdzanie i odpowiadanie na e -maile to zadanie czasochłonne, zwłaszcza gdy robisz to dla dużej liczby osób lub klientów, w których musisz po prostu zmienić nazwę, adres, adres i inne rzeczy odbiorcy. Byłoby to bardzo trudne zadanie napisanie programu, który poradziłby sobie z wszystkimi rodzajami e -maili osobistych/biznesowych, ale nadal możesz zautomatyzować wiele rzeczy w tym zakresie, które ostatecznie zaoszczędzą dużo czasu.

Na przykład chcesz wysłać do klientów przypomnienie o pozostałych rachunkach i masz wszystkie dane związane z klientami, takie jak ich numery, adres, wiek itp. Prosty program w Python, aby automatycznie to za Ciebie zrobić. W tym samouczku dowiemy się, jak działa protokół e -mail i jak możesz zautomatyzować proces, aby zaoszczędzić swój cenny czas.

Słowo o SMTP

Prosty protokół transferu poczty (SMTP) jest skomputeryzowany odpowiednik Twojej usługi pocztowej. Jest to protokół, który działa na 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 e -mail i klientów wysyłających i odbierających e -maile do siebie.

Na przykład masz konto Gmail i chcesz wysłać wiadomość e -mail do swojego przyjaciela na jego koncie Yahoo. Piszesz wiadomość e -mail i naciśnij Wyślij, ale proces zaplecza jest trochę skomplikowany, a aby zrozumieć ten proces, najpierw będziesz musiał zrozumieć SMTP. Twój klient e -mail SMTP najpierw wysyła Helo (Lub Ehlo) Na serwerze Gmaila można powiedzieć, że to polecenie lub nagłówek jest równoważne Gospodarz nagłówek w protokole HTTP i służy do identyfikacji serwera za pomocą nazwy domeny. Po Helo lub Ehlo klient uwierzytelnia się na serwer za pomocą podanej nazwy użytkownika i hasła za pomocą Auth Komenda. Następnie określa adres e -mail nadawcy i odbiorcy, a następnie ciało wiadomości i wysyła e -mail na serwer Gmail. Serwer Gmaila najpierw potwierdzi, że to, czy adres e -mail odbiorcy na Yahoo istnieje, czy nie, wówczas wyśle ​​wiadomość e -mail na serwer Yahoo, na którym odbiorca może odzyskać swoje e -maile z.

Smtplib

Smtplib to biblioteka Python, która może być używana jako klient SMTP, tak jak Twój Gmail, Yahoo, Thunderbird lub jakikolwiek inny klient e -mail i może być używany do wysyłania e -maili. Możemy wykonywać wszystkie zadania za pomocą klienta SMTPLIB, które możemy zrobić z tymi, które mają graficzny interfejs użytkownika.

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

Ubuntu@ubuntu: ~ $ pip instaluj smtplib

Lub w Python3

Ubuntu@ubuntu: ~ $ pip instaluj smtplib

Pisanie pierwszego e -maila z Pythonem

W tym samouczku użyję konta Gmail jako nadawcy, będę także korzystać z konsoli Python, więc łatwiej będzie mi wyjaśnić każdą wiersz kodu krok po kroku. Aby rozpocząć, musimy umożliwić nasz dostęp Gmaila do mniej bezpiecznych aplikacji.

Zaloguj się więc na swoje konto Gmail, a następnie przejdź do ustawień konta.

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

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

Ubuntu@ubuntu: ~ $ Python
Python 2.7.16 (domyślnie, 7 października 2019, 17:36:04)
[GCC 8.3.0] na Linux2

Wpisz „Pomoc”, „Copyright”, „Kredyty” lub „Licencja”, aby uzyskać więcej informacji.

// Zaimportuj bibliotekę SMTP
>>> Importuj smtplib
// Podłącz się do serwera Gmaila z nazwą domeny i numerem portu (to ustawienie różni się dla
Każdy dostawca e -maila, spójrz na stół podany poniżej)
>>> MailObj = smtplib.SMTP ('SMTP.Gmail.com ', 587)
// przywitaj się z serwerem
>>> MailObj.ehlo ()
(250, SMTP.Gmail.com w Twojej służbie [103.255.4.246] \ nsize35882577 \ n8bitmime \ nstarttls \
nenhancedStatuscodes \ npipelining \ nchunking \ nsmtputf8 ')
// Port 587 oznacza, że ​​używamy zaszyfrowanego połączenia TLS, więc rozpocznij szyfrowane TLS
Komunikacja za pomocą startutls (), aby nasze poświadczenia i wiadomości nie zostały wąchane
>>> MailObj.starttls ()
(220, 2.0.0 Gotowy do rozpoczęcia TLS ')
// Zaloguj się do konta Gmail za pomocą wiadomości e -mail i hasła
>>> MailObj.login („[email protected] ', „s3cr3t_p4ssw0rd”)
(235, 2.7.0 zaakceptowane ')
// Podaj adres e -mail i treści e -mail nadawcy i odbiorcy
>>> MailObj.sendmail („[email protected] ', „[email protected] ', „Temat:
Witaj świecie! \ n Hello World! To jest mój pierwszy e -mail Hello World w Python ')

// Zamknij połączenie z serwerem Gmaila
>>> MailObj.zrezygnować()
(221, 2.0.0 Połączenie zamykania B6SM4519863LFI.72 - GSMTP ')

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

Nazwa Nazwa domeny serwera Port
Gmail SMTP.Gmail.com 587
Outlook / Hotmail SMTP-MAIL.perspektywy.com 587
Poczta Yahoo SMTP.Poczta.wieśniak.com 587
Verizon SMTP.Verizon.internet 465
Comcast SMTP.Comcast.internet 587

Kilka słów o IMAP

Właśnie przestudiowaliśmy, że SMTP służy do wysyłania e -maili, ale do czego służy IMAP (protokół przesyłania wiadomości internetowych)? SMTP nie może być używane do wyszukiwania i otrzymywania wiadomości e -mail z serwera, w tym celu używany jest protokół IMAP lub POP3.

Imapclient, imaplib i pyzmail

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

Problem z imapclient jest to, że pobiera e -maile z serwera pocztowego w formacie RAW. Więc potrzebujemy PyZmail Biblioteka jako parser dla przyjaznego użytkownika. Aby zainstalować obie biblioteki, wpisz

Ubuntu@ubuntu: ~ $ sudo pip instaluj imapclient
Ubuntu@ubuntu: ~ $ sudo pip instaluj pyzmail

Uzyskiwanie wiadomości e -mail z serwera pocztowego

Teraz dowiemy się, jak wyszukiwać i pobierać pocztę e -mail z serwera pocztowego za pomocą ImapClient. Użyjemy imapclient do wyszukiwania i pobierania wiadomości e -mail z serwera, a następnie użyjemy PyZmail, aby przeanalizować tę surową zawartość. Let

// Importuj bibliotekę imapclient
>>> Importuj imapclient
// Połącz się z serwerem IMAP Gmail
>>> obj = imapclient.Imapclient („imap.Gmail.com ', ssl = true)
// zaloguj się do konta e -mail za pomocą poświadczeń
>>> obj.Login („[email protected] ', „s3cr4tp4ss”)
[email protected] Authentited (Success) '
// Wybierz folder wiadomości, aby przeczytać i.e skrzynka odbiorcza, szkice, wysyłane maile
>>> obj.Select_Folder („skrzynia odbiorcza”, ReadOnly = true)
„IsteS”: 830, „PermanentFlags”: (), „najwyższy sens”: 112999, „UIdNext”: 931,
„Flagi”: („\\ odpowiedzi”, „\\ flagged”, „\\ draft”, „\\ usunted”, „\\ widzi”,,
„$ Notphishing”, „$ phishing”), „uidValididge”: 1, „tylko odczyt”: ["],„ najnowszy ”: 0
// Wyszukaj wiadomości w skrzynce odbiorczej lub zastosuj filtr, wyświetli się poniżej filtr
Ty wiadomości otrzymane po 25-października-2019
>>> Mail_ids = obj.Wyszukaj ([„od”, '25 -Ct-2019 '])
>>> Mail_ids
[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,
Możesz pobrać wiadomość e -mail za pomocą funkcji ImapClient Fetch.
>>> raw_mail = obj.fetch ([919], [„body []”, „flagi”])
// Teraz zawartość zmiennej RAW_mail jest w formacie RAW, nie można jej wyświetlić na
ekran bezpośrednio, więc potrzebowalibyśmy parsera, aby przeanalizować tę zawartość dla przyjaznego użytkownika
>>> Importuj PyZmail
>>> wiadomość = pyzmail.Pyzmessage.Fabryka (Raw_mail [919] [„Body [] '])
// teraz e -mail jest analizowany i przechowywany w zmiennej wiadomości, aby uzyskać temat
e -mail, użyj funkcji get_subject
>>> Wiadomość.get_subject ()
Udostępnij swoje umiejętności w tym Halloween z 25% zniżki
// Podobnie możesz zobaczyć dane nadawcy
>>> Wiadomość.get_addresses („from”)
[(u'usama azad ”,„ [email protected] ')]
>>> Wiadomość.get_addresses („to”)
[(U'[email protected] ', „[email protected] ')]
// Aby uzyskać treść e -maila, wpisz
>>> Wiadomość.Text_part.get_payload ().dekoduj (wiadomość.Text_part.bajki)
u ”Cześć! Ciesz się płaskim 25% na naszych kursach premium ”

Jeśli masz konto w innym dostawcy usług e -mailowych innych niż Gmail, możesz zalogować się na serwerze IMAP. Oto lista nazwy domeny 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ące.Verizon.internet
Comcast imap.Comcast.internet
AT&T imap.Poczta.att.internet

Usuwanie wiadomości e -mail z serwera IMAP

Podobnie jak wyszukiwanie i pobieranie wiadomości e -mail z serwera, możesz również usuwać wiadomości e -mail z serwera pocztowego za pomocą ich UID. Po prostu wykonaj podane kroki

// Aby usunąć wiadomość e -mail, musisz przekształcić odczyt tylko do „Fałsz”, aby uzyskać dostęp do zapisu do swojego
e -maile
>>> obj.Select_Folder („skrzynia odbiorcza”, ReadOnly = false)
>>> Mail_ids = obj.Wyszukaj ([„od”, '25 -Ct-2019 '])
>>> Mail_ids
[919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 930]
// Podaj UID e -mail lub listę UD e -mail, po uruchomieniu poniżej polecenia,
Twój e -mail zniknie z skrzynki odbiorczej.
>>> obj.delete_messages (919)
919: („\\ widzi”, '\\ usunted')
// To polecenie trwale usunie twoje e -maile z serwera pocztowego
>>> obj.wykreślić()
('Powodzenie', [])

https: // techtopz.com/build-a-birthday-Reminder-Application-in-Python-on-on-Mac/

Wykonaj własne przypomnienie urodzinowe

Masz urodziny swoich przyjaciół w nadchodzących miesiącach i chcesz życzyć im w urodzinach. Ale masz dużo pracy w swoim biurze i istnieje możliwość, że zapomnisz ich życzyć. Więc to zadanie można automatycznie wykonać za pomocą Pythona. Poniżej znajduje się kod do wykonania tego zadania.

// Importowanie modułów
import re
// moduł OS służy do wykonywania zadań systemu operacyjnego i.e Dostęp do Direcotories
Import OS
Importuj datetime
Importuj smtplib
// definiowanie funkcji, która będzie wysyłała wiadomości e -mail
def send_mail (reviever_mail_address, nazwa):
sender_mail_address = "[email protected] "
PASSWD = "sendlerPassWd"
// Łączenie z serwerem Gmaila z nazwą domeny i numerem portu
obj = smtplib.SMTP ('SMTP.Gmail.com ', 587)
obj.ehlo ()
obj.starttls ()
// logowanie na konto Gmail
obj.login (sender_mail_address, passwd)
// Wysyłanie poczty do „revever_mail_address”.
obj.sendmail (sender_mail_address, Reciever_mail_Address, „Temat: urodzinowe życzenie pocztę \ n \ n happybirthday”+nazwa)
// Zakończenie połączenia
obj.zrezygnować()
// Główny korpus
// przejście do katalogu, w którym plik zawierający dane są obecne
OS.CHDIR („PATH_TO_BIRTHDAY_DATA_FILE”)
podczas gdy 1:
// Uzyskanie daty i godziny obecnej chwili
Dzisiaj = DateTime.Datetime.Dzisiaj()
Dzisiaj = Str (dzisiaj)
// Uzyskanie bieżącego roku, miesiąca, dnia, godziny, minuty i drugiego
current_year = dzisiaj [0: 4]
current_month = dzisiaj [5: 7]
current_day = dzisiaj [8:10]
current_hour = dzisiaj [11:13]
current_minute = dzisiaj [14:16]
current_sec = dzisiaj [17:19]
// Otwieranie pliku urodzinowego w obiekcie „urodzin_file” w trybie odczytu
urodziny_file = Open („urodziny_file”, „r”)
// Zapisanie wszystkich wierszy „Birthday_file” na liście linii
Linie = Birthday_file.ReadLines ()
// zamykanie obiektu „urodziny_file”
Birthday_file.zamknąć()
// Odczyt każdego wiersza za pomocą pętli
dla linii w liniach:
// wykonanie wyrażenia regularnego, aby znaleźć datę w „Birthday_file”
dateex = re.Compile (r "\ d 4-\ d 2-\ d 2")
findDate = DateEx.Wyszukaj (wiersz)
Data = FindDate.Grupa()
// Otrzymanie urodzin_month i urodzin_day z pliku
urodziny_month = data [5: 7]
urodziny_day = data [8:10]
// wykonanie wyrażenia regularnego, aby znaleźć adres pocztowy z urodzin_file
MailEx = re.kompila (r "\ w*@\ w*.com ”)
FindMail = MailEx.Wyszukaj (wiersz)
Reciever_mail = FindMail.Grupa()
// wyrażanie wyrażenia regularnego, aby znaleźć nazwisko osoby
NameEx = re.kompila (r "\ w*")
FindName = nameEx.Wyszukaj (wiersz)
name = FindName.Grupa()
// Sprawdzanie, czy czyjeś urodziny nadchodzą, czy nie
Jeśli current_month == urodziny_month i = current_day == urodziny_day:
// wysyłanie poczty o dokładnie 08:00
Jeśli current_hour == '08' i current_minute == '00' i current_sec == '00':
// wywoływanie funkcji „send_mail”
send_mail (reviever_mail, nazwa)

Teraz tworzymy „plik urodzinowy”, w którym zapisujemy nazwiska, adresy e -mail i ich datę urodzenia. To jest prosty plik tekstowy i wygląda tak.

Wyjaśnienie

Przeczytamy ten plik za pomocą skryptu Pythona i sprawdzimy, czyje urodziny nadchodzą i życzę im. Przede wszystkim zaimportujemy niektóre moduły. Moduł DateTime ma funkcje, które dają nam aktualną datę i godzinę i wiele innych. Ale użyjemy tego tylko do znalezienia bieżącej daty i godziny. Moduł SMTPLIB służy do wysyłania poczty i został wyjaśniony powyżej. Moduł Re ma funkcje używane do znalezienia wyrażenia regularnego z ciągu.

W tym skrypcie definiujemy funkcję „send_mail”, która wysyła pocztę do „revever_mail_address”, którego nazwa to „nazwa”. Oba argumenty są przekazywane do funkcji z głównego korpusu MSG. W głównym treści skryptu zobaczymy, w jaki sposób znajdziemy „revever_mail_address” i „nazwa”.

Wysyłanie wiadomości e -mail za pomocą SMTPLIB zostało wyjaśnione powyżej, abyś mógł go przeczytać i nie zostanie on omówiony tutaj.

W głównym ciele przechodzimy do katalogu, w którym uratowaliśmy „urodziny_file” za pomocą „systemu operacyjnego.chdir () '. Wtedy mamy „pobywę”, co jest zawsze prawdziwe, więc będzie sprawdzić urodziny w sposób ciągły. Teraz dostajemy bieżącą datę i godzinę i zapisujemy ją w zmiennej „Today”. 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 ilości. Następnie otworzymy urodziny_file w obiekcie „Birthday_file” w trybie czytania, abyśmy mogli to tylko przeczytać. Teraz zapiszymy wszystkie wiersze tego pliku na liście linii. „Birthday_file.ReadLines () „Zapisza każdy wiersz na liście„ wierszy ”. Następnie zamkniemy urodziny_flii za pomocą „urodzin_file.Funkcja Close () '.

Teraz przeczytamy każdą linię jeden po drugim, używając do pętli. W każdej linii tylko dane jednej osoby są dostępne w „Birthday_file”, więc czytamy tylko dane jednej osoby jednocześnie w tej pętli.

Następnie wyodrębnimy datę urodzenia, adres e -mail i nazwisko osoby za pomocą modułu rep. Jak napisaliśmy datę w następującym formacie

ROYYY-MM-DD

Dlatego wykonamy wyrażenie regularne „dateex”, które znajduje ten format w linii.

Odnośnie.Compile (r ”\ d 4-\ d 2-\ d 2”)

Powyższe polecenie Znajdź ciąg, który ma „4 cyfry”, a następnie „-” następnie „2 cyfry”, a następnie „-” i „2 cyfry”. To da nam datę narodzin osoby, abyśmy wyodrębnili dzień porodu i miesiąc z tego wyrażenia.

Podobnie znajdziemy adres e -mail za pomocą wyrażeń regularnych. Następnie porównajmy urodziny_month i bieżący_month i urodziny_day i current_day. Jeśli te warunki są zadowoleni, wyślemy pocztę urodzinową za pomocą funkcji „send_mail” w dokładnym '08: 00 ''.

Uruchamianie skryptu automatycznie za pośrednictwem cronjob

Teraz upewnimy się, że ten skrypt Python działa za każdym razem. Aby to zrobić, dodamy to zadanie do Crontab. Crontab w Linux służy do automatycznego wykonywania zadań. Musimy po prostu 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
Ubuntu@ubuntu: ~ $ crontab -e
  1. Na końcu tego pliku wprowadź następujące polecenie bez #
@reboot Python ścieżka_to_the_script

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