Mis a jour le 2025-04-14, 12:10

Manipulation des mails

Envoi et lecture de mails

Envoi de mail :
  • Utiliser le package smtplib : import smtplib.
  • envoi d'un mail simple :
    import smtplib
    import email.mime.text
    smtp = smtplib.SMTP('serveurmail.domain.com') # le nom du serveur de mail
    msg = email.mime.text.MIMEText('Le contenu du mail')
    msg['Subject'] = 'le sujet du mail'
    msg['From'] = 'expediteur@domain.com' # pour l'affichage
    msg['To'] = 'destinataire@otherDomain.com' # pour l'affichage
    msg['Cc'] = 'destinataire2@otherDomain.com' # pour l'affichage
    # envoi du mail avec l'expediteur et les destinataires
    smtp.sendmail('expediteur@domain.com',
                  ['destinataire@otherDomain.com', 'destinataire2.com'],
                  msg.as_string())
    smtp.quit()
        
  • s'il y a un problème, une exception est générée.
Lecture de mails sur un serveur imap :
  • on peut utiliser le package imaplib et aussi le package email.
  • Lecture de la liste de mails avec leur expéditeur et leur sujet :
    import imaplib
    import email
    imap = imaplib.IMAP4('serveurmail.domain.com')
    imap.login('monLogin', 'monPassword')
    (status, res) = imap.list()
    # renvoie ('OK', ['nombre de messages']) ou sinon ('NO', ['message erreur'])
    (status, numberMessages) = imap.select('INBOX')
    print (status, 'Nombre de messages = ', numberMessages)
    # renvoie par exemple ('OK', ['1 2 3 4 5']) qui sont les numéros des messages.
    (status, searchRes) = imap.search(None, 'ALL')
    # Récupération des numéros des messages
    ids = searchRes[0].split()
    for i in range(len(ids)):
        # Récupère seulement l'expéditeur et le sujet dans le header
        (status, res) = imap.fetch(ids[i], '(BODY[HEADER.FIELDS (FROM SUBJECT)])')
        for responsePart in res:
            if isinstance(responsePart, tuple):
                msg = email.message_from_string(responsePart[1])
                sender = msg['from']
                subject = msg['subject']
                print('expediteur : ', sender)
                print('sujet : ', subject)
    imap.close()
    imap.logout()
        

manipulation des mailboxes

Il y a 2 classes utilisées dans le package mailbox :
  • Mailbox qui est une classe de base que l'on instantie pas. On utilise l'un de ses classes dérivées en fonction du format de boite mail : Maildir, mbox, MH, Babyl, MMDF.
  • Message qui dérive de email.message.Message et dont dérivent des classes en fonction du format MaildirMessage, mboxMessage, MHMessage, BabylMessage, MMDFMessage.

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert