I denne leksjonen vil jeg dele skriptet jeg bruker for å sende e-post til brukerne av appene jeg lager og mer.
Det vi skal gjøre?
Vi vil lage et enkelt Python-program som vil gjøre følgende:
- Bruk malfilen vi oppretter for e-postdesignet. Dette vil bare være en tekstbasert fil med plassholderverdier.
- Få navnet og e-postadressen til personen fra en annen tekstfil vi lager.
Disse punktene gjør dette programmet mye nærmere den virkelige bruken av å sende e-post i appene dine. La oss komme i gang.
Fil for e-post
Filen som inneholder e-postmeldingene til brukerne vil se slik ut:
Shubham shubham.kode @ gmail.comDette er bare en enkel tekstfil som inneholder brukerens navn og e-post atskilt med mellomrom. Flere e-poster er satt med hver brukeres data i en ny linje. Vi kalte denne filen brukere.tekst.
Bruke malen
La oss raskt også definere malen som vi skal bruke i skriptet vårt for å erstatte verdier:
Hei $ PERSON_NAME,Vi sendte denne e-postmeldingen ved hjelp av Python smtplib-modulen. Kult, ikke sant?
Ha en lys dag fremover!
Jubel
Vi har brukt en malstreng $ PERSON_NAME som vil bli erstattet med navnet på personen vi får fra brukerne.txt-fil mens du sender e-posten.
Få brukerdata fra filen
Det første trinnet for å sende e-post til en bruker er å identifisere det der vi vil sende e-postene. La oss skrive en Python-funksjon som godtar et filnavn og returnerer oss brukernavn og e-post-ID der e-postene må sendes:
def get_users_data (filnavn):brukernavn = []
user_email = []
med åpen (filnavn, modus = 'r', koding = 'utf-8') som brukerfil:
for brukerinfo i brukerfil:
brukernavn.legg til (brukerinfo.delt () [0])
bruker-e-post.legg til (brukerinfo.delt () [1])
returner brukernavn, brukeradresse
Med denne funksjonen returnerer vi bare brukerens navn og e-postmeldinger som vi får fra filen.
Få malobjektet
Nå kan vi analysere malen vår og få et malobjekt fra tekstfilen vi laget:
def read_template (filnavn):med åpen (filnavn, 'r', koding = 'utf-8') som msg_template:
msg_template_content = msg_template.lese()
returner mal (msg_template_content)
Med dette vil vi få tilbake et malobjekt som vi kan bruke til å analysere innholdet i filen og gjøre nødvendige erstatninger for malstrenger som brukerens navn.
Hvordan e-post sendes?
Nå som vi er klare med malutformingen og brukerens data, må vi forstå hvordan en e-post faktisk blir sendt til brukeren:
- Opprett SMTP-tilkobling med påloggingsinformasjon for avsenderens konto
- Konstruer en flerdelt overskrift med informasjon med Fra, Til og Emne-felt
- Konstruer meldingsdelen som må sendes
- Send e-posten med SMTP-tilkoblingsobjekt
Sette opp SMTP-tilkobling
La oss endelig definere funksjonen som vil sende e-posten til de utpekte brukerne. Her er funksjonen:
def main ():user_name, user_email = get_users_data ('brukere.txt ') # les brukerinformasjon
message_template = read_template ('melding.tekst')
# sett opp SMTP-serveren
smtplib_server = smtplib.SMTP (vert = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.pålogging (SEND_FROM, EMAIL_PWD)
# Få hver brukerdetalj og send e-posten:
for navn, e-post i zip (brukernavn, brukeradresse):
multipart_message = MIMEMultipart () # opprett en melding
# legg inn det faktiske personnavnet i meldingsmalen
msg = message_template.erstatning (PERSON_NAME = navn.tittel())
# Skriver ut meldingsdelen for vår skyld
skriv ut (msg)
# sette opp parametrene for meldingen
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-post
multipart_message ['Subject'] = "LinuxHint e-post"
# legg til i meldingen
multipart_message.vedlegg (MIMEText (msg, 'vanlig'))
# send meldingen via serveren som er konfigurert tidligere.
smtplib_server.send_message (multipart_message)
del multipart_message
# Avslutt SMTP-økten og lukk forbindelsen
smtplib_server.slutte()
I funksjonen ovenfor fulgte vi hvert trinn vi oppga i forrige avsnitt. Vi konstruerte SMTP-tilkoblingen og brukte den til å sende e-posten.
Komplett program
I den siste delen, la oss ta en titt på det komplette programmet som kan brukes til å sende e-posten til utpekt bruker:
importere smtplibfra strengimportmal
fra e-post.mime.flerdelt import MIMEMultipart
fra e-post.mime.tekstimport MIMEText
SEND_FROM = 'min-e-post-her'
EMAIL_PWD = 'mitt passord-her'
def get_users_data (filnavn):
brukernavn = []
user_email = []
med åpen (filnavn, modus = 'r', koding = 'utf-8') som brukerfil:
for brukerinfo i brukerfil:
brukernavn.legg til (brukerinfo.delt () [0])
bruker-e-post.legg til (brukerinfo.delt () [1])
returner brukernavn, brukeradresse
def read_template (filnavn):
med åpen (filnavn, 'r', koding = 'utf-8') som msg_template:
msg_template_content = msg_template.lese()
returner mal (msg_template_content)
def main ():
user_name, user_email = get_users_data ('brukere.txt ') # les brukerinformasjon
message_template = read_template ('melding.tekst')
# sett opp SMTP-serveren
smtplib_server = smtplib.SMTP (vert = 'smtp.gmail.com ', port = 587)
smtplib_server.starttls ()
smtplib_server.pålogging (SEND_FROM, EMAIL_PWD)
# Få hver brukerdetalj og send e-posten:
for navn, e-post i zip (brukernavn, brukeradresse):
multipart_message = MIMEMultipart () # opprett en melding
# legg inn det faktiske personnavnet i meldingsmalen
msg = message_template.erstatning (PERSON_NAME = navn.tittel())
# Skriver ut meldingsdelen for vår skyld
skriv ut (msg)
# sette opp parametrene for meldingen
multipart_message ['From'] = SEND_FROM
multipart_message ['To'] = e-post
multipart_message ['Subject'] = "LinuxHint e-post"
# legg til i meldingen
multipart_message.vedlegg (MIMEText (msg, 'vanlig'))
# send meldingen via serveren som er konfigurert tidligere.
smtplib_server.send_message (multipart_message)
del multipart_message
# Avslutt SMTP-økten og lukk forbindelsen
smtplib_server.slutte()
hvis __name__ == '__main__':
hoved()
Når vi kjører dette programmet med en Gmail-ID, kan du møte et problem som dette:
Gmail SMTP-feil
Dette er fordi Gmail ikke tillater vanlige skript å bruke Gmail API. For dette må du kanskje deaktivere sikkerhetsinnloggingen i Gmail-kontoen din. Les om hvordan du gjør dette for Gmail her.
Konklusjon
I denne leksjonen så vi på hvordan vi kan sende e-postmeldinger ved hjelp av Pythons smtplib modul.