Python - E-mail verzenden met SMTP
Simple Mail Transfer Protocol (SMTP) is een protocol dat zorgt voor het verzenden van e-mail en het routeren van e-mail tussen mailservers.
Python biedt smtplib module, die een SMTP-clientsessieobject definieert dat kan worden gebruikt om e-mail te verzenden naar elke internetmachine met een SMTP- of ESMTP-listenerdaemon.
Hier is een eenvoudige syntaxis om één SMTP-object te maken, dat later kan worden gebruikt om een e-mail te verzenden −
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Hier is het detail van de parameters −
-
host − Dit is de host waarop uw SMTP-server draait. U kunt het IP-adres van de host of een domeinnaam opgeven, zoals tutorialspoint.com. Dit is een optioneel argument.
-
poort − Als u host aanlevert argument, dan moet je een poort specificeren waar de SMTP-server naar luistert. Gewoonlijk is deze poort 25.
-
lokale_hostnaam − Als uw SMTP-server op uw lokale computer draait, kunt u alleen localhost opgeven vanaf deze optie.
Een SMTP-object heeft een instantiemethode genaamd sendmail , die meestal wordt gebruikt om het werk van het verzenden van een bericht te doen. Er zijn drie parameters nodig −
-
De afzender − Een string met het adres van de afzender.
-
De ontvangers − Een lijst met strings, één voor elke ontvanger.
-
Het bericht − Een bericht als een string geformatteerd zoals gespecificeerd in de verschillende RFC's.
Voorbeeld
Hier is een eenvoudige manier om één e-mail te verzenden met behulp van het Python-script. Probeer het een keer −
#!/usr/bin/python import smtplib sender = '[email protected]' receivers = ['[email protected]'] message = """From: From Person <[email protected]> To: To Person <[email protected]> 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 heb je een standaard e-mail in het bericht geplaatst, met behulp van een driedubbele aanhalingstekens, waarbij je ervoor zorgt dat de koppen correct zijn opgemaakt. Een e-mail vereist een Van , Naar , en Onderwerp header, gescheiden van de hoofdtekst van de e-mail met een lege regel.
Om de e-mail te verzenden, gebruikt u smtpObj om verbinding te maken met de SMTP-server op de lokale computer en gebruik vervolgens de sendmail methode samen met het bericht, het van-adres en het bestemmingsadres als parameters (hoewel de van en naar adressen in de e-mail zelf staan, worden deze niet altijd gebruikt om e-mail te routeren).
Als u geen SMTP-server op uw lokale computer gebruikt, kunt u smtplib gebruiken client om te communiceren met een externe SMTP-server. Tenzij u een webmailservice gebruikt (zoals Hotmail of Yahoo! Mail), moet uw e-mailprovider u de gegevens van de server voor uitgaande e-mail hebben verstrekt die u deze als volgt kunt verstrekken −
smtplib.SMTP('mail.your-domain.com', 25)
Een HTML-e-mail verzenden met Python
Wanneer u een sms-bericht verzendt met Python, wordt alle inhoud behandeld als eenvoudige tekst. Zelfs als u HTML-tags in een tekstbericht opneemt, wordt het weergegeven als eenvoudige tekst en worden HTML-tags niet opgemaakt volgens de HTML-syntaxis. Maar Python biedt de mogelijkheid om een HTML-bericht als een echt HTML-bericht te verzenden.
Tijdens het verzenden van een e-mailbericht kunt u een Mime-versie, inhoudstype en tekenset opgeven om een HTML-e-mail te verzenden.
Voorbeeld
Hieronder volgt het voorbeeld om HTML-inhoud als e-mail te verzenden. Probeer het een keer −
#!/usr/bin/python import smtplib message = """From: From Person <[email protected]> To: To Person <[email protected]> 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 <b>This is HTML message.</b> <h1>This is headline.</h1> """ 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 verzenden
Om een e-mail met gemengde inhoud te verzenden, moet u Content-type . instellen koptekst naar multipart/mixed . Vervolgens kunnen tekst- en bijlagesecties worden opgegeven binnen grenzen .
Een grens wordt gestart met twee koppeltekens gevolgd door een uniek nummer, dat niet in het berichtgedeelte van de e-mail kan verschijnen. Een laatste grens die het laatste gedeelte van de e-mail aangeeft, moet ook eindigen met twee koppeltekens.
Bijgevoegde bestanden moeten worden gecodeerd met de pack("m") functie om base64-codering te hebben vóór verzending.
Voorbeeld
Hieronder volgt het voorbeeld dat een bestand /tmp/test.txt . verzendt als een bijlage. Probeer het een keer −
#!/usr/bin/python import smtplib import base64 filename = "/tmp/test.txt" # Read a file and encode it into base64 format fo = open(filename, "rb") filecontent = fo.read() encodedcontent = base64.b64encode(filecontent) # base64 sender = '[email protected]' reciever = '[email protected]' marker = "AUNIQUEMARKER" body =""" This is a test email to send an attachement. """ # Define the main headers. part1 = """From: From Person <[email protected]> To: To Person <[email protected]> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=%s --%s """ % (marker, marker) # Define the message action part2 = """Content-Type: text/plain Content-Transfer-Encoding:8bit %s --%s """ % (body,marker) # Define the attachment section 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
- Python-gegevenstypen
- Python-operators
- Python pass-instructie
- Python-functieargumenten
- Python-woordenboek
- Afhandeling van Python-uitzonderingen met behulp van de instructie try, behalve en tenslotte
- TMP006 Temperature Sensor Python Library met Raspberry pi,
- Python- en Raspberry Pi-temperatuursensor
- Python-gemiddelde:hoe het GEMIDDELDE van een lijst in Python te vinden?
- Verwissel twee Python-variabelen zonder een derde te gebruiken
- Java - E-mail verzenden