parser.add_argument('-a','--attach',dest='attach',default=[],nargs=1,action='extend',help='add attachment(s) to mail (default: None)')
parser.add_argument('-b','--basedir',dest='basedir',default='Mails',help='base directory for all output (default: "Mails")')
parser.add_argument('-B','--bcc',dest='bcc',default=[],nargs=1,action='extend',help='additional mail recipient(s) to bcc (default: None)')
parser.add_argument('-c','--campaign',dest='campaign',default='Test',help='campaign name (default: "Test")')
parser.add_argument('-C','--cc',dest='cc',default=[],nargs=1,action='extend',help='additional mail recipient(s) to cc (default: None)')
parser.add_argument('-d','--dry-run',dest='dryrun',default=False,action='store_true',help='dry run -- do not actually send mails or create targets (default: False)')
parser.add_argument('-f','--from',dest='sender',default='Nobody <nobody@example.com>',help='sender mail address (default: "Nobody <nobody@example.com>"; implies dry-run if not set)')
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','--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)')
parser.add_argument('--sign',dest='sign',default='',type=str.lower,choices=['','gpg','gpgsm'],help='signature method (default: ""); one of "", "gpg"')
parser.add_argument('--sign-arg',dest='signarg',default={},nargs=1,action='keyvalue',help='additional arguments to be passed to the signature call (default: None)')
parser.add_argument('-S','--smtpserver',dest='smtpserver',default='localhost',help='SMTP server to use (default: "localhost"); port can be specified with "<host>:<port>" notation and takes precedence over implied ports and port specification')
parser.add_argument('--smtpport',dest='smtpport',default=0,type=int,help='SMTP port to use (default: 25); takes precedence over implied ports')
parser.add_argument('--smtpuser',dest='smtpuser',default=None,help='SMTP user to login with (default: none); implies TLS (port 465) unless STARTTLS is set as well')
parser.add_argument('--smtppass',dest='smtppass',default=None,help='SMTP password to login with (default: none); implies TLS (port 465) unless STARTTLS is set as well; will be queried interactively if set to "-"')
parser.add_argument('--starttls',dest='starttls',default=False,action='store_true',help='login using STARTTLS (default: False); implies port 587')
parser.add_argument('--timestamp',dest='timestamp',default='%Y-%m-%dT%H:%M:%SZ',help='timestamp format used for {timestamp} keyword (default: "%%Y-%%m-%%dT%%H:%%M:%%SZ")')
parser.add_argument('-T','--to',dest='to',default='{firstname} {lastname} <{email}>',help='recipient mail address (default: "{firstname} {lastname} <{email}>")')
parser.add_argument('-u','--url',dest='url',default='{webserver}/{campaign}{infix}-{hash}',help='URL template to use (default: "{webserver}/{campaign}{infix}-{hash}"')
parser.add_argument('-U','--createurl',dest='createurl',default='{webserver}/{campaign}{infix}-{hash}/create',help='URL template to use for creation URL (default: "{webserver}/{campaign}{infix}-{hash}/create"')
parser.add_argument('-w','--webserver',dest='webserver',default='https://challenge.example.com',help='web server to use (default: "https://challenge.example.com"; implies dry-run if not set; to suppress web-hook calling, set to empty string ""')
parser.add_argument('infix',default='',nargs='?',help='infix for ID purposes, default empty')
parser.add_argument('-a','--attach',dest='attach',default=[],nargs=1,action='extend',help='add attachment(s) to mail (default: None)')
parser.add_argument('-b','--basedir',dest='basedir',default='Mails',help='base directory for all output (default: "Mails")')
parser.add_argument('-B','--bcc',dest='bcc',default=[],nargs=1,action='extend',help='additional mail recipient(s) to bcc (default: None)')
parser.add_argument('-c','--campaign',dest='campaign',default='Test',help='campaign name (default: "Test")')
parser.add_argument('-C','--cc',dest='cc',default=[],nargs=1,action='extend',help='additional mail recipient(s) to cc (default: None)')
parser.add_argument('-d','--dry-run',dest='dryrun',default=False,action='store_true',help='dry run -- do not actually send mails or create targets (default: False)')
parser.add_argument('-f','--from',dest='sender',default='Nobody <nobody@example.com>',help='sender mail address (default: "Nobody <nobody@example.com>"; implies dry-run if not set)')
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','--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)')
parser.add_argument('--sign',dest='sign',default='',type=str.lower,choices=['','gpg','gpgsm'],help='signature method (default: ""); one of "", "gpg"')
parser.add_argument('--sign-arg',dest='signarg',default={},nargs=1,action='keyvalue',help='additional arguments to be passed to the signature call (default: None)')
parser.add_argument('--sign-init-arg',dest='signinitarg',default={},nargs=1,action='keyvalue',help='additional arguments to be passed to the signature-mechanism init call (default: None)')
parser.add_argument('-S','--smtpserver',dest='smtpserver',default='localhost',help='SMTP server to use (default: "localhost"); port can be specified with "<host>:<port>" notation and takes precedence over implied ports and port specification')
parser.add_argument('--smtpport',dest='smtpport',default=0,type=int,help='SMTP port to use (default: 25); takes precedence over implied ports')
parser.add_argument('--smtpuser',dest='smtpuser',default=None,help='SMTP user to login with (default: none); implies TLS (port 465) unless STARTTLS is set as well')
parser.add_argument('--smtppass',dest='smtppass',default=None,help='SMTP password to login with (default: none); implies TLS (port 465) unless STARTTLS is set as well; will be queried interactively if set to "-"')
parser.add_argument('--starttls',dest='starttls',default=False,action='store_true',help='login using STARTTLS (default: False); implies port 587')
parser.add_argument('--timestamp',dest='timestamp',default='%Y-%m-%dT%H:%M:%SZ',help='timestamp format used for {timestamp} keyword (default: "%%Y-%%m-%%dT%%H:%%M:%%SZ")')
parser.add_argument('-T','--to',dest='to',default='{firstname} {lastname} <{email}>',help='recipient mail address (default: "{firstname} {lastname} <{email}>")')
parser.add_argument('-u','--url',dest='url',default='{webserver}/{campaign}{infix}-{hash}',help='URL template to use (default: "{webserver}/{campaign}{infix}-{hash}"')
parser.add_argument('-U','--createurl',dest='createurl',default='{webserver}/{campaign}{infix}-{hash}/create',help='URL template to use for creation URL (default: "{webserver}/{campaign}{infix}-{hash}/create"')
parser.add_argument('-w','--webserver',dest='webserver',default='https://challenge.example.com',help='web server to use (default: "https://challenge.example.com"; implies dry-run if not set; to suppress web-hook calling, set to empty string ""')
parser.add_argument('infix',default='',nargs='?',help='infix for ID purposes, default empty')