Wysyłanie wiadomości e -mail w Python

Wysyłanie wiadomości e -mail w Python
Wysyłanie wiadomości e -mail jest jednym z najczęstszych zadań, które muszę wykonać w aplikacjach internetowych i innych projektach, które tworzę. Z Pythonem jest to dość proste i łatwe do zrobienia. Nawet gdy musimy skorzystać z niektórych wstępnie zdefiniowanych szablonów, Python pomaga nam zastąpić wartości zastępcze rzeczywistych danymi, aby ostateczny e-mail wyglądał elegancki i wypełniony szczegółami, co sprawia.

W tej lekcji udostępnię skrypt, którego używam do wysyłania e -maili do użytkowników aplikacji, które tworzę i więcej.

Co będziemy robić?

Stworzymy prosty program Python, który wykona następujące czynności:

  • Użyj pliku szablonu, który tworzymy do projektowania wiadomości e -mail. Będzie to po prostu plik tekstowy o wartościach zastępczych.
  • Uzyskaj nazwę i e -mail osoby z innego pliku tekstowego, który tworzymy.

Te punkty sprawiają, że ten program znacznie bliżej rzeczywistego użycia wysyłania wiadomości e-mail w aplikacjach. Zacznijmy.

Plik do e -maili

Plik, który zawiera e -maile dla użytkowników, będzie wyglądać tak:

Shubham [email protected]

To tylko prosty plik tekstowy, który zawiera nazwę użytkownika i e -mail oddzielone przez miejsce. Wiele wiadomości e -mail zostało umieszczonych z danymi każdego użytkownika w nowej linii. Nazwaliśmy ten plik użytkownicy.tekst.

Za pomocą szablonu

Szybko zdefiniujmy również szablon, którego będziemy używać w naszym skrypcie do wymiany wartości:

Hello $ person_name,
Wysłaliśmy ten e -mail za pomocą modułu Python Smtplib. Fajnie, prawda?
Miej przede wszystkim jasny dzień!
Dzięki

Użyliśmy łańcucha szablonu $ Person_name które zostaną zastąpione nazwą osoby, którą otrzymujemy od użytkowników.plik txt podczas wysyłania wiadomości e -mail.

Uzyskiwanie danych użytkownika z pliku

Pierwszym krokiem do wysłania wiadomości e -mail do użytkownika jest ustalenie, gdzie chcemy wysłać e -maile. Napiszmy funkcję Pythona, która zaakceptuje nazwę pliku i zwróci nam nazwę użytkowników i identyfikatory e -mail, w których e -maile muszą zostać wysłane:

def get_users_data (nazwa_pliku):
User_name = []
user_email = []
Z otwartym (plik_nazwa, tryb = 'r', kodowanie = 'utf-8') jako user_file:
Dla user_info w pliku_ser_file:
nazwa użytkownika.append (user_info.split () [0])
User_email.append (user_info.split () [1])
zwróć nazwę_ser_mail, user_email

Dzięki tej funkcji po prostu zwracamy nazwy użytkownika i e -maile, które otrzymamy, tworząc plik.

Otrzymanie obiektu szablonu

Teraz możemy przeanalizować nasz szablon i uzyskać obiekt szablonu z wykonanego pliku tekstowego:

def read_template (plik_nazwa):
Z otwartym (plik_nazwa, „r”, kodowanie = 'utf-8') jako msg_template:
msg_template_content = msg_template.Czytać()
Szablon powrotu (msg_template_content)

Dzięki temu odzyskamy obiekt szablonu, którego możemy użyć do analizowania zawartości pliku i dokonania niezbędnych wymiany szablonów, takich jak nazwa użytkownika.

Jak wyślemy e -maila?

Teraz, gdy jesteśmy gotowi z projektem szablonu i danych użytkownika, musimy zrozumieć, w jaki sposób e -mail jest faktycznie wysyłany do użytkownika:

  • Utwórz połączenie SMTP z poświadczeniami logowania dla konta nadawcy
  • Skonstruuj wieloczęściowy nagłówek z informacjami z pola, do i przedmiotu
  • Skonstruuj ciało wiadomości, które należy wysłać
  • Wyślij wiadomość e -mail z obiektem połączenia SMTP

Konfigurowanie połączenia SMTP

W końcu zdefiniujmy funkcję, która wyśle ​​wiadomość e -mail do wyznaczonych użytkowników. Oto funkcja:

def main ():
User_name, user_email = get_users_data („Użytkownicy.txt ') # Przeczytaj szczegóły użytkownika
message_template = read_template („Wiadomość.tekst')
# Skonfiguruj serwer SMTP
smtplib_server = smtplib.SMTP (host = 'SMTP.Gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.login (send_from, e -mail_pwd)
# Pobierz każdy szczegół i wyślij wiadomość e -mail:
Dla nazwy, e -mail w ZIP (nazwa_serby, user_email):
multipart_message = mimemultipart () # Utwórz wiadomość
# Dodaj nazwę rzeczywistej osoby do szablonu wiadomości
msg = message_template.zastępca (person_name = imienia.tytuł())
# Wydrukuje ciało wiadomości dla naszego sake
Drukuj (MSG)
# Skonfiguruj parametry wiadomości
multipart_message ['from'] = send_from
multipart_message ['to'] = e -mail
multipart_message ['temat'] = "Linuxhint e -mail"
# Dodaj ciało wiadomości
multipart_message.przywiązać (mimeText (MSG, „Plain”))
# Wyślij wiadomość za pośrednictwem serwera skonfigurowanego wcześniej.
smtplib_server.send_message (multipart_message)
del multipart_message
# Zakończ sesję SMTP i zamknij połączenie
smtplib_server.zrezygnować()

W powyższej funkcji śledziliśmy każdy krok, który stwierdziliśmy w poprzednim rozdziale. Skonstruowaliśmy połączenie SMTP i użyliśmy go do wysyłania wiadomości e -mail.

Kompletny program

W końcowej sekcji spójrzmy na pełny program, którego można użyć do wysyłania wiadomości e -mail do wyznaczonego użytkownika:

Importuj smtplib
z szablonu importu ciągu
z emaila.mim.wieloczęściowy import mimemultipart
z emaila.mim.Tekst MimeText
Send_from = „My-Mail-here”
E-mail_pwd = „my-password-here”
def get_users_data (nazwa_pliku):
User_name = []
user_email = []
Z otwartym (plik_nazwa, tryb = 'r', kodowanie = 'utf-8') jako user_file:
Dla user_info w pliku_ser_file:
nazwa użytkownika.append (user_info.split () [0])
User_email.append (user_info.split () [1])
zwróć nazwę_ser_mail, user_email
def read_template (plik_nazwa):
Z otwartym (plik_nazwa, „r”, kodowanie = 'utf-8') jako msg_template:
msg_template_content = msg_template.Czytać()
Szablon powrotu (msg_template_content)
def main ():
User_name, user_email = get_users_data („Użytkownicy.txt ') # Przeczytaj szczegóły użytkownika
message_template = read_template („Wiadomość.tekst')
# Skonfiguruj serwer SMTP
smtplib_server = smtplib.SMTP (host = 'SMTP.Gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.login (send_from, e -mail_pwd)
# Pobierz każdy szczegół i wyślij wiadomość e -mail:
Dla nazwy, e -mail w ZIP (nazwa_serby, user_email):
multipart_message = mimemultipart () # Utwórz wiadomość
# Dodaj nazwę rzeczywistej osoby do szablonu wiadomości
msg = message_template.zastępca (person_name = imienia.tytuł())
# Wydrukuje ciało wiadomości dla naszego sake
Drukuj (MSG)
# Skonfiguruj parametry wiadomości
multipart_message ['from'] = send_from
multipart_message ['to'] = e -mail
multipart_message ['temat'] = "Linuxhint e -mail"
# Dodaj ciało wiadomości
multipart_message.przywiązać (mimeText (MSG, „Plain”))
# Wyślij wiadomość za pośrednictwem serwera skonfigurowanego wcześniej.
smtplib_server.send_message (multipart_message)
del multipart_message
# Zakończ sesję SMTP i zamknij połączenie
smtplib_server.zrezygnować()
Jeśli __name__ == '__main__':
główny()

Kiedy uruchamiamy ten program z identyfikatorem Gmaila, możesz spotkać się z takim problemem:

Błąd Gmaila SMTP


Wynika to z faktu, że Gmail nie pozwala zwykłym skryptom korzystać z API Gmaila. W tym celu może być konieczne wyłączenie logowania bezpieczeństwa na swoim koncie Gmail. Przeczytaj o tym, jak to zrobić dla Gmaila tutaj.

Wniosek

W tej lekcji przyjrzeliśmy się, w jaki sposób możemy wysyłać e -maile za pomocą Pythona Smtplib moduł.