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()