blob: 56d8bbea7e823f1186ea0d4e29beabc509c8ed81 [file] [log] [blame]
Tianyuan Yu13aac732022-03-03 20:59:54 -08001#!/usr/bin/env python3
Zhiyi Zhang576aad12017-10-03 15:41:53 -07002import argparse
Davide Pesaventoffe487b2025-01-04 00:46:10 -05003import configparser
4import smtplib
5from email.message import EmailMessage
Zhiyi Zhang576aad12017-10-03 15:41:53 -07006
7# init arg parser and parse
Davide Pesaventoffe487b2025-01-04 00:46:10 -05008parser = argparse.ArgumentParser(description='Email challenge sender for NDNCERT CA')
9parser.add_argument('email', help='email address of the recipient')
10parser.add_argument('secret', help='secret code for the challenge')
11parser.add_argument('ca_name', help='name of the certificate authority')
12parser.add_argument('cert_name', help='name of the certificate being requested')
Zhiyi Zhang576aad12017-10-03 15:41:53 -070013args = parser.parse_args()
14
Davide Pesaventoffe487b2025-01-04 00:46:10 -050015# open config file
16confParser = configparser.ConfigParser()
Zhiyi Zhang576aad12017-10-03 15:41:53 -070017confParser.read('@SYSCONFDIR@/ndncert/ndncert-mail.conf')
18
19# read smtp settings
Davide Pesaventoffe487b2025-01-04 00:46:10 -050020encrypt_mode = confParser.get('ndncert.smtp', 'encrypt_mode')
21server = confParser.get('ndncert.smtp', 'smtp_server')
22port = confParser.get('ndncert.smtp', 'smtp_port')
23username = confParser.get('ndncert.smtp', 'smtp_user')
24password = confParser.get('ndncert.smtp', 'smtp_password')
Zhiyi Zhang576aad12017-10-03 15:41:53 -070025
26# read email settings
Davide Pesaventoffe487b2025-01-04 00:46:10 -050027from_addr = confParser.get('ndncert.email', 'mail_from')
28subject = confParser.get('ndncert.email', 'subject')
29text = confParser.get('ndncert.email', 'text_template').format(args.secret, args.ca_name, args.cert_name)
30html = confParser.get('ndncert.email', 'html_template').format(args.secret, args.ca_name, args.cert_name)
Zhiyi Zhang576aad12017-10-03 15:41:53 -070031
Davide Pesaventoffe487b2025-01-04 00:46:10 -050032# create email message
33msg = EmailMessage()
34msg['From'] = from_addr
Zhiyi Zhang576aad12017-10-03 15:41:53 -070035msg['To'] = args.email
36msg['Subject'] = subject
Davide Pesaventoffe487b2025-01-04 00:46:10 -050037msg.set_content(text)
38msg.add_alternative(html, subtype='html')
Zhiyi Zhang576aad12017-10-03 15:41:53 -070039
Davide Pesaventoffe487b2025-01-04 00:46:10 -050040# connect to SMTP server
Zhiyi Zhang576aad12017-10-03 15:41:53 -070041if encrypt_mode == 'ssl':
Davide Pesaventoffe487b2025-01-04 00:46:10 -050042 context = smtplib.SMTP_SSL(server, port, timeout=10)
43elif encrypt_mode == 'tls':
44 context = smtplib.SMTP(server, port, timeout=10)
45 context.starttls()
46elif encrypt_mode == 'none':
47 context = smtplib.SMTP(server, port, timeout=10)
48else:
49 raise ValueError(f'Invalid encrypt_mode: {encrypt_mode}')
Zhiyi Zhang576aad12017-10-03 15:41:53 -070050
Davide Pesaventoffe487b2025-01-04 00:46:10 -050051with context as smtp:
52 if username and password:
53 smtp.login(username, password)
54 # send email
55 smtp.send_message(msg)