CodeGym /Cours /Python SELF FR /Travailler avec le courrier

Travailler avec le courrier

Python SELF FR
Niveau 24 , Leçon 2
Disponible

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.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION