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 oppretter. Med Python er dette ganske enkelt og enkelt å gjøre. Selv når vi trenger å benytte oss av noen forhåndsdefinerte maler, hjelper Python oss med å erstatte plasseringsverdier med faktiske data slik at den endelige e-posten ser elegant ut og fylt med detaljer som gjør min klient lykkelig.

I denne leksjonen vil jeg dele skriptet jeg bruker for å sende e -post til brukerne av appene jeg lager og mer.

Hva vi skal gjøre?

Vi vil lage et enkelt Python -program som vil gjøre følgende:

  • Bruk malfilen vi lager for e -postdesignet. Dette vil bare være en tekstbasert fil med plasseringsverdier.
  • Få navn og e -post til personen fra en annen tekstfil vi lager.

Disse punktene gjør dette programmet mye nærmere en virkelig bruk av å sende e-post i appene dine. La oss komme i gang.

Fil for e -post

Filen som inneholder e -postene for brukerne vil se slik ut:

Shubham [email protected]

Dette er bare en enkel tekstfil som inneholder brukerens navn og e -post atskilt med plass. Flere e -postmeldinger er lagt med hver brukers data i en ny linje. Vi kalte denne filen Brukere.tekst.

Bruke malen

La oss raskt definere malen som vi vil bruke i skriptet vårt for å erstatte verdier:

Hei $ person_name,
Vi sendte denne e -posten ved hjelp av Python SMTPLIB -modul. 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 å sende e -post til en bruker er å identifisere det der vi ønsker å sende e -postene til. La oss skrive en Python -funksjon som vil godta et filnavn og returnerer amerikanske brukere navn og e -post -ID -er der e -postene må sendes:

def get_users_data (file_name):
user_name = []
user_email = []
Med Open (File_Name, Mode = 'R', Coding = 'UTF-8') som User_File:
For user_info i user_file:
brukernavn.vedlegg (user_info.split () [0])
user_email.vedlegg (user_info.split () [1])
return user_name, user_email

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 (file_name):
Med Open (File_Name, 'R', Encoding = 'UTF-8') som MSG_TEMPLATE:
msg_template_content = msg_template.lese()
returmal (msg_template_content)

Med dette vil vi få tilbake et malobjekt som vi kan bruke til å analysere innholdet i filen og lage nødvendige erstatninger for malstrengene som en brukers navn.

Hvordan sending av e -post blir gjort?

Nå som vi er klare med maldesign og brukerens data, må vi forstå hvordan en e -post faktisk sendes til brukeren:

  • Opprett SMTP -tilkobling med påloggingsinformasjon for avsenderens konto
  • Konstruer en flerdelt overskrift med informasjon med fra, til og fagfelt
  • Konstruer meldingsorganet 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 brukerdetaljer
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.Logg inn (send_from, e -post_pwd)
# Få hver brukerdetalj og send e -posten:
For navn, e -post i ZIP (brukernavn, user_email):
multipart_message = mimemultipart () # Opprett en melding
# Legg til det faktiske personnavnet til meldingsmalen
msg = message_template.erstatning (person_navn = navn.tittel())
# Skriver ut meldingskroppen for vår skyld
Print (MSG)
# Sett opp parametrene for meldingen
multipart_message ['fra'] = send_from
multipart_message ['til'] = e -post
multipart_message ['emne'] = "linuxhint e -post"
# Legg til meldingsorganet
Multipart_Message.vedlegg (mimetext (msg, 'vanlig'))
# Send meldingen via serveren som er satt opp tidligere.
SMTPLIB_SERVER.Send_Message (Multipart_Message)
Del Multipart_Message
# Avslutt SMTP -økten og lukk forbindelsen
SMTPLIB_SERVER.slutte()

I ovennevnte funksjon fulgte vi hvert trinn vi uttalte i forrige avsnitt. Vi konstruerte SMTP -tilkoblingen og brukte den til å sende e -posten.

Komplett program

I sluttdelen, la oss se på det komplette programmet som kan brukes til å sende e -posten til utpekt bruker:

Importer SMTPLIB
Fra strengimportmal
fra e -post.mime.Multipart Import MimemultIPart
fra e -post.mime.Tekstimport mimetext
Send_from = 'my-e-post-her'
E-post_pwd = 'my-password-her'
def get_users_data (file_name):
user_name = []
user_email = []
Med Open (File_Name, Mode = 'R', Coding = 'UTF-8') som User_File:
For user_info i user_file:
brukernavn.vedlegg (user_info.split () [0])
user_email.vedlegg (user_info.split () [1])
return user_name, user_email
def read_template (file_name):
Med Open (File_Name, 'R', Encoding = 'UTF-8') som MSG_TEMPLATE:
msg_template_content = msg_template.lese()
returmal (msg_template_content)
def main ():
user_name, user_email = get_users_data ('brukere.txt ') # Les brukerdetaljer
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.Logg inn (send_from, e -post_pwd)
# Få hver brukerdetalj og send e -posten:
For navn, e -post i ZIP (brukernavn, user_email):
multipart_message = mimemultipart () # Opprett en melding
# Legg til det faktiske personnavnet til meldingsmalen
msg = message_template.erstatning (person_navn = navn.tittel())
# Skriver ut meldingskroppen for vår skyld
Print (MSG)
# Sett opp parametrene for meldingen
multipart_message ['fra'] = send_from
multipart_message ['til'] = e -post
multipart_message ['emne'] = "linuxhint e -post"
# Legg til meldingsorganet
Multipart_Message.vedlegg (mimetext (msg, 'vanlig'))
# Send meldingen via serveren som er satt opp tidligere.
SMTPLIB_SERVER.Send_Message (Multipart_Message)
Del Multipart_Message
# Avslutt SMTP -økten og lukk forbindelsen
SMTPLIB_SERVER.slutte()
if __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 kan det hende du må deaktivere sikkerhetsinnlogging på 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 -post ved hjelp av Pythons smtplib modul.