Envoi d'emails
Le protocole SMTP (Simple Mail Transfer Protocol) est un protocole qui permet d'envoyer des courriers électroniques et de les acheminer entre les serveurs de messagerie.
Python fournit le module smtplib
, qui définit un objet de session client SMTP pouvant être utilisé pour envoyer des courriels à toute machine Internet dotée d'un démon d'écoute SMTP ou ESMTP.
Voici une syntaxe simple pour créer un objet SMTP, qui peut ensuite être utilisé pour envoyer un courriel :
import smtplib
smtpObj = smtplib.SMTP( [host [, port [, local_hostname]]] )
Voici le détail des paramètres :
host
- Il s'agit de l'hôte qui exécute votre serveur SMTP. Vous pouvez spécifier l'adresse IP de l'hôte ou un nom de domaine comme microlead.fr. Il s'agit d'un argument facultatif.port
- Si vous fournissez l'argument host, vous devez spécifier le port sur lequel le serveur SMTP écoute. En général, ce port est 25.local_hostname
- Si votre serveur SMTP est exécuté sur votre machine locale, vous pouvez spécifier simplement localhost l'option.
Un objet SMTP possède une méthode d'instance appelée sendmail, qui est typiquement utilisée pour effectuer le travail d'envoi d'un message. Elle prend trois paramètres :
The sender
: Une chaîne de caractères avec l'adresse de l'expéditeur.The receivers
: Une liste de chaînes de caractères, une pour chaque destinataire.The message
: Un message sous forme de chaîne de caractères formatée comme spécifié dans les différents RFC.
Exemple
Voici un moyen simple d'envoyer un e-mail en utilisant un script Python :
#!/usr/bin/python3
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 un message, en utilisant un guillemet triple, en prenant soin de formater correctement les en-têtes. Un e-mail nécessite un en-tête From
, To
, et un Subject
, séparés du corps de l'e-mail par une ligne blanche.
Pour envoyer le courrier, vous utilisez smtpObj
pour vous connecter au serveur SMTP sur la machine locale. Utilisez ensuite la méthode sendmail avec le message, l'adresse de départ et l'adresse de destination comme paramètres (même si les adresses de départ et d'arrivée se trouvent dans l'e-mail lui-même, elles ne sont pas toujours utilisées pour acheminer le courrier).
Si vous ne faites pas tourner un serveur SMTP sur votre machine locale, vous pouvez utiliser le client smtplib pour communiquer avec un serveur SMTP distant. À moins que vous n'utilisiez un service de messagerie Web (tel que gmail ou Yahoo ! Mail), votre fournisseur de messagerie doit vous avoir fourni les détails du serveur de courrier sortant que vous pouvez leur fournir, comme suit :
mail = smtplib.SMTP('smtp.gmail.com', 587)
Envoi d'un email HTML à l'aide de Python
Lorsque vous envoyez un message texte en utilisant Python, tout le contenu est traité comme du texte simple. Même si vous incluez des balises HTML dans un message texte, celui-ci est affiché comme du texte simple et les balises HTML ne seront pas formatées selon la syntaxe HTML. Toutefois, Python offre la possibilité d'envoyer un message HTML en tant que message HTML réel.
Lors de l'envoi d'un message électronique, vous pouvez spécifier une version Mime, un type de contenu et le jeu de caractères pour envoyer un e-mail HTML.
Exemple
Besoin d'aide ?
Rejoignez notre communauté officielle et ne restez plus seul à bloquer sur un problème !