Skip to content
Snippets Groups Projects
Commit d9b329b9 authored by Tobias Dussa's avatar Tobias Dussa
Browse files

Added support for message ID creation.

parent 87063346
No related branches found
No related tags found
No related merge requests found
...@@ -105,6 +105,9 @@ DFN-CERT,Tobias,Dussa,dussa@dfn-cert.de ...@@ -105,6 +105,9 @@ DFN-CERT,Tobias,Dussa,dussa@dfn-cert.de
- `-h`/`--help`: Displays the help text and exits the script. - `-h`/`--help`: Displays the help text and exits the script.
- `-i`/`--input`: The input file for the participating sites. Defaults - `-i`/`--input`: The input file for the participating sites. Defaults
to `{basedir}/{campaign}/Input{infix}.lst`. to `{basedir}/{campaign}/Input{infix}.lst`.
- `-I`/`--message-id`: Create a message ID. Useful when the mail server
used is not standard-compliant and does not add one like it is supposed
to do.
- `-o`/`--output`: The output file name template to be used when - `-o`/`--output`: The output file name template to be used when
generating the mail files. Defaults to generating the mail files. Defaults to
`{basedir}/{campaign}/{site}/{timestamp}{infix}.eml`. `{basedir}/{campaign}/{site}/{timestamp}{infix}.eml`.
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
from email.generator import Generator from email.generator import Generator
from email.message import EmailMessage from email.message import EmailMessage
from email.utils import formatdate from email.utils import formatdate, make_msgid
import argparse import argparse
import csv import csv
import datetime import datetime
...@@ -63,6 +63,7 @@ parser.add_argument('-f', '--from', dest='sender', default='Nobody <no ...@@ -63,6 +63,7 @@ parser.add_argument('-f', '--from', dest='sender', default='Nobody <no
parser.add_argument('-F', '--force', dest='force', default=False, action='store_true', help='force insecure login without TLS/SSL (default: False)') parser.add_argument('-F', '--force', dest='force', default=False, action='store_true', help='force insecure login without TLS/SSL (default: False)')
parser.add_argument('-H', '--hashstring', dest='hashstring', default='{salt}{campaign}{infix}-{site}', help='string to be hashed for the URL (default: "{salt}{campaign}{infix}-{site}" where "{salt}" is a random string)') parser.add_argument('-H', '--hashstring', dest='hashstring', default='{salt}{campaign}{infix}-{site}', help='string to be hashed for the URL (default: "{salt}{campaign}{infix}-{site}" where "{salt}" is a random string)')
parser.add_argument('-i', '--input', dest='input', default='{basedir}/{campaign}/Input{infix}.lst', help='input file (default: "{basedir}/{campaign}/Input{infix}.lst")') parser.add_argument('-i', '--input', dest='input', default='{basedir}/{campaign}/Input{infix}.lst', help='input file (default: "{basedir}/{campaign}/Input{infix}.lst")')
parser.add_argument('-I', '--message-id', dest='messageid', default=False, action='store_true', help='create a message ID (default: False)')
parser.add_argument('-o', '--output', dest='output', default='{basedir}/{campaign}/{site}/{timestamp}{infix}.eml', help='output file name template (default: "{basedir}/{campaign}/{site}/{timestamp}{infix}.eml")') parser.add_argument('-o', '--output', dest='output', default='{basedir}/{campaign}/{site}/{timestamp}{infix}.eml', help='output file name template (default: "{basedir}/{campaign}/{site}/{timestamp}{infix}.eml")')
parser.add_argument('-R', '--reply-to', dest='replyto', default=None, help='reply-to mail address (default: None)') parser.add_argument('-R', '--reply-to', dest='replyto', default=None, help='reply-to mail address (default: None)')
parser.add_argument( '--salt', dest='salt', default=None, help='salt to use for hashing (default: random 8-byte hex string)') parser.add_argument( '--salt', dest='salt', default=None, help='salt to use for hashing (default: random 8-byte hex string)')
...@@ -191,6 +192,8 @@ if args.verbose: ...@@ -191,6 +192,8 @@ if args.verbose:
print(f'Using "{args.smtpuser}" as user for SMTP authentication.') print(f'Using "{args.smtpuser}" as user for SMTP authentication.')
if args.smtppass: if args.smtppass:
print('Using "{args.smtppass}" as password for SMTP authentication.') print('Using "{args.smtppass}" as password for SMTP authentication.')
if args.messageid:
print(f'Generating a message ID.')
if (args.smtpuser or args.smtppass) and \ if (args.smtpuser or args.smtppass) and \
(args.smtpport == 25) and \ (args.smtpport == 25) and \
...@@ -285,6 +288,10 @@ def createMail(data): ...@@ -285,6 +288,10 @@ def createMail(data):
# Sign mail if requested # Sign mail if requested
message = signMail(message) message = signMail(message)
# Create message ID if requested
if args.messageid:
message['Message-Id'] = make_msgid()
message['Date'] = formatdate(localtime=True) message['Date'] = formatdate(localtime=True)
message['Subject'] = args.subject.format_map(SafeDict(basedir=args.basedir, campaign=args.campaign, infix=args.infix, webserver=args.webserver, salt=args.salt, site=data['site'], firstname=data['firstname'], lastname=data['lastname'], email=data['email'], hash=data['hash'], URL=data['URL'], timestamp=data['timestamp'])) message['Subject'] = args.subject.format_map(SafeDict(basedir=args.basedir, campaign=args.campaign, infix=args.infix, webserver=args.webserver, salt=args.salt, site=data['site'], firstname=data['firstname'], lastname=data['lastname'], email=data['email'], hash=data['hash'], URL=data['URL'], timestamp=data['timestamp']))
message['From'] = args.sender.format_map(SafeDict(basedir=args.basedir, campaign=args.campaign, infix=args.infix, webserver=args.webserver, salt=args.salt, site=data['site'], firstname=data['firstname'], lastname=data['lastname'], email=data['email'], hash=data['hash'], URL=data['URL'], timestamp=data['timestamp'])) message['From'] = args.sender.format_map(SafeDict(basedir=args.basedir, campaign=args.campaign, infix=args.infix, webserver=args.webserver, salt=args.salt, site=data['site'], firstname=data['firstname'], lastname=data['lastname'], email=data['email'], hash=data['hash'], URL=data['URL'], timestamp=data['timestamp']))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment