mail

simple envoi de mail

 
def email(emetteur, Destinataire, sujet, message, smtpServer):
     
    import smtplib
    from email.mime.text import MIMEText
     
    server = smtplib.SMTP(smtpServer)
    server.set_debuglevel(1)
 
    msg = MIMEText(message)
    msg['Subject'] = sujet
    msg['From'] = emetteur
    #msg['To'] = Destinataire 

 

Envoi plus complexe

 

# -*- coding: iso-8859-1 -*-
 
def sendMail(emetteur, lstDestinataires, sujet, lstFichiers, message, smtpServer):
    """     
        Ceci est une reprise du programme mxmail. 
        24/03/2006 -utilisation du module email
        Source http://wikipython.flibuste.net/moin.py/email
         
        emetteur    = email de l'emetteur
        lstDestinataires= email des destinataires séparateur ,
        sujet        = sujet du mail
        lstFichiers    = liste des fichiers joints séparateur ,
        message        = message du mail
        smtpServer    = serveur smtp
    """
    import string, sys, types, os, tempfile, time
    import email
    from email import Encoders
    from email.MIMEAudio import MIMEAudio
    from email.MIMEBase import MIMEBase
    from email.MIMEImage import MIMEImage
    from email.MIMEMultipart import MIMEMultipart
    from email.MIMEText import MIMEText
    import mimetypes
    import smtplib
 
    def FICHIER( chemin ):
        """Guess the content type based on the file's extension. Encoding
        will be ignored, altough we should check for simple things like
        gzip'd or compressed files."""
        ctype, encoding = mimetypes.guess_type(chemin)
        if ctype is None or encoding is not None:
            # No guess could be made, or the file is 
            #encoded (compresses), so
            # use a generic bag-of-bits type.
             
            # original 'application.octet-stream'
            ctype = 'application/octet-stream' 
        maintype, subtype = ctype.split('/', 1) 
        if maintype == 'text':
            fp = open(chemin)
            # Note : we should handle calculating the charset
            msg = MIMEText(fp.read(), _subtype=subtype)
            fp.close()
        elif maintype == 'image':
            fp = open(chemin, 'rb')
            msg = MIMEImage(fp.read(), _subtype=subtype)
            fp.close()
        elif maintype == 'audio':
            fp = open(chemin, 'rb')
            msg = MIMEAudio(fp.read(), _subtype=subtype)
            fp.close()
        else:
            fp = open(chemin, 'rb')
            msg = MIMEBase(maintype, subtype)
            msg.set_payload(fp.read())
            fp.close()
            # Encode the payload using Base64
            Encoders.encode_base64(msg)
        # Set the filename parameter
        fichier = os.path.basename(chemin)
        msg.add_header('Content-Disposition','attachment',filename=fichier)
        return msg
 
    class mxmMail:
        """
        mxmMail est client e-mail qui permet d'envoyer un e-mail de la même façon
        qu'en utilisant un simple client e-mail comme outlook express ou le client
        mail de netscape.
        Licence: TIUISICIIDC (Take it, use it, sell it, change it. I dont care.)
        contact: maxm@normik.dk, maxmcorp@worldonline.dk, maxm@mxm.dk
        """
 
        def __init__(self, fromName='', fromAddress='', subject='', message='', SMTPServer=''):
            self.fromName     = fromName
            self.fromAddress  = fromAddress
            self.subject      = subject
            self.message      = message
            self.recipients   = []
            self.attachments  = []
            self.SMTPServer   = SMTPServer
 
        def __str__(self):
            return self.message
 
        def prepend(self, text):
            """
            Ajoute une chaine avant le corps du message.
            """
            self.message = text + self.message
 
        def append(self, text):
            """
            Ajoute une chaine après le corps du message.
            """
            self.message = self.message + text
 
        def prependFile(self, fileName):
            """
            Cette méthode ajoute le contenu d'un fichier texte avant le corps du
            message.
            Une utilisation est d'ajouter fichier d'entête commun au début du
            message.
            Cela peut être fait plusieurs fois pour ajouter différents fichiers
            texte dans un ordre spécifique.
            Si le fichier ne peut être ouvert, la méthode va échouer silencieusement.
            C'est un choix délibéré pour que les mailings automatiques ne soient pas
            arrêtés par des fichiers entêtes/pieds manquants.
            """
            try:
                file = open(fileName)
                self.prepend(file.read())
            except:
                pass # Just fail silently
 
        def appendFile(self, fileName):
            """
            Cette méthode ajoute le contenu d'un fichier texte avant le corps du
            message.
            Une utilisation est d'ajouter un fichier signature à la fin du message.
            Cela peut être fait plusieurs fois pour ajouter différents fichiers
            texte dans un ordre spécifique.
            Si le fichier ne peut être ouvert, la méthode va échouer silencieusement.
            C'est un choix délibéré pour que les mailings automatiques ne soient pas
            arrêtés par des fichiers entêtes/pieds manquants.
            """
            try:
                file = open(fileName)
                self.append(file.read())
            except:
                pass # Just fail silently
 
        def recipientAppend(self, toName, toAddress):
            """
            Ajoute un destinataire de plus au message.
            """
            self.recipients.append({'toName':toName, 'toAddress':toAddress})
 
        def setRecipients(self, recipients=[]):
            self.recipients = recipients
 
        def attachmentAppend(self, fileName):
            """
            Ajoute une pièce jointe au message. Elle est automatiquement converti
            dans un type mime.
            """
            self.attachments.append(fileName)
 
        def send(self):
 
            """Envoie le message."""
            message = MIMEMultipart()
            message['From'] = self.fromAddress
            message['Subject'] = self.subject
 
            recipientList = []
            for recipient in self.recipients:
                recipientList.append(recipient['toAddress'])
 
            adressList = string.join(recipientList, '; ')
            message['To'] = adressList
            if type(self.message) == str:
                message.attach( MIMEText(self.message) )
            elif type(self.message) == unicode:
                message.attach( MIMEText(self.message.encode('utf-8'), 'plain', 'utf-8') )
             
            for attachFile in self.attachments:
                # encodes the attached files
                if type(attachFile) == types.StringType:
                    fileName = attachFile
                    filePath = attachFile
                elif type(attachFile) == types.TupleType and len(attachFile) == 2:
                    filePath,fileName = attachFile
                else:
                    raise "Attachments Error: must be pathname string or path,filename tuple"
                message.attach( FICHIER(attachFile) )
            #try:
            server = smtplib.SMTP(self.SMTPServer)
            server.sendmail(self.fromAddress, recipientList, message.as_string())
            #finally:
            server.quit()
 
        def save(self, fileName):
            """
            Saves the message to a file. Including attachements and pre/appended files.
            """
            file = open(fileName, 'w')
            file.write(str(self))
            file.close()
 
 
    # mail pièces jointes
    # mail_att = $log,$log_sys,$log_param
    myMail = mxmMail('',emetteur ,sujet, message, smtpServer)
     
    for dst in lstDestinataires.split(','):
        myMail.recipientAppend(dst,dst)
     
    for pj in lstFichiers.split(','):
        if pj!='':
            myMail.attachmentAppend(pj)
     
    myMail.send()
 
 
 
def simpleMail(emetteur, Destinataire, sujet, message, smtpServer):
    import smtplib
    server = smtplib.SMTP(smtpServer)
    server.set_debuglevel(1)
    server.sendmail(emetteur, Destinataire, message)
    server.quit()

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *