umail: ajout de l'option --gencmd

This commit is contained in:
Jephté Clain 2016-03-08 16:16:40 +04:00
parent d445368841
commit ed3de6d6e1
1 changed files with 26 additions and 2 deletions

View File

@ -27,13 +27,25 @@ OPTIONS
Corps du mail. Il est spécifié sur l'entrée standard. Corps du mail. Il est spécifié sur l'entrée standard.
-f, --body FILE -f, --body FILE
Spécifier un fichier qui contient le corps du message, au lieu de lire Spécifier un fichier qui contient le corps du message, au lieu de lire
sur l'entrée standard.""" sur l'entrée standard.
--gencmd
Afficher la commande complète avec sendmail et l'option -f. En effet, la
commande donnée en exemple dans la section USAGE utilise une valeur par
défaut pour l'en-tête From: de l'enveloppe. Pour certains serveurs SMTP
qui requièrent que le From: de l'enveloppe corresponde à un domaine
valide, il faut forcer la valeur avec l'option -f de sendmail:
%(scriptname)s [-F FROM] ... | sendmail -t -i -f FROM
L'option --gencmd affiche une commande complète qu'il suffit d'évaluer,
e.g:
sendmail -t -i -f FROM <<EOF
...
EOF"""
DEFAULT_FROM = 'no-reply@univ-reunion.fr' DEFAULT_FROM = 'no-reply@univ-reunion.fr'
import i_need_py25 # nécessite module email version 4.0 import i_need_py25 # nécessite module email version 4.0
import os, sys, mimetypes import os, sys, mimetypes, re
from os import path from os import path
from email import encoders from email import encoders
@ -47,6 +59,12 @@ from email.generator import Generator
from ulib.all import * from ulib.all import *
RE_UNSAFE_SH = re.compile(r'[^a-zA-Z0-9_^@%+=:,./-]')
def quotesh(s):
if not s: return "''"
if RE_UNSAFE_SH.search(s) is None: return s
return "'%s'" % s.replace("'", "'\\''")
def display_help(): def display_help():
uprint(__doc__ % globals()) uprint(__doc__ % globals())
@ -59,6 +77,7 @@ def run_umail():
('a:', 'attach=', "Attacher un fichier"), ('a:', 'attach=', "Attacher un fichier"),
('t:', 'content-type=', "Spécifier le type de contenu du fichier"), ('t:', 'content-type=', "Spécifier le type de contenu du fichier"),
('f:', 'body=', "Spécifier un fichier contenant le corps du message"), ('f:', 'body=', "Spécifier un fichier contenant le corps du message"),
(None, 'gencmd', "Générer une commande à évaluer pour envoyer le mail"),
]) ])
options, args = get_args(None, options, longoptions) options, args = get_args(None, options, longoptions)
mfrom = DEFAULT_FROM mfrom = DEFAULT_FROM
@ -70,6 +89,7 @@ def run_umail():
bodyfile = None bodyfile = None
afiles = [] afiles = []
amimetypes = [] amimetypes = []
gencmd = False
for option, value in options: for option, value in options:
if option in ('-h', '--help'): if option in ('-h', '--help'):
display_help() display_help()
@ -90,6 +110,8 @@ def run_umail():
bodyfile = None bodyfile = None
elif not path.exists(bodyfile): elif not path.exists(bodyfile):
die("%s: fichier introuvable" % bodyfile) die("%s: fichier introuvable" % bodyfile)
elif option in ('--gencmd',):
gencmd = True
if not args[0:1]: die("Vous devez spécifier le sujet") if not args[0:1]: die("Vous devez spécifier le sujet")
subject = args[0] subject = args[0]
@ -169,7 +191,9 @@ def run_umail():
if mbccs: msg['Bcc'] = ', '.join(mbccs) if mbccs: msg['Bcc'] = ', '.join(mbccs)
msg['Subject'] = Header(subject, 'utf-8') msg['Subject'] = Header(subject, 'utf-8')
if gencmd: print "sendmail -i -t -f %s <<EOF" % quotesh(mfrom)
Generator(sys.stdout).flatten(msg) Generator(sys.stdout).flatten(msg)
if gencmd: print "EOF"
if __name__ == '__main__': if __name__ == '__main__':
run_umail() run_umail()