Je souhaite envoyer, par programme, des e-mail avec un fichier .pdf en
pièce jointe. Rassurez vous, c'est pas pour spam.
Pour construire le message, je pourrais écrire des suite de chaînes "à
la main", et utiliser base64.encode(open('toto.pdf', 'rb'), txt_pj), mais
il me semble préférable d'utiliser des chose de plus haut niveaux.
Dans le module email, on trouve email.MIMEAudio.MIMIAudio,
email.MIMEImage.MIMIImage, mais pas d'objet générique pour les
pièces-jointes. J'aurais bien immaginé un : email.MIMEAttach.MIMEAttach
(open('toto.pdf', 'rb'), "application/pdf', base64)
Pour ça, les MIMEAudio et MIMEImage me semblent trop spécialisés, et
MIMEBase/MIMEText trop général. Est-ce moi qui n'ai pas compris
l'organisation des email.MIME*, ou email.MIMEAttach manque vraiment pour
avoir qqchose de complet ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Bruno Piguet
Je me réponds à moi-même :
Un des exemples donnés dans la Python Library Reference (paragraphe 12.2.13 dans la version que j'ai consultée) donne une solution, pas complètement automatique, mais relativement courte, quand même :
fp = open(path, 'rb') msg = MIMEBase(maintype, subtype) msg.set_payload(fp.read()) fp.close() # Encode the payload using Base64 Encoders.encode_base64(msg) msg.add_header('Content-Disposition', 'attachment', filename=filename)
Ceci dit, je ne comprend toujours pas pourquoi les images et la musique sont particularisées par rapport aux autres contenus possibles.
Bruno.
Je me réponds à moi-même :
Un des exemples donnés dans la Python Library Reference (paragraphe
12.2.13 dans la version que j'ai consultée) donne une solution, pas
complètement automatique, mais relativement courte, quand même :
fp = open(path, 'rb')
msg = MIMEBase(maintype, subtype)
msg.set_payload(fp.read())
fp.close()
# Encode the payload using Base64
Encoders.encode_base64(msg)
msg.add_header('Content-Disposition', 'attachment', filename=filename)
Ceci dit, je ne comprend toujours pas pourquoi les images et la musique
sont particularisées par rapport aux autres contenus possibles.
Un des exemples donnés dans la Python Library Reference (paragraphe 12.2.13 dans la version que j'ai consultée) donne une solution, pas complètement automatique, mais relativement courte, quand même :
fp = open(path, 'rb') msg = MIMEBase(maintype, subtype) msg.set_payload(fp.read()) fp.close() # Encode the payload using Base64 Encoders.encode_base64(msg) msg.add_header('Content-Disposition', 'attachment', filename=filename)
Ceci dit, je ne comprend toujours pas pourquoi les images et la musique sont particularisées par rapport aux autres contenus possibles.
Bruno.
Michel Claveau - abstraction méta-galactique non triviale en fuite perpétuelle.
Bonsoir !
je ne comprend toujours pas pourquoi les images et la musique sont particularisées par rapport aux autres contenus possibles
C'est parce que c'est défini comme ça dans les RFC (ce qui montre leur limite d'évolutivité).
Sinon, pour des besoins similaires, j'ai dû faire mes propres fonctions de "payloading", en gérant moi-même les "cid:", car, avec les librairies Python, j'ai eu quelques déboires (de détails), genre caractères ajoutés, ou caractères intempestivement convertis en HTML.
@-salutations -- Michel Claveau
Bonsoir !
je ne comprend toujours pas pourquoi les images et la musique sont
particularisées par rapport aux autres contenus possibles
C'est parce que c'est défini comme ça dans les RFC (ce qui montre leur
limite d'évolutivité).
Sinon, pour des besoins similaires, j'ai dû faire mes propres fonctions de
"payloading", en gérant moi-même les "cid:", car, avec les librairies
Python, j'ai eu quelques déboires (de détails), genre caractères ajoutés, ou
caractères intempestivement convertis en HTML.
je ne comprend toujours pas pourquoi les images et la musique sont particularisées par rapport aux autres contenus possibles
C'est parce que c'est défini comme ça dans les RFC (ce qui montre leur limite d'évolutivité).
Sinon, pour des besoins similaires, j'ai dû faire mes propres fonctions de "payloading", en gérant moi-même les "cid:", car, avec les librairies Python, j'ai eu quelques déboires (de détails), genre caractères ajoutés, ou caractères intempestivement convertis en HTML.