renommage de -f en -F. ajout des options -c, -b, -f

This commit is contained in:
Jephté Clain 2013-12-03 14:06:26 +04:00
parent 5bb78f5583
commit b9eaeb6428
1 changed files with 46 additions and 13 deletions

View File

@ -4,17 +4,19 @@
u"""%(scriptname)s: Afficher un mail correctement encodé pour son envoi u"""%(scriptname)s: Afficher un mail correctement encodé pour son envoi
USAGE USAGE
%(scriptname)s [options] <SUBJECT> RECIPIENTS... <<<"BODY" | /usr/sbin/sendmail -i echo "BODY" | %(scriptname)s [options] <SUBJECT> RECIPIENTS... | /usr/sbin/sendmail -t -i
%(scriptname)s [options] <SUBJECT> RECIPIENTS... <<<"BODY" | /usr/sbin/sendmail RECIPIENTS...
La deuxième forme est pour les implémentations compatible de sendmail qui
ignorent l'argument -i. Il faut alors spécifier tous les destinataires en
argument.
OPTIONS OPTIONS
-f FROM -F, --from FROM
Spécifier l'adresse de l'expéditeur. Par défaut, utiliser no-reply@univ-reunion.fr Spécifier l'adresse de l'expéditeur. Par défaut, utiliser l'adresse
-a FILE %(DEFAULT_FROM)s
-c, --cc CCRECIPIENTS
Destinataires en copie du message, séparés par une virgule.
Cette option peut être spécifiée autant de fois que nécessaire.
-b, --bcc BCCRECIPIENTS
Destinataires en copie cachée du message, séparés par une virgule.
Cette option peut être spécifiée autant de fois que nécessaire.
-a, --attach FILE
Attacher un fichier au mail. Cette option peut être spécifiée autant de Attacher un fichier au mail. Cette option peut être spécifiée autant de
fois que nécessaire pour attacher plusieurs fichiers. fois que nécessaire pour attacher plusieurs fichiers.
SUBJECT SUBJECT
@ -22,7 +24,10 @@ OPTIONS
RECIPIENTS RECIPIENTS
Destinataires du mail. Il faut au moins un destinataire. Destinataires du mail. Il faut au moins un destinataire.
BODY BODY
Corps du mail""" 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."""
DEFAULT_FROM = 'no-reply@univ-reunion.fr' DEFAULT_FROM = 'no-reply@univ-reunion.fr'
@ -48,23 +53,39 @@ def display_help():
def run_umail(): def run_umail():
options, longoptions = build_options([ options, longoptions = build_options([
('h', 'help', "Afficher l'aide"), ('h', 'help', "Afficher l'aide"),
('f:', 'from=', "Spécifier l'expéditeur"), ('F:', 'from=', "Spécifier l'expéditeur"),
('c:', 'cc=', "Destinataires en copie"),
('b:', 'bcc=', "Destinataires en copie cachée"),
('a:', 'attach=', "Attacher un fichier"), ('a:', 'attach=', "Attacher un fichier"),
('f:', 'body=', "Spécifier un fichier contenant le corps du message"),
]) ])
options, args = get_args(None, options, longoptions) options, args = get_args(None, options, longoptions)
mfrom = DEFAULT_FROM mfrom = DEFAULT_FROM
subject = None subject = None
mtos = [] mtos = []
mccs = []
mbccs = []
body = None body = None
bodyfile = None
afiles = [] afiles = []
for option, value in options: for option, value in options:
if option in ('-h', '--help'): if option in ('-h', '--help'):
display_help() display_help()
sys.exit(0) sys.exit(0)
elif option in ('-f', '--from'): elif option in ('-F', '--from'):
mfrom = value mfrom = value
elif option in ('-c', '--cc'):
mccs.extend(value.split(','))
elif option in ('-b', '--bcc'):
mbccs.extend(value.split(','))
elif option in ('-a', '--attach'): elif option in ('-a', '--attach'):
afiles.append(value) afiles.append(value)
elif option in ('-f', '--body'):
bodyfile = value
if bodyfile == "-":
bodyfile = None
elif not path.exists(bodyfile):
die("%s: fichier introuvable" % bodyfile)
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]
@ -72,7 +93,17 @@ def run_umail():
mtos = args[1:] mtos = args[1:]
lines = BLines() lines = BLines()
lines.readlines(sys.stdin) close = False
if bodyfile is None:
inf = sys.stdin
close = False
else:
inf = open(bodyfile, 'rb')
close = True
try:
lines.readlines(inf)
finally:
if close: inf.close()
if not afiles: if not afiles:
# Sans attachement, faire un message simple # Sans attachement, faire un message simple
@ -125,6 +156,8 @@ def run_umail():
msg.attach(part) msg.attach(part)
msg['From'] = mfrom msg['From'] = mfrom
msg['To'] = ', '.join(mtos) msg['To'] = ', '.join(mtos)
if mccs: msg['Cc'] = ', '.join(mccs)
if mbccs: msg['Bcc'] = ', '.join(mbccs)
msg['Subject'] = Header(subject, 'utf-8') msg['Subject'] = Header(subject, 'utf-8')
Generator(sys.stdout).flatten(msg) Generator(sys.stdout).flatten(msg)