In deze les deel ik het script dat ik gebruik om e-mails te sturen naar de gebruikers van de apps die ik maak en meer.
Wat gaan we doen??
We zullen een eenvoudig Python-programma maken dat het volgende doet:
- Gebruik het sjabloonbestand dat we maken voor het e-mailontwerp. Dit is gewoon een op tekst gebaseerd bestand met tijdelijke aanduiding-waarden.
- Haal de naam en het e-mailadres van de persoon uit een ander tekstbestand dat we maken.
Deze punten maken dit programma veel dichter bij een echt gebruik van het verzenden van e-mails in uw apps. Laten we beginnen.
Bestand voor e-mails
Het bestand dat de e-mails voor de gebruikers bevat, ziet er als volgt uit:
Shubham [email protected]Dit is slechts een eenvoudig tekstbestand dat de naam en het e-mailadres van de gebruiker bevat, gescheiden door spatie. Er zijn meerdere e-mails met de gegevens van elke gebruiker in een nieuwe regel geplaatst. We noemden dit bestand gebruikers.tekst.
De sjabloon gebruiken
Laten we snel ook de sjabloon definiëren die we in ons script zullen gebruiken om waarden te vervangen:
Hallo $PERSON_NAME,We hebben deze e-mail verzonden met de Python smtplib-module. Cool toch?
Fijne dag voor de boeg!
Proost
We hebben een sjabloonstring gebruikt $PERSON_NAME die zal worden vervangen door de naam van de persoon die we van de gebruikers krijgen.txt-bestand tijdens het verzenden van de e-mail.
Gebruikersgegevens ophalen uit bestand
De eerste stap om een e-mail naar een gebruiker te sturen, is bepalen waar we de e-mails naartoe willen sturen. Laten we een Python-functie schrijven die een bestandsnaam accepteert en ons de gebruikersnaam en e-mail-ID's retourneert waar de e-mails naartoe moeten worden verzonden:
def get_users_data(bestandsnaam):gebruikersnaam = []
gebruiker_e-mail = []
met open(file_name, mode='r', encoding='utf-8') als user_file:
voor user_info in user_file:
gebruikersnaam.toevoegen(user_info.split()[0])
gebruiker_e-mail.toevoegen(user_info.splitsen()[1])
retourneer gebruikersnaam, e-mailadres gebruiker
Met deze functie retourneren we gewoon de gebruikersnamen en e-mails die we van het bestand krijgen.
Het sjabloonobject ophalen
Nu kunnen we onze sjabloon ontleden en een sjabloonobject ophalen uit het tekstbestand dat we hebben gemaakt:
def read_template(bestandsnaam):met open(file_name, 'r', encoding='utf-8') als msg_template:
msg_template_content = msg_template.lezen()
retoursjabloon (msg_template_content)
Hiermee krijgen we een sjabloonobject terug dat we kunnen gebruiken om de inhoud van het bestand te ontleden en noodzakelijke vervangingen voor de sjabloonreeksen te maken, zoals een gebruikersnaam.
Hoe e-mailverzending wordt gedaan?
Nu we klaar zijn met het sjabloonontwerp en de gebruikersgegevens, moeten we begrijpen hoe een e-mail daadwerkelijk naar de gebruiker wordt verzonden:
- Maak een SMTP-verbinding met inloggegevens voor het account van de afzender
- Maak een meerdelige koptekst met informatie met de velden Van, Aan en Onderwerp
- Construeer de berichttekst die moet worden verzonden
- Stuur de e-mail met het SMTP-verbindingsobject
SMTP-verbinding instellen
Laten we eindelijk de functie definiëren die de e-mail naar de aangewezen gebruikers zal sturen. Hier is de functie:
def hoofd():user_name, user_email = get_users_data('users'.txt') # lees gebruikersdetails
message_template = read_template('bericht.tekst')
# stel de SMTP-server in
smtplib_server = smtplib.SMTP(host='smtp.gmail.com', poort=587)
smtplib_server.schrikt()
smtplib_server.inloggen (SEND_FROM, EMAIL_PWD)
# Verkrijg elk gebruikersdetail en stuur de e-mail:
voor naam, e-mail in zip (user_name, user_email):
multipart_message = MIMEMultipart() # maak een bericht
# voeg de werkelijke persoonsnaam toe aan de berichtsjabloon
msg = message_template.plaatsvervanger(PERSON_NAME=naam.titel())
# Print de berichttekst voor ons uit
afdrukken (bericht)
# stel de parameters van het bericht in
multipart_message['From']=SEND_FROM
multipart_message['Aan']=e-mail
multipart_message['Subject']="LinuxHint-e-mail"
# toevoegen in de berichttekst
multipart_message.attach(MIMEText(msg, 'plain'))
# stuur het bericht via de eerder ingestelde server.
smtplib_server.send_message(multipart_message)
del multipart_message
# Beëindig de SMTP-sessie en sluit de verbinding
smtplib_server.stoppen()
In de bovenstaande functie hebben we elke stap gevolgd die we in de vorige sectie hebben vermeld:. We hebben de SMTP-verbinding gemaakt en deze gebruikt om de e-mail te verzenden.
Compleet programma
Laten we in het laatste gedeelte eens kijken naar het volledige programma dat kan worden gebruikt om de e-mail naar de aangewezen gebruiker te sturen:
smtplib importerenvan tekenreeksimportsjabloon
van email.mime.multipart import MIMEMultipart
van email.mime.tekst importeren MIMETekst
SEND_FROM = 'mijn-e-mail-hier'
EMAIL_PWD = 'mijn-wachtwoord-hier'
def get_users_data(bestandsnaam):
gebruikersnaam = []
gebruiker_e-mail = []
met open(file_name, mode='r', encoding='utf-8') als user_file:
voor user_info in user_file:
gebruikersnaam.toevoegen(user_info.split()[0])
gebruiker_e-mail.toevoegen(user_info.splitsen()[1])
retourneer gebruikersnaam, e-mailadres gebruiker
def read_template(bestandsnaam):
met open(file_name, 'r', encoding='utf-8') als msg_template:
msg_template_content = msg_template.lezen()
retoursjabloon (msg_template_content)
def hoofd():
user_name, user_email = get_users_data('users'.txt') # lees gebruikersdetails
message_template = read_template('bericht.tekst')
# stel de SMTP-server in
smtplib_server = smtplib.SMTP(host='smtp.gmail.com', poort=587)
smtplib_server.schrikt()
smtplib_server.inloggen (SEND_FROM, EMAIL_PWD)
# Verkrijg elk gebruikersdetail en stuur de e-mail:
voor naam, e-mail in zip (user_name, user_email):
multipart_message = MIMEMultipart() # maak een bericht
# voeg de werkelijke persoonsnaam toe aan de berichtsjabloon
msg = message_template.plaatsvervanger(PERSON_NAME=naam.titel())
# Print de berichttekst voor ons uit
afdrukken (bericht)
# stel de parameters van het bericht in
multipart_message['From']=SEND_FROM
multipart_message['Aan']=e-mail
multipart_message['Subject']="LinuxHint-e-mail"
# toevoegen in de berichttekst
multipart_message.attach(MIMEText(msg, 'plain'))
# stuur het bericht via de eerder ingestelde server.
smtplib_server.send_message(multipart_message)
del multipart_message
# Beëindig de SMTP-sessie en sluit de verbinding
smtplib_server.stoppen()
if __name__ == '__main__':
hoofd()
Wanneer we dit programma uitvoeren met een Gmail-ID, kunt u een probleem als dit tegenkomen:
Gmail SMTP-fout
Dit komt omdat Gmail geen gewone scripts toestaat om de Gmail API te gebruiken. Hiervoor moet u mogelijk de beveiligingsaanmelding in uw Gmail-account uitschakelen. Lees hier hoe je dit voor Gmail doet.
Conclusie
In deze les hebben we gekeken hoe we e-mails kunnen verzenden met Python's smtplib module.