Envoyer un mail avec pièces jointes avec python est simple en utilisant le code ci dessous.
import smtplib import os from email.MIMEMultipart import MIMEMultipart from email.MIMEBase import MIMEBase from email.MIMEText import MIMEText from email.Utils import COMMASPACE, formatdate from email import Encodersdef send_mail(send_from, send_to, subject, text, files=[], server="localhost"): assert type(send_to)==list assert type(files)==list msg = MIMEMultipart() msg['From'] = send_from msg['To'] = COMMASPACE.join(send_to) msg['Date'] = formatdate(localtime=True) msg['Subject'] = subject msg.attach( MIMEText(text) ) for f in files: part = MIMEBase('application', "octet-stream") print f part.set_payload( open(f,"rb").read()) Encoders.encode_base64(part) part.add_header('Content-Disposition', 'attachment; filename="%s"' % os.path.basename(f)) msg.attach(part) smtp = smtplib.SMTP(server) smtp.sendmail(send_from, send_to, msg.as_string()) smtp.close() retour = "Une erreur s'est produite lors de l'envoi de mail" files = [ 'monfichier1.zip', '/tmp/le_fichier.pdf' ] # les pièces jointes avec leur chemin destinataires = [ 'moi@monsite.com', 'moncopain@chez.lui' ] try: send_mail('expediteur@monsite.com', destinataires , "Sujet du mail", "Texte du message",files , 'smtp.free.fr') except: send_mail('expediteur@monsite.com', [ 'adresse@secours.fr'] , " [ERROR ] Sujet du message", retour ,[] , 'smtp.free.fr')
C’est tout!
Ah, si!
- N’utilisez pas ceci à tout va: il est facile de se faire blacklister avec l’étiquette « spammeur ». Et il est très difficile de se faire dé-blacklister.
- Attention à la taille des pièces jointes. Si vous dépassez la taille limite de votre FAI (30Mo chez free), une erreur bloque le script avec un message du type: smtplib.SMTPSenderRefused: (552, ‘Message size exceeds fixed limit’, ‘expediteur@monsite.com’)