Python - Envoi d'e-mails à l'aide de SMTP
Page PrécédentePage Suivante
Le protocole SMTP (Simple Mail Transfer Protocol) est un protocole qui gère l'envoi et le routage des e-mails entre les serveurs de messagerie.
Python fournit smtplib module, qui définit un objet de session client SMTP qui peut être utilisé pour envoyer du courrier à n'importe quelle machine Internet avec un démon d'écoute SMTP ou ESMTP.
Voici une syntaxe simple pour créer un objet SMTP, qui pourra ensuite être utilisé pour envoyer un e-mail −
import smtplib smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Voici le détail des paramètres −
-
hôte − Il s'agit de l'hôte exécutant votre serveur SMTP. Vous pouvez spécifier l'adresse IP de l'hôte ou un nom de domaine comme tutorialspoint.com. Ceci est un argument facultatif.
-
port − Si vous fournissez un hôte argument, alors vous devez spécifier un port, où le serveur SMTP écoute. Habituellement, ce port serait 25.
-
local_hostname − Si votre serveur SMTP s'exécute sur votre machine locale, vous pouvez spécifier uniquement localhost à partir de cette option.
Un objet SMTP a une méthode d'instance appelée sendmail , qui est généralement utilisé pour effectuer le travail d'envoi d'un message. Il faut trois paramètres −
-
L'expéditeur − Une chaîne avec l'adresse de l'expéditeur.
-
Les récepteurs − Une liste de chaînes, une pour chaque destinataire.
-
Le message − Un message sous forme de chaîne formatée comme spécifié dans les différentes RFC.
Exemple
Voici un moyen simple d'envoyer un e-mail en utilisant le script Python. Essayez-le une fois −
#!/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"
Ici, vous avez placé un e-mail de base dans le message, en utilisant un triple guillemet, en prenant soin de formater correctement les en-têtes. Un e-mail nécessite un De , À , et Objet en-tête, séparé du corps de l'e-mail par une ligne vide.
Pour envoyer le courrier, vous utilisez smtpObj pour se connecter au serveur SMTP sur la machine locale, puis utiliser le sendmail avec le message, l'adresse d'expédition et l'adresse de destination comme paramètres (même si les adresses d'expédition et de destination se trouvent dans l'e-mail lui-même, elles ne sont pas toujours utilisées pour acheminer le courrier).
Si vous n'exécutez pas de serveur SMTP sur votre machine locale, vous pouvez utiliser smtplib client pour communiquer avec un serveur SMTP distant. Sauf si vous utilisez un service de messagerie Web (tel que Hotmail ou Yahoo! Mail), votre fournisseur de messagerie doit vous avoir fourni les détails du serveur de messagerie sortant que vous pouvez lui fournir, comme suit −
smtplib.SMTP('mail.your-domain.com', 25)
Envoi d'un e-mail HTML à l'aide de Python
Lorsque vous envoyez un message texte à l'aide de Python, tout le contenu est traité comme du texte simple. Même si vous incluez des balises HTML dans un message texte, celui-ci s'affiche sous forme de texte simple et les balises HTML ne seront pas formatées selon la syntaxe HTML. Mais Python offre l'option d'envoyer un message HTML en tant que message HTML réel.
Lors de l'envoi d'un e-mail, vous pouvez spécifier une version Mime, un type de contenu et un jeu de caractères pour envoyer un e-mail HTML.
Exemple
Voici l'exemple d'envoi de contenu HTML par e-mail. Essayez-le une fois −
#!/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"
Envoi de pièces jointes par e-mail
Pour envoyer un e-mail avec un contenu mixte, il faut définir Content-type en-tête vers multipart/mixed . Ensuite, les sections de texte et de pièces jointes peuvent être spécifiées dans les limites .
Une limite commence par deux traits d'union suivis d'un numéro unique, qui ne peut pas apparaître dans la partie message de l'e-mail. Une limite finale indiquant la dernière section de l'e-mail doit également se terminer par deux tirets.
Les fichiers joints doivent être encodés avec le pack("m") fonction pour avoir l'encodage base64 avant la transmission.
Exemple
Voici l'exemple, qui envoie un fichier /tmp/test.txt en pièce jointe. Essayez-le une fois −
#!/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
- Types de données Python
- Opérateurs Python
- Instruction de passe Python
- Arguments de la fonction Python
- Dictionnaire Python
- Gestion des exceptions Python à l'aide de l'instruction try, except et finally
- Bibliothèque Python du capteur de température TMP006 utilisant Raspberry pi,
- Capteur de température Python et Raspberry Pi
- Python Average :Comment trouver la MOYENNE d'une liste en Python