I denne lektion deler jeg det script, jeg bruger til at sende e-mails til brugerne af de apps, jeg laver og mere.
Hvad vi skal gøre?
Vi opretter et simpelt Python-program, der gør følgende:
- Brug den skabelonfil, vi opretter til e-mail-designet. Dette vil bare være en tekstbaseret fil med pladsholderværdier.
- Hent personens navn og e-mail fra en anden tekstfil, vi laver.
Disse punkter gør dette program meget tættere på den virkelige brug af at sende e-mails i dine apps. Lad os komme igang.
Fil til e-mails
Filen, der indeholder e-mails til brugerne, ser sådan ud:
Shubham shubham.kode @ gmail.comDette er bare en simpel tekstfil, der indeholder brugerens navn og e-mail adskilt af mellemrum. Flere e-mails er blevet sat med hver brugers data i en ny linje. Vi navngav denne fil brugere.txt.
Brug af skabelonen
Lad os hurtigt definere skabelonen, som vi også bruger i vores script til at erstatte værdier:
Hej $ PERSON_NAME,Vi sendte denne e-mail ved hjælp af Python smtplib-modul. Sejt, rigtigt?
Hav en lys dag i vente!
Skål
Vi har brugt en skabelonstreng $ PERSON_NAME som erstattes med navnet på den person, vi får fra brugerne.txt-fil, mens du sender e-mailen.
Henter brugerdata fra filen
Det første skridt til at sende e-mail til en bruger er at identificere det, hvor vi vil sende e-mails til. Lad os skrive en Python-funktion, der accepterer et filnavn og returnerer os brugernavn og e-mail-id'er, hvor e-mails skal sendes:
def get_users_data (filnavn):brugernavn = []
user_email = []
med åben (filnavn, tilstand = 'r', kodning = 'utf-8') som brugerfil:
til brugerinfo i brugerfil:
brugernavn.tilføj (user_info.split () [0])
bruger-e-mail.tilføj (user_info.split () [1])
returner brugernavn, brugernavn
Med denne funktion returnerer vi bare brugerens navne og e-mails, som vi får fra filen.
Sådan får du skabelonobjektet
Nu kan vi analysere vores skabelon og få et skabelonobjekt fra den tekstfil, vi lavede:
def read_template (filnavn):med åben (filnavn, 'r', kodning = 'utf-8') som msg_template:
msg_template_content = msg_template.Læs()
returner skabelon (msg_template_content)
Med dette får vi et skabelonobjekt tilbage, som vi kan bruge til at analysere indholdet af filen og foretage de nødvendige udskiftninger til skabelonstrengene som en brugers navn.
Sådan sendes e-mail?
Nu hvor vi er klar med skabelondesignet og brugerens data, skal vi forstå, hvordan en e-mail faktisk sendes til brugeren:
- Opret SMTP-forbindelse med loginoplysninger for afsenderens konto
- Konstruer et flerdelt overskrift med information med felterne Fra, Til og Emne
- Konstruer den meddelelsesdel, der skal sendes
- Send e-mailen med SMTP-forbindelsesobjekt
Opsætning af SMTP-forbindelse
Lad os endelig definere den funktion, som sender e-mailen til de udpegede brugere. Her er funktionen:
def hoved ():user_name, user_email = get_users_data ('brugere.txt ') # læs brugeroplysninger
message_template = read_template ('besked.txt ')
# opsæt SMTP-serveren
smtplib_server = smtplib.SMTP (vært = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.login (SEND_FROM, EMAIL_PWD)
# Få hver brugerdetalje og send e-mailen:
for navn, e-mail i zip (user_name, user_email):
multipart_message = MIMEMultipart () # opret en besked
# tilføj det aktuelle personnavn til beskedskabelonen
msg = besked_skabelon.erstatning (PERSON_NAME = navn.titel())
# Udskriver meddelelsesteksten for vores skyld
udskrive (msg)
# opsæt parametrene for meddelelsen
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-mail
multipart_message ['Subject'] = "LinuxHint e-mail"
# tilføj i meddelelsens brødtekst
multipart_besked.vedhæft (MIMEText (msg, 'almindelig'))
# send beskeden via den tidligere konfigurerede server.
smtplib_server.send_message (multipart_message)
del multipart_message
# Afslut SMTP-sessionen og luk forbindelsen
smtplib_server.Afslut()
I ovenstående funktion fulgte vi hvert trin, vi angav i det foregående afsnit. Vi konstruerede SMTP-forbindelsen og brugte den til at sende e-mailen.
Komplet program
I det sidste afsnit, lad os se på det komplette program, der kan bruges til at sende e-mailen til den udpegede bruger:
importer smtplibfra streng import skabelon
fra e-mail.mime.multipartimport MIMEMultipart
fra e-mail.mime.tekstimport MIMEText
SEND_FROM = 'min-e-mail-her'
EMAIL_PWD = 'min-adgangskode-her'
def get_users_data (filnavn):
brugernavn = []
user_email = []
med åben (filnavn, tilstand = 'r', kodning = 'utf-8') som brugerfil:
til brugerinfo i brugerfil:
brugernavn.tilføj (user_info.split () [0])
bruger-e-mail.tilføj (user_info.split () [1])
returner brugernavn, brugernavn
def read_template (filnavn):
med åben (filnavn, 'r', kodning = 'utf-8') som msg_template:
msg_template_content = msg_template.Læs()
returner skabelon (msg_template_content)
def hoved ():
user_name, user_email = get_users_data ('brugere.txt ') # læs brugeroplysninger
message_template = read_template ('besked.txt ')
# opsæt SMTP-serveren
smtplib_server = smtplib.SMTP (vært = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.login (SEND_FROM, EMAIL_PWD)
# Få hver brugerdetalje og send e-mailen:
for navn, e-mail i zip (user_name, user_email):
multipart_message = MIMEMultipart () # opret en besked
# tilføj det aktuelle personnavn til beskedskabelonen
msg = besked_skabelon.erstatning (PERSON_NAME = navn.titel())
# Udskriver meddelelsesteksten for vores skyld
udskrive (msg)
# opsæt parametrene for meddelelsen
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-mail
multipart_message ['Subject'] = "LinuxHint e-mail"
# tilføj i meddelelsens brødtekst
multipart_besked.vedhæft (MIMEText (msg, 'almindelig'))
# send beskeden via den tidligere konfigurerede server.
smtplib_server.send_message (multipart_message)
del multipart_message
# Afslut SMTP-sessionen og luk forbindelsen
smtplib_server.Afslut()
hvis __name__ == '__main__':
hoved ()
Når vi kører dette program med et Gmail-id, står du muligvis over for et problem som dette:
Gmail SMTP-fejl
Dette skyldes, at Gmail ikke tillader almindelige scripts at bruge Gmail API. Til dette skal du muligvis deaktivere sikkerhedslogin på din Gmail-konto. Læs om, hvordan du gør dette til Gmail her.
Konklusion
I denne lektion kiggede vi på, hvordan vi kan sende e-mails ved hjælp af Pythons smtplib modul.