8.1 Lire le courrier
Je pense que nous avons assez exploré les bases du réseau. Passons à quelque chose de plus intéressant — car il y a tellement de choses fascinantes sur le net. Que diriez-vous de lire et envoyer des mails ?
Le courrier électronique est apparu il y a 50 ans, 20 ans avant l'apparition du premier navigateur. À l'époque, des programmes spéciaux étaient utilisés pour envoyer des mails. Qu'est-ce que cela signifie pour nous ? Que le standard (protocole) de travail avec le courrier est aussi simple que bonjour.
Le protocole POP3
(Post Office Protocol version 3) est utilisé pour recevoir des courriels d'un serveur de messagerie. Contrairement à IMAP
, POP3
télécharge généralement les mails sur
l'ordinateur local et les supprime du serveur. En Python, pour
travailler avec POP3
, vous pouvez utiliser la bibliothèque poplib
.
Remarque : Contrairement à POP3, le protocole IMAP (Internet Message Access Protocol) permet de stocker les mails sur le serveur et de synchroniser leur état entre les appareils. IMAP est plus pratique si vous lisez vos mails depuis différents appareils, alors que POP3 est mieux adapté pour stocker les mails localement sur un seul appareil.
Les étapes principales pour obtenir la liste des mails :
- Connexion au serveur de messagerie.
- Authentification.
- Récupération de la liste des mails.
- Téléchargement et lecture des mails.
- Déconnexion du serveur.
Pour écrire notre première application, nous aurons besoin de deux bibliothèques : poplib
et
email
. Si vous ne les avez pas — installez-les. Vous savez déjà comment utiliser le gestionnaire pip
.
Important : Lors de la manipulation de courriers électroniques, prenez toujours des mesures de sécurité. Ne conservez jamais de mots de passe en clair dans le code. Utilisez des variables d'environnement ou des stockages sécurisés pour les informations d'identification. Assurez-vous également que votre code ne soit pas accessible au public pour éviter toute fuite d'informations confidentielles.
1. Connexion et authentification :
Nous nous connectons au serveur de messagerie via SSL
et accédons à la boîte aux lettres avec
les informations d'identification spécifiées.
mailbox = poplib.POP3_SSL(pop3_server)
mailbox.user(username)
mailbox.pass_(password) # Utilisez pass_ pour éviter un conflit avec le mot-clé pass en Python
2. Récupération des informations de la boîte aux lettres :
Nous obtenons le nombre de mails dans la boîte aux lettres.
num_messages = len(mailbox.list()[1])
print(f"Nombre de mails : {num_messages}")
3. Téléchargement et lecture des mails :
Nous téléchargeons et lisons le dernier mail.
# Exemple : Lecture du dernier mail
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("Contenu du dernier mail :")
print(message)
Pour analyser et afficher le contenu, il existe une bibliothèque spéciale —
email
. Elle peut décoder le contenu des mails, y compris les pièces jointes,
les en-têtes et le corps du message.
Voici à quoi ressemblera la version finale de notre client de messagerie.
import poplib
# Informations d'identification
username = 'your_email@example.com'
password = 'your_password'
# Connexion au serveur de messagerie Gmail
pop3_server = 'pop.gmail.com'
mailbox = poplib.POP3_SSL(pop3_server, 995)
# Connexion à la boîte aux lettres
mailbox.user(username)
mailbox.pass_(password) # Utilisez pass_ pour éviter un conflit avec le mot-clé pass en Python
# Récupération des informations de la boîte aux lettres
num_messages = len(mailbox.list()[1])
print(f"Nombre de mails : {num_messages}")
# Exemple : Lecture du dernier mail
if num_messages > 0:
response, lines, octets = mailbox.retr(num_messages)
message = '\n'.join(line.decode('utf-8') for line in lines)
print("Contenu du dernier mail :")
print(message)
# Fermeture de la connexion
mailbox.quit()
Vous pouvez essayer de lire vos mails, assurez-vous simplement d'indiquer le bon
POP3-server
. Par exemple, dans l'exemple ci-dessus, j'ai indiqué les données du serveur Gmail. Si vous avez un autre serveur de messagerie, ses données sont facilement trouvables sur internet.
8.2 Envoyer un mail
Pour envoyer un courrier électronique via le protocole
SMTP
(Simple Mail Transfer Protocol) en Python, vous pouvez
utiliser la bibliothèque intégrée smtplib
. Ce module
fournit des fonctions pour établir une connexion avec un SMTP-server
,
authentifier et envoyer des mails.
Les étapes principales pour envoyer un mail :
- Connexion au
SMTP-server
. - Authentification.
- Création du message.
- Envoi du message.
- Fermeture de la connexion.
1. Connexion au SMTP-server
:
Nous nous connectons au SMTP-server
et passons à une connexion sécurisée avec
TLS
.
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Connexion sécurisée
2. Authentification :
Nous nous connectons au SMTP-server
avec les informations d'identification.
server.login(username, password)
3. Création d'un message simple sous forme de chaîne :
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
4. Envoi du message :
server.sendmail(from_addr, to_addr, message)
5. Fermeture de la connexion :
server.quit()
Cela semble plus simple que la dernière fois, ce qui est une bonne nouvelle.
Le code complet avec la gestion des erreurs ressemblera à ceci :
import smtplib
# Informations d'identification
smtp_server = 'smtp.gmail.com'
smtp_port = 587
username = 'your_email@gmail.com'
password = 'your_app_password' # Utilisez un mot de passe d'application
# Adresses de l'expéditeur et du destinataire
from_addr = 'your_email@gmail.com'
to_addr = 'recipient@example.com'
# Sujet et corps du mail
subject = 'Sujet du mail'
body = 'Ceci est le texte de l\'email.'
# Création du message sous forme de chaîne
message = f"From: {from_addr}\nTo: {to_addr}\nSubject: {subject}\n\n{body}"
try:
# Connexion au SMTP-server
server = smtplib.SMTP(smtp_server, smtp_port)
server.starttls() # Connexion sécurisée
# Authentification
server.login(username, password)
# Envoi du message
server.sendmail(from_addr, to_addr, message)
print("Mail envoyé avec succès !")
except Exception as e:
print(f"Erreur lors de l'envoi du mail : {e}")
finally:
# Fermeture de la connexion
server.quit()
La plupart du code ici ce sont des commentaires et des configurations serveur, en réalité, vous pouvez envoyer un mail en 5 lignes. Essayez, c'est très amusant.
GO TO FULL VERSION