Python

Sende en e-post i Python

Sende en e-post i Python
Å sende en e-post er en av de vanligste oppgavene jeg trenger å gjøre i webapplikasjonene og andre prosjekter jeg lager. Med Python er dette ganske grei og enkel å gjøre. Selv når vi trenger å bruke noen forhåndsdefinerte maler, hjelper Python oss med å erstatte plassholderverdier med faktiske data slik at den endelige e-posten ser elegant ut og fylt med detaljer som gjør min klient fornøyd.

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:

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.com

Dette 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:

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 smtplib
fra 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.

Hvordan bruke AutoKey til å automatisere Linux-spill
AutoKey er et desktopautomatiseringsverktøy for Linux og X11, programmert i Python 3, GTK og Qt. Ved å bruke skript og MACRO-funksjonalitet kan du aut...
Hvordan vise FPS-teller i Linux-spill
Linux-spill fikk et stort press da Valve kunngjorde Linux-støtte for Steam-klient og spillene deres i 2012. Siden den gang har mange AAA- og indiespil...
Hvordan laste ned og spille Sid Meier's Civilization VI på Linux
Introduksjon til spillet Civilization 6 er et moderne syn på det klassiske konseptet som ble introdusert i serien av Age of Empires-spillene. Ideen va...