diff --git a/reaction-mailcreate/README.md b/reaction-mailcreate/README.md
index bc9497b4f5545a747448a59dfec4c7c06a116752..5f140cd08b4b1bace54edde46d3536bb290c8029 100644
--- a/reaction-mailcreate/README.md
+++ b/reaction-mailcreate/README.md
@@ -105,6 +105,9 @@ DFN-CERT,Tobias,Dussa,dussa@dfn-cert.de
  - `-h`/`--help`: Displays the help text and exits the script.
  - `-i`/`--input`: The input file for the participating sites.  Defaults
    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
    generating the mail files.  Defaults to
    `{basedir}/{campaign}/{site}/{timestamp}{infix}.eml`.
diff --git a/reaction-mailcreate/createMails.py b/reaction-mailcreate/createMails.py
index 588536d569a1c1e55180bb3fc9f6bdcecb88dfa2..374c19065e8d292d3b58794a0c00d8fef2a449b2 100755
--- a/reaction-mailcreate/createMails.py
+++ b/reaction-mailcreate/createMails.py
@@ -20,7 +20,7 @@
 
 from email.generator import Generator
 from email.message import EmailMessage
-from email.utils import formatdate
+from email.utils import formatdate, make_msgid
 import argparse
 import csv
 import datetime
@@ -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('-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', '--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('-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)')
@@ -191,6 +192,8 @@ if args.verbose:
         print(f'Using "{args.smtpuser}" as user for SMTP authentication.')
     if args.smtppass:
         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 \
    (args.smtpport == 25) and \
@@ -285,6 +288,10 @@ def createMail(data):
     # Sign mail if requested
     message = signMail(message)
 
+    # Create message ID if requested
+    if args.messageid:
+        message['Message-Id'] = make_msgid()
+        
     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['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']))