Quand on commence à exploiter la puissance de linux pour automatiser certaines tâches, il arrive un moment où l’on a besoin d’envoyer des emails avec des pièces-jointes...
Or, automatiser l’envoi d’emails avec des pièces jointes n’est pas évident a priori. Certains logiciels permettent de le faire (Mutt par exemple, mais aussi pas mal d’autres), mais ce n’est soit pas assez flexible, soit pas assez simple, etc...
Bref, le plus simple que j’ai trouvé consiste en un petit (enfin tout est relatif quand même) script en Python.
L’auteur de la version originale de ce script est Laurent Pointal. J’ai apporté qq petites modifications pour faciliter son utilisation, et maintenant ce script est disponible sous licence GPL.
Pour le télécharger :
N’hésitez surtout pas à me contacter si vous l’utilisez ou si vous apporter des améliorations !
Envoi d’email à plusieurs destinataires (uns par uns) ;
Utilisation du protocole SMTP ;
Gestion de pièces-jointes (encodage Base64 et quoted-printable) ;
Appels depuis un script python (utilisation de fichiers, chaînes de caractère ou par l’interface objet) ou en ligne de commande.
0.8
une correction de "Silence", trouvée sur le forum ubuntu-fr : formatage correct de la date.
0.7
Une correction de Olivier Fournier : l’ajout d’une en-tête « To » (certains serveurs la demandant explicitement).
0.6
Plusieurs corrections de Kris (un grand merci à lui) :
remplacement de "envoyeur" par expéditeur,
mise en place de paramètres optionnels dans le constructeur de la classe,
ajout d’un texte "usage" en cas d’exception (c’est un début en vrac),
/usr/bin/env pour python (au lieu de /bin/env).
0.5
Correction d’un bug (concernant l’envoi de plusieurs pièces jointes) par Kevin Javaudin (merci !).
0.4
Correction d’un bug (envoi d’un message plusieurs fois) par Nicolas Boquet (merci !).
0.3
Corrections de bugs bloquants lors de l’envoi sans pièces-jointes.
0.2
Possibilité d’appels en ligne de commande,
mise en module.
0.1
Première version de Laurent Pointal sur la liste python de l’AFUL.
Permettre l’envoi à plusieurs destinataires simultanéments,
utiliser le module getopt,
utiliser le module de gestion de fichiers temporaires,
éviter de passer par des fichiers temporaires,
Faire une doc. :)
Note sur les "fax internet" :
Partir d’un fichier postscript (choisir d’imprimer dans un fichier) ;
Avec GhostScript, demander l’impression en tiff g32d dans un fichier ;
La pièce jointe est ce dernier fichier TIFF.
Exemple utilisation :
Passant par des fichiers :
Passant par des chaines de caractères :
Passant par les méthodes :
Depuis une ligne de commande :
bonjour, je suis peut-être un peu tard, mais j’ai une erreur lors de l’execution du fichier
File "C :\bd\imailer.py", line 147 if self.DEBUG : print ’>EncoderB64(%s)’ % pathFichier
comment régler ce probleme ?
merci a vous
Bonjour,
Bien que ce script commence à dater, je pense qu’il est toujours bon d’indiquer les petites erreurs.
A plusieurs reprises, vous définissez le Content-Type comme ceci :
[code] #’Text/plain ;=charset=US-ASCII’)
#’Text/plain ;charset=ISO-8859-1’)
body = writer.startbody(’Text/plain ;=charset=ISO-8859-1"’) [/code]
Ceci peut provoquer des erreurs d’encodage sur certains client de messageries.
Afin d’être conforme au standard (RFC 2616 §14.17), il est préférable d’utiliser la bonne syntaxe (Content-Type = "Content-Type" " :" media-type) :
’Text/plain ;charset=ISO-8859-1’ deviens ’Text/plain ; charset=ISO-8859-1’
Cordialement.
- RFC 2616Bonjour,
ce script pourrait m’aider beaucoup mais lorsque je le lance en ligne de commande : imailer.py —smtp ’smtp.domaine.com’ —expediteur ’expediteur@ici.com’ —sujet ’Sujet’ —mail ’Texte du m�’ —destinataire ’dest1@labas.com’ —joindre ’piece_jointe.pdf’
j’obtiens systématiquement la liste des options comme si aucun argument n’était passé en paramètres... Je ne connais malheureusement pas le langage python. Merci du coup de main !
Bonjour,
ce script est énorme !!
Cependant, je n’arrive qu’à le lancer en étant root, bien que tous les droits lui ai été donné.
Une solution ?
My SMTP connection requires autorisation (user, password). How can I modify your program to accomodate that ?
Thank you
Andrzej Kolinski
c’est remoi enf ait il y avait une ligne mal indentée dans ton programme :
Ligne 230(plus ou moins) quand tu fais ton writer.lastpart () c’est a la fin du for pa du if ;)
Voila c’était une erreur de frappe 1 ? ;)
++ Kevin
bonjour bravo pour ce petit prog pas mal fait du tout. Cependant quand j’essaie d’envoyer 2 pièces jointes ca ne men envoie kune seule !!
le problème est-il connu ?
cordialement
kevin
- problème imailer.pyAu vue de votre erreur je pense que vous avez tenter de lancer le script en double-cliquant sur celui-ci (sous MacOSX vraisemblablement ... ?).
Or le script est fait pour être lancé en ligne de commande et avec des paramètres (ou en tant que module python), il faut donc passer par un terminal comme indiqué dans l’article.
Cela viens vraisemblablement du fait d’un problème de chemin de recherche ("path")...
Bref, le problème viens de chez vous :)