Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Industrial programming >> Python

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 −

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 −

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 = 'from@fromdomain.com'
receivers = ['to@todomain.com']

message = """From: From Person <from@fromdomain.com>
To: To Person <to@todomain.com>
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 <from@fromdomain.com>
To: To Person <to@todomain.com>
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 = 'webmaster@tutorialpoint.com'
reciever = 'amrood.admin@gmail.com'

marker = "AUNIQUEMARKER"

body ="""
This is a test email to send an attachement.
"""
# Define the main headers.
part1 = """From: From Person <me@fromdomain.net>
To: To Person <amrood.admin@gmail.com>
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

  1. Python - Envoi d'e-mails à l'aide de SMTP
  2. Tutoriel SciPy en Python :qu'est-ce que c'est | Exemples de bibliothèque et de fonctions
  3. Opérateurs Python
  4. Erreurs Python et exceptions intégrées
  5. Migrer vers Python 3
  6. Accès Internet Python en utilisant Urllib.Request et urlopen()