Comment envoyer un email avec Python ?  

Partagé par Charlometre le 14/09/2016  —  20 min de lecture

tutoriel-comment-envoyer-un-email-avec-python
5 LIGHTS 3118 PERSONNES AIDÉES  

avatar Charlometre   (Level 4)
Intérêt : Informatique

Ce tuto t'a aidé ? Partage-le !



Pré-requis pour ce tutoriel :

Pour ce tutoriel, vous aurez besoin de :

  • un ordinateur
  • python 2.7 installé (avec les modules de base)


Python, c'est quoi ?

Python est un langage de programmation interprété orienté objet. Il doit sa réputation à sa gratuité, sa compatibilité avec de multiples plateformes (windows, linux, max, android, ...), sa facilité de prise en main, et sa diversité d'utilisations. Parmi elles, nous retrouvons :

  • le codage applications mobiles, de sites WEB (YouTube, Google), de logiciels (Blender, QGis, FreeCad, The Gimp, InkScape, ...), de jeux ;
  • le calcul scientifique (calcul matriciel, graphiques, traitement d'image, calcul statistiques, ...). La NASA l'utilise ;
  • la possibilité de coder des plugins, des extensions, et des pilotes ;
  • le scripting

C'est cette dernière utilisation qui va nous intéresser pour ce tutoriel. Python excelle dans la récupération de paramètres, le parsing d’un fichier, les petits scripts rapides, etc. Il est alors possible d'automatiser des tâches simples mais fastidieuses et/ou répétitives, comme un script qui récupérerait la météo sur Internet, ou qui s'intégrerait dans un logiciel de conception assistée par ordinateur.

Python pour envoyer des mails ?

Comme je viens de dire, Python est parfait pour effectuer des petites tâches de manières automatiques. Mais pourquoi vouloir envoyer des mails avec Python alors que vous avez une boite mail (Gmail, yahoo, hotmail, ...) ?

Imaginez que vous êtes le patron d'un entreprise. Vous pouvez coder un script qui regarde tous les mois le tableur Excel contenant les heures de vos employés, et qui envoi automatiquement un mail à ceux qui ont mal remplis le tableau, qui ont fait trop ou pas assez d'heures dans le mois. :) Selon le même principe, vous pouvez coder un script qui lit le tableau Excel contenant les affaires en cours (factures à payer, factures déjà payée, etc.), et qui vous envoi un mail récapitulatif de comptabilité, ou qui envoient un mail de relance à vos clients !

Si vous n'êtes pas chef d'entreprise, vous pouvez par exemple coder un script qui vérifie toutes les 10min le profil Facebook de votre homme politique préféré, et qui vous envoi un mail lors d'un nouveau statut !

Comment marche une boite mail ?

Utiliser par un grand nombre d'entre vous, j'utiliserai une boite de messagerie Gmail pour ce tutoriel.

Avant de rentrer dans le code, il faut d'abord comprendre comment fonctionne une boite mail. Je ne rentrerai pas ici dans les détails mais sachez qu'une boite mail possède deux serveurs : l'un pour le courrier entrant (serveur entrant POP3 ou IMAP), et pour le courrier sortant (serveur sortant SMTP). Comment nous envoyons le courrier, nous nous intéresserons ici uniquement au serveur sortant (smtp.gmail.com pour Gmail). Il faudra également vous munir du port et du type de sécurisation pour ce serveur sortant (port 587 et sécurisation TLS pour Gmail).

Attention : le serveur sortant, son port, et son type de sécurisation ne sont pas les mêmes pour tous les clients de messagerie. Renseignez-vous si vous utiliser un autre compte que Gmail.

Enfin, il faudra connaître votre adresse de messagerie ainsi que le mot de passe associé.

Attention : Gmail a modifié certains protocoles de sécurité. Vous devez désormais autoriser les “Applications moins sécurisées” sur votre compte pour pouvoir envoyer des courriels avec des scripts en Python.

Envoi d'un mail simple

Ce script est simple, mais ne permet pas de saisir d'objet, de destinataire en copie cachée, d'envoyer de pièces jointes ...

Pour ce code, vous aurez besoin du module smtplib (natif avec Python). 

import smtplib    ## Importation du module
serveur = smtplib.SMTP('smtp.gmail.com', 587)    ## Connexion au serveur sortant (en précisant son nom et son port)
serveur.starttls()    ## Spécification de la sécurisation
serveur.login("VOTRE ADRESSE MAIL", "VOTRE MOT DE PASSE")    ## Authentification
message = "VOTRE MESSAGE"    ## Message à envoyer
serveur.sendmail("VOTRE ADRESSE MAIL", "ADRESSE MAIL DU DESTINATAIRE", message)    ## Envoie du message
serveur.quit()    ## Déconnexion du serveur

Envoi d'un mail complet

Ce script permet l'envoi de mail  de façon plus "propre" (avec l'expéditeur, le destinataire, et l'objet spécifié).

Pour ce code, vous aurez besoin des modules smtplib, email.MIMEMultipart, et email.MIMEText(natifs avec Python).

 ## Importation des modules
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
  
Fromadd = "VOTRE ADRESSE MAIL"
Toadd = "ADRESSE MAIL DU DESTINATAIRE"    ##  Spécification des destinataires
cc = ["ADRESSE MAIL DU 1er DESTINATAIRE", "ADRESSE MAIL DU 2nd DESTINATAIRE"]    ## Spécification des destinataires en copie carbone (cas de plusieurs destinataires)
bcc = "ADRESSE MAIL DU 3ème DESTINATAIRE"    ## Spécification du destinataire en copie cachée (en copie cachée)
message = MIMEMultipart()    ## Création de l'objet "message"
message['From'] = Fromadd    ## Spécification de l'expéditeur
message['To'] = Toadd    ## Attache du destinataire à l'objet "message"
message['CC'] = ",".join(cc)    ## Attache des destinataires en copie carbone à l'objet "message" (cas de plusieurs destinataires)
message['BCC'] = bcc    ## Attache du destinataire en copie cachée à l'objet "message"
message['Subject'] = "SUJET DE VOTRE MAIL"    ## Spécification de l'objet de votre mail
msg = "VOTRE MESSAGE"    ## Message à envoyer
messageattach(MIMEText(msg.encode('utf-8'), 'plain', 'utf-8'))    ## Attache du message à l'objet "message", et encodage en UTF-8
 
serveur = smtplib.SMTP('smtp.gmail.com', 587)    ## Connexion au serveur sortant (en précisant son nom et son port)
serveur.starttls()    ## Spécification de la sécurisation
serveur.login(Fromadd, "VOTRE MOT DE PASSE")    ## Authentification
texte= message.as_string().encode('utf-8')    ## Conversion de l'objet "message" en chaine de caractère et encodage en UTF-8
Toadds = [Toadd] + cc + [bcc]    ## Rassemblement des destinataires
serveur.sendmail(Fromadd, Toadds, texte)    ## Envoi du mail
serveur.quit()    ## Déconnexion du serveur

Envoi d'un mail avec pièce jointe

Il n'est pas si facile d'envoyer une pièce jointe avec Python. L'essentiel est de convertir le fichier à joindre en Base64 avant de l'envoyer. Ce code fonctionne pour l'envoi de fichier texte, pdf, images, vidéo, et audio. Il est basé sur le code précédent afin que la compréhension soit la plus facile possible.

 ## Importation des modules
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email.MIMEBase import MIMEBase
from email import encoders
  
Fromadd = "VOTRE ADRESSE MAIL"
Toadd = "ADRESSE MAIL DU DESTINATAIRE"    ##  Spécification des destinataires
message = MIMEMultipart()    ## Création de l'objet "message"
message['From'] = Fromadd    ## Spécification de l'expéditeur
message['To'] = Toadd    ## Attache du destinataire à l'objet "message"
message['Subject'] = "SUJET DE VOTRE MAIL"    ## Spécification de l'objet de votre mail
msg = "VOTRE MESSAGE"    ## Message à envoyer
messageattach(MIMEText(msg.encode('utf-8'), 'plain', 'utf-8'))    ## Attache du message à l'objet "message", et encodage en UTF-8

nom_fichier = "NOM DU FICHIER AVEC SON EXTENTION"    ## Spécification du nom de la pièce jointe
piece = open("CHEMIN DU FICHIER", "rb")    ## Ouverture du fichier
part = MIMEBase('application', 'octet-stream')    ## Encodage de la pièce jointe en Base64
part.set_payload((piece).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "piece; filename= %s" % nom_fichier)
msg.attach(part)    ## Attache de la pièce jointe à l'objet "message" 

serveur = smtplib.SMTP('smtp.gmail.com', 587)    ## Connexion au serveur sortant (en précisant son nom et son port)
serveur.starttls()    ## Spécification de la sécurisation
serveur.login(Fromadd, "VOTRE MOT DE PASSE")    ## Authentification
texte= message.as_string().encode('utf-8')    ## Conversion de l'objet "message" en chaine de caractère et encodage en UTF-8
serveur.sendmail(Fromadd, Toadd, texte)    ## Envoi du mail
serveur.quit()    ## Déconnexion du serveur




avatar Charlometre   (Level 4)
Intérêt : Informatique

Ce tuto t'a aidé ? Partage-le !



Tu as toi aussi des astuces ou des compétences à partager ? Ou tu souhaites tout simplement apprendre ? Rejoins notre communauté en t'inscrivant !


Commentaires (1)

Connecte-toi ou inscris-toi pour rédiger un avis.

Posté par FrancoisYFT

  le 14 déc. 2018 à 13h09
Bonjour,
Sauf erreur de ma part mais il y a deux erreurs :
- ligne 15 : messageattach(MIMEText(msg.encode('utf-8'), 'plain', 'utf-8')) , n'existe pas il manque un point =>message.attach(MIMEText(msg.encode('utf-8'), 'plain', 'utf-8'))
- ligne23 : msg.attach(part) , "msg" est un str, c 'est "message" le MIMEmultipart() => message.attach(part)

python3.6.

Merci pour ces tutos.

Lis aussi . . .

Par L'informaticien

  le 19/05/2018

Effacer et vider définitivement les données d'un disque dur

Salut mes frères / soeurs Dans ce tuto je vais vous expliquez Comment effacer et vider définitivement les données d'un disque dur

Par ThibaudArros

  le 23/08/2016

Comment savoir qui consulte son profil Facebook

Dans ce tutoriel vous découvrirez une astuce pour savoir qui a consulté votre profil Facebook dernièrement.

Par CRFormations

  le 07/03/2017

Trouver des photos HD et libres de droit via Unsplash

Vous trouverez sur Unsplash des photos HD gratuites et libres de droit, sous la licence Creative Commons Zero.

Par L'informaticien

  le 26/01/2017

Comment avoir les clés d'activation de n'importe quel logiciel gratuitement ?

Salut Dans cette vidéo, je vais vous montrer comment avoir des clés d'activation (Serials) de n'importe quel logiciel gratuitement

Par L'informaticien

  le 28/08/2017

5Kplayer: le meilleure lecteur multimédia supporte 5K +téléchargement des vidéos

Salut Dans cette vidéo, je vais vous montrer le meilleure lecteur multimédia supporte 5K +téléchargement des vidéos youtube, vimeo..

  Rejoins la communauté !


Tuto Aléatoire