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.
-f, --body FILE
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'
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 email import encoders
@ -47,6 +59,12 @@ from email.generator import Generator
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():
uprint(__doc__ % globals())
@ -59,6 +77,7 @@ def run_umail():
('a:', 'attach=', "Attacher un fichier"),
('t:', 'content-type=', "Spécifier le type de contenu du fichier"),
('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)
mfrom = DEFAULT_FROM
@ -70,6 +89,7 @@ def run_umail():
bodyfile = None
afiles = []
amimetypes = []
gencmd = False
for option, value in options:
if option in ('-h', '--help'):
display_help()
@ -90,6 +110,8 @@ def run_umail():
bodyfile = None
elif not path.exists(bodyfile):
die("%s: fichier introuvable" % bodyfile)
elif option in ('--gencmd',):
gencmd = True
if not args[0:1]: die("Vous devez spécifier le sujet")
subject = args[0]
@ -169,7 +191,9 @@ def run_umail():
if mbccs: msg['Bcc'] = ', '.join(mbccs)
msg['Subject'] = Header(subject, 'utf-8')
if gencmd: print "sendmail -i -t -f %s <<EOF" % quotesh(mfrom)
Generator(sys.stdout).flatten(msg)
if gencmd: print "EOF"
if __name__ == '__main__':
run_umail()