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 3762 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 HFortier

  le 17/03/2018

Comment télécharger des vidéo YouTube avec YouTube Downloader

Dans cette vidéo je vous propose de découvrir et tester ensemble WinX Video Downloader, permettant théoriquement de télécharger des vidéos YouTube.

Par johnart23

  le 08/02/2017

Installer des add-ons non signés sous Firefox 48 et +

Dans ce tutoriel, vous allez apprendre à installer des add-ons non signés sous Firefox 48 et +.

Par johnart23

  le 28/03/2017

Comment réinitialiser Votre PC sous Windows 10

Dans ce tutoriel, vous allez apprendre comment réinitialiser votre pc sous Windows 10...

Par L'informaticien

  le 25/04/2018

TUTO : FAIRE UN MONTAGE VIDÉO FACILEMENT [Bolide Movie Creator]

Salut mes frères / soeurs Dans ce tuto je vais vous expliquez Comment FAIRE UN MONTAGE VIDÉO FACILEMENT [Bolide Movie Creator]

Par HFortier

  le 13/11/2016

Coder en h265 avec son GPU NVidia

Quel logiciel et options utiliser pour coder ses vidéos en h.265 avec ses GPU nVidia ? Suivez le guide :)

  Rejoins la communauté !


Tuto Aléatoire