Envoyer un mail avec pièces jointes avec python est simple en utilisant le code ci dessous.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | 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’)
People should read this.
Enfin un article interessant sur le sujet !
Bjr le script ne fonctionne pas avec Python versions 2.7 ?
Traceback (most recent call last):
File « C:/Python27/script Py/Send Mail attachement.py », line 14, in
msg[‘From’] = send_from
NameError: name ‘send_from’ is not defined
Sous quel version tourne le script ?
Thank