I den här lektionen delar jag skriptet som jag använder för att skicka e-post till användarna av de appar jag skapar och mer.
Vad vi ska göra?
Vi skapar ett enkelt Python-program som gör följande:
- Använd mallfilen vi skapar för e-postdesignen. Detta kommer bara att vara en textbaserad fil med platshållarvärden.
- Få personens namn och e-post från en annan textfil vi skapar.
Dessa punkter gör det här programmet mycket närmare en verklig användning av att skicka e-post i dina appar. Låt oss börja.
Fil för e-post
Filen som innehåller e-postmeddelanden för användarna kommer att se ut så här:
Shubham shubham.kod @ gmail.comDetta är bara en enkel textfil som innehåller användarnamn och e-postadress åtskilda av mellanslag. Flera e-postmeddelanden har lagts med varje användares data i en ny rad. Vi heter den här filen användare.Text.
Använda mallen
Låt oss snabbt definiera mallen också som vi kommer att använda i vårt skript för att ersätta värden:
Hej $ PERSON_NAME,Vi skickade det här e-postmeddelandet med hjälp av Python smtplib-modulen. Cool, rätt?
Ha en ljus dag framåt!
Skål
Vi har använt en mallsträng $ PERSON_NAME som kommer att ersättas med namnet på den person vi får från användarna.txt-fil när du skickar e-postmeddelandet.
Hämta användardata från filen
Det första steget för att skicka e-post till en användare är att identifiera det där vi vill skicka e-postmeddelandena till. Låt oss skriva en Python-funktion som accepterar ett filnamn och returnerar oss användarnamn och e-post-ID där e-postmeddelandena måste skickas:
def get_users_data (filnamn):användarnamn = []
user_email = []
med öppen (filnamn, läge = 'r', kodning = 'utf-8') som användarfil:
för user_info i user_file:
Användarnamn.lägg till (user_info.split () [0])
user_email.lägg till (user_info.split () [1])
returnera användarnamn, användar-e-post
Med den här funktionen returnerar vi bara användarens namn och e-postmeddelanden som vi får från filen.
Skaffa mallobjektet
Nu kan vi analysera vår mall och få ett mallobjekt från textfilen vi skapade:
def read_template (filnamn):med öppen (filnamn, 'r', kodning = 'utf-8') som msg_template:
msg_template_content = msg_template.läsa()
returnera mall (msg_template_content)
Med detta kommer vi tillbaka ett mallobjekt som vi kan använda för att analysera innehållet i filen och göra nödvändiga ersättningar för mallsträngarna som en användares namn.
Hur e-post skickas sker?
Nu när vi är redo med mallutformningen och användarens data måste vi förstå hur ett e-postmeddelande faktiskt skickas till användaren:
- Skapa SMTP-anslutning med inloggningsuppgifter för avsändarens konto
- Konstruera en rubrik med flera delar med information med fälten Från, Till och Ämne
- Konstruera meddelandetexten som ska skickas
- Skicka e-postmeddelandet med SMTP-anslutningsobjekt
Konfigurera SMTP-anslutning
Låt oss äntligen definiera funktionen som skickar e-postmeddelandet till de utsedda användarna. Här är funktionen:
def huvud ():user_name, user_email = get_users_data ('användare.txt ') # läs användardetaljer
message_template = read_template ('meddelande.Text')
# ställa in SMTP-servern
smtplib_server = smtplib.SMTP (värd = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.inloggning (SEND_FROM, EMAIL_PWD)
# Få varje användardetalj och skicka e-postmeddelandet:
för namn, e-post i zip (user_name, user_email):
multipart_message = MIMEMultipart () # skapa ett meddelande
# lägg till det faktiska personnamnet i meddelandemallen
msg = meddelande_mall.ersättare (PERSON_NAME = namn.titel())
# Skriver ut meddelandetexten för vår skull
skriva ut (msg)
# ställa in parametrarna för meddelandet
multipart_message ['From'] = SEND_FROM
multipart_message ['Till'] = e-post
multipart_message ['Subject'] = "E-post med LinuxHint"
# lägg till i meddelandetexten
multipart_message.bifoga (MIMEText (msg, 'vanlig'))
# skicka meddelandet via den tidigare konfigurerade servern.
smtplib_server.send_message (multipart_message)
del multipart_message
# Avsluta SMTP-sessionen och stäng anslutningen
smtplib_server.sluta()
I ovanstående funktion följde vi varje steg som vi angav i föregående avsnitt. Vi konstruerade SMTP-anslutningen och använde den för att skicka e-postmeddelandet.
Komplett program
I det sista avsnittet, låt oss ta en titt på hela programmet som kan användas för att skicka e-postmeddelandet till utsedd användare:
importera smtplibfrån strängimportmall
från epost.mima.multipelimport MIMEMultipart
från epost.mima.textimport MIMEText
SEND_FROM = 'min-e-post-här'
EMAIL_PWD = 'mitt-lösenord-här'
def get_users_data (filnamn):
användarnamn = []
user_email = []
med öppen (filnamn, läge = 'r', kodning = 'utf-8') som användarfil:
för user_info i user_file:
Användarnamn.lägg till (user_info.split () [0])
user_email.lägg till (user_info.split () [1])
returnera användarnamn, användar-e-post
def read_template (filnamn):
med öppen (filnamn, 'r', kodning = 'utf-8') som msg_template:
msg_template_content = msg_template.läsa()
returnera mall (msg_template_content)
def huvud ():
user_name, user_email = get_users_data ('användare.txt ') # läs användardetaljer
message_template = read_template ('meddelande.Text')
# ställa in SMTP-servern
smtplib_server = smtplib.SMTP (värd = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.inloggning (SEND_FROM, EMAIL_PWD)
# Få varje användardetalj och skicka e-postmeddelandet:
för namn, e-post i zip (user_name, user_email):
multipart_message = MIMEMultipart () # skapa ett meddelande
# lägg till det faktiska personnamnet i meddelandemallen
msg = meddelande_mall.ersättare (PERSON_NAME = namn.titel())
# Skriver ut meddelandetexten för vår skull
skriva ut (msg)
# ställa in parametrarna för meddelandet
multipart_message ['From'] = SEND_FROM
multipart_message ['Till'] = e-post
multipart_message ['Subject'] = "LinuxHint e-post"
# lägg till i meddelandetexten
multipart_message.bifoga (MIMEText (msg, 'vanlig'))
# skicka meddelandet via den tidigare konfigurerade servern.
smtplib_server.send_message (multipart_message)
del multipart_message
# Avsluta SMTP-sessionen och stäng anslutningen
smtplib_server.sluta()
om __name__ == '__main__':
huvud ()
När vi kör det här programmet med ett Gmail-ID kan du stöta på ett sådant problem:
Gmail SMTP-fel
Detta beror på att Gmail inte tillåter vanliga skript att använda Gmail API. För detta kan du behöva inaktivera säkerhetsinloggning i ditt Gmail-konto. Läs om hur du gör detta för Gmail här.
Slutsats
I den här lektionen tittade vi på hur vi kan skicka e-postmeddelanden med Pythons smtplib modul.