E-mail verzenden in Python met SMTP: Snelle & Eenvoudige Gids
Simple Mail Transfer Protocol (SMTP) is een protocol dat het versturen van e-mail en het routeren van e-mail tussen mailservers afhandelt.
Python biedt de smtplib-module, die een SMTP-clientsessie-object definieert dat gebruikt kan worden om mail te sturen naar elke internetmachine met een SMTP- of ESMTP-listener-daemon.
Hier is een eenvoudige syntaxis om een SMTP-object aan te maken, dat later gebruikt kan worden om een e-mail te sturen:
import smtplib smtpObj = smtplib.SMTP([host[, port[, local_hostname]]])
Details van de parameters:
host - Dit is de host waarop uw SMTP-server draait. U kunt het IP-adres van de host of een domeinnaam zoals tutorialspoint.com opgeven. Dit is een optioneel argument.
port - Als u het host-argument opgeeft, moet u een poort opgeven waar de SMTP-server luistert. Meestal is dit poort 25.
local_hostname - Als uw SMTP-server op uw lokale machine draait, kunt u gewoon localhost als deze optie opgeven.
Een SMTP-object heeft een instantie-methode genaamd sendmail, die doorgaans gebruikt wordt om het werk van het mailen van een bericht te doen. Het neemt drie parameters:
De afzender - Een string met het adres van de afzender.
De ontvangers - Een lijst van strings, één voor elke ontvanger.
Het bericht - Een bericht als een string geformatteerd zoals gespecificeerd in de diverse RFC's.
Voorbeeld
Hier is een eenvoudige manier om één e-mail te sturen met een Python-script. Probeer het eens:
#!/usr/bin/python import smtplib sender = 'from@fromdomain.com' receivers = ['to@todomain.com'] message = """From: From PersonTo: To Person Subject: SMTP e-mail test This is a test e-mail message. """ try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print "Successfully sent email" except SMTPException: print "Error: unable to send email"
Hier heeft u een basis e-mail in message geplaatst, met behulp van een trippel quote, rekening houdend met het correct formatteren van de headers. Een e-mail vereist een From, To en Subject header, gescheiden van de body van de e-mail met een lege regel.
Om de mail te versturen gebruikt u smtpObj om verbinding te maken met de SMTP-server op de lokale machine en vervolgens de sendmail-methode samen met het bericht, het van-adres en het bestemmingadres als parameters (hoewel de van- en naar-adressen binnen de e-mail zelf staan, worden deze niet altijd gebruikt om mail te routeren).
Als u geen SMTP-server op uw lokale machine draait, kunt u de smtplib-client gebruiken om te communiceren met een externe SMTP-server. Tenzij u een webmail-service gebruikt (zoals Hotmail of Yahoo! Mail), moet uw e-mailprovider u de uitgaande mailservergegevens hebben verstrekt die u kunt opgeven als volgt:
smtplib.SMTP('mail.uw-domein.com', 25)
Een HTML e-mail versturen met Python
Wanneer u een tekstbericht verstuurt met Python, worden alle inhoud als platte tekst behandeld. Zelfs als u HTML-tags in een tekstbericht opneemt, wordt het weergegeven als platte tekst en worden HTML-tags niet geformatteerd volgens HTML-syntaxis. Maar Python biedt de optie om een HTML-bericht als daadwerkelijk HTML-bericht te versturen.
Tijdens het versturen van een e-mailbericht kunt u een MIME-versie, content-type en character set opgeven om een HTML e-mail te versturen.
Voorbeeld
Hieronder volgt het voorbeeld om HTML-inhoud als e-mail te versturen. Probeer het eens:
#!/usr/bin/python import smtplib message = """From: From PersonTo: To Person MIME-Version: 1.0 Content-type: text/html Subject: SMTP HTML e-mail test This is an e-mail message to be sent in HTML format This is HTML message. This is headline.
""" try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, receivers, message) print "Successfully sent email" except SMTPException: print "Error: unable to send email"
Bijlagen als E-mail Versturen
Om een e-mail met gemengde inhoud te versturen, moet u de Content-type-header instellen op multipart/mixed. Vervolgens kunnen tekst- en bijlagsecties binnen grenzen worden gespecificeerd.
Een grens begint met twee streepjes gevolgd door een uniek nummer, dat niet in het berichtendeel van de e-mail mag voorkomen. Een eindgrens die de laatste sectie van de e-mail aanduidt, moet ook eindigen met twee streepjes.
Bijgevoegde bestanden moeten gecodeerd worden met de pack("m")-functie om base64-codering te hebben voordat ze worden verzonden.
Voorbeeld
Hieronder volgt het voorbeeld dat een bestand /tmp/test.txt als bijlage verstuurt. Probeer het eens:
#!/usr/bin/python import smtplib import base64 filename = "/tmp/test.txt" # Een bestand lezen en coderen in base64-formaat fo = open(filename, "rb") filecontent = fo.read() encodedcontent = base64.b64encode(filecontent) sender = 'webmaster@tutorialpoint.com' reciever = 'amrood.admin@gmail.com' marker = "AUNIQUEMARKER" body =""" This is a test email to send an attachment. """ # De hoofheaders definiëren. part1 = """From: From PersonTo: To Person Subject: Sending Attachment MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) # De berichtactie definiëren part2 = """Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body, marker) # De bijlagsectie definiëren part3 = """Content-Type: multipart/mixed; name="%s" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename=%s %s --%s-- """ % (filename, filename, encodedcontent, marker) message = part1 + part2 + part3 try: smtpObj = smtplib.SMTP('localhost') smtpObj.sendmail(sender, reciever, message) print "Successfully sent email" except Exception: print "Error: unable to send email"
Python
- TMP006 Infrarood temperatuursensor met Raspberry Pi: Python bibliotheek & installatiegids
- Een externe temperatuursensor bouwen met Raspberry Pi en Python – Stap-voor-stap handleiding
- Python Datatypes onder de knie krijgen: Een praktische gids
- Python Operators onder de knie krijgen: Een uitgebreide gids
- Python Pass Statement onder de knie krijgen: Een praktische gids
- Python Functie-argumenten onder de knie krijgen: Positionele, Keyword en Default Parameters
- Python-dictionaries beheersen: aanmaken, manipuleren en geavanceerde technieken
- Python-exception handling: try, except, else en finally uitgelegd
- Gemiddeldes Berekenen in Python: Een Praktische Gids
- Twee Python-variabelen moeiteloos wisselen zonder tijdelijke variabele
- E-mails versturen in Java: Een stapsgewijze handleiding