|
|
|
@ -22,27 +22,44 @@
|
|
|
|
|
# This program is used to mail a message to several recipients, thus |
|
|
|
|
# providing customization for each recipient. |
|
|
|
|
|
|
|
|
|
import sys, getopt, re |
|
|
|
|
import argparse, sys, re |
|
|
|
|
import smtplib, time, mimetypes |
|
|
|
|
from email.header import Header |
|
|
|
|
from email.message import EmailMessage |
|
|
|
|
|
|
|
|
|
# |
|
|
|
|
# displays usage of the program, then quit |
|
|
|
|
# |
|
|
|
|
def usage(returncode): |
|
|
|
|
print( |
|
|
|
|
"""SYNTAX: |
|
|
|
|
""", |
|
|
|
|
sys.argv[0], |
|
|
|
|
""" -t tofile -b bodyfile [-p attachedfile] |
|
|
|
|
|
|
|
|
|
tofile : sort of CSV file containing addresses of recipients |
|
|
|
|
bodyfile : template of the mail to be sent |
|
|
|
|
attachedfile : optionnal attachment |
|
|
|
|
""", |
|
|
|
|
) |
|
|
|
|
sys.exit(returncode) |
|
|
|
|
|
|
|
|
|
parser = argparse.ArgumentParser( |
|
|
|
|
description=""" |
|
|
|
|
Simple mailing script. |
|
|
|
|
""" |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
ma = parser.add_argument_group(title="mandatory arguments", description=None) |
|
|
|
|
ma.add_argument( |
|
|
|
|
"-t", |
|
|
|
|
"--tofile", |
|
|
|
|
metavar="TO.FILE", |
|
|
|
|
type=str, |
|
|
|
|
required=True, |
|
|
|
|
help="Sort of CSV file containing addresses of recipients.", |
|
|
|
|
) |
|
|
|
|
ma.add_argument( |
|
|
|
|
"-b", |
|
|
|
|
"--bodyfile", |
|
|
|
|
metavar="BODY.FILE", |
|
|
|
|
type=str, |
|
|
|
|
required=True, |
|
|
|
|
help="Template of the mail to be sent", |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
parser.add_argument( |
|
|
|
|
"-a", |
|
|
|
|
"--attachement", |
|
|
|
|
metavar="ATTACHED.FILE", |
|
|
|
|
type=str, |
|
|
|
|
nargs="?", |
|
|
|
|
help="Optionnal attachment.", |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TOFILE = None |
|
|
|
@ -180,26 +197,10 @@ def send_message(message, to, attachment):
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__": |
|
|
|
|
|
|
|
|
|
# handle options of the program |
|
|
|
|
try: |
|
|
|
|
opts, args = getopt.getopt(sys.argv[1:], "t:b:p:") |
|
|
|
|
except getopt.error as msg: |
|
|
|
|
print("getopt error: %s" % msg) |
|
|
|
|
usage(1) |
|
|
|
|
|
|
|
|
|
for name, value in opts: |
|
|
|
|
if name == "-t": |
|
|
|
|
TOFILE = value |
|
|
|
|
elif name == "-b": |
|
|
|
|
BODYFILE = value |
|
|
|
|
elif name == "-p": |
|
|
|
|
JOINFILE = value |
|
|
|
|
else: |
|
|
|
|
print("argument: ", name, " invalid") |
|
|
|
|
usage(1) |
|
|
|
|
|
|
|
|
|
if not TOFILE or not BODYFILE: |
|
|
|
|
usage(1) |
|
|
|
|
args = parser.parse_args() |
|
|
|
|
TOFILE = args.tofile |
|
|
|
|
BODYFILE = args.bodyfile |
|
|
|
|
JOINFILE = args.attachement |
|
|
|
|
|
|
|
|
|
# read the recipients file |
|
|
|
|
sets = read_recipients() |
|
|
|
|