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
USAGE
%(scriptname)s [options] <SUBJECT> RECIPIENTS... <<<"BODY" | /usr/sbin/sendmail -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.
echo "BODY" | %(scriptname)s [options] <SUBJECT> RECIPIENTS... | /usr/sbin/sendmail -t -i
OPTIONS
-f FROM
Spécifier l'adresse de l'expéditeur. Par défaut, utiliser no-reply@univ-reunion.fr
-a FILE
-F, --from FROM
Spécifier l'adresse de l'expéditeur. Par défaut, utiliser l'adresse
%(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
fois que nécessaire pour attacher plusieurs fichiers.
SUBJECT
@ -22,7 +24,10 @@ OPTIONS
RECIPIENTS
Destinataires du mail. Il faut au moins un destinataire.
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'
@ -48,23 +53,39 @@ def display_help():
def run_umail():
options, longoptions = build_options([
('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"),
('f:', 'body=', "Spécifier un fichier contenant le corps du message"),
])
options, args = get_args(None, options, longoptions)
mfrom = DEFAULT_FROM
subject = None
mtos = []
mccs = []
mbccs = []
body = None
bodyfile = None
afiles = []
for option, value in options:
if option in ('-h', '--help'):
display_help()
sys.exit(0)
elif option in ('-f', '--from'):
elif option in ('-F', '--from'):
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'):
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")
subject = args[0]
@ -72,7 +93,17 @@ def run_umail():
mtos = args[1:]
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:
# Sans attachement, faire un message simple
@ -125,6 +156,8 @@ def run_umail():
msg.attach(part)
msg['From'] = mfrom
msg['To'] = ', '.join(mtos)
if mccs: msg['Cc'] = ', '.join(mccs)
if mbccs: msg['Bcc'] = ', '.join(mbccs)
msg['Subject'] = Header(subject, 'utf-8')
Generator(sys.stdout).flatten(msg)