blob: f95fbe913a520e877c20ea08713a04136af4f8a8 [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')
Davide Pesavento397faa92025-01-04 20:56:56 -05009parser.add_argument('recipient', help='email address of the recipient')
Davide Pesaventoffe487b2025-01-04 00:46:10 -050010parser.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 Pesavento397faa92025-01-04 20:56:56 -050015vars = {
16 'ca_name': args.ca_name,
17 'cert_name': args.cert_name,
18 'recipient': args.recipient,
19 'secret': args.secret,
20}
21
Davide Pesaventoffe487b2025-01-04 00:46:10 -050022# open config file
Davide Pesavento74f837d2025-01-05 15:34:44 -050023cfg = configparser.ConfigParser(empty_lines_in_values=True,
24 interpolation=configparser.ExtendedInterpolation())
25cfg.read('@SYSCONFDIR@/ndncert/ndncert-mail.conf')
Zhiyi Zhang576aad12017-10-03 15:41:53 -070026
27# read smtp settings
Davide Pesavento74f837d2025-01-05 15:34:44 -050028server = cfg.get('ndncert.smtp', 'smtp_server')
29port = cfg.get('ndncert.smtp', 'smtp_port')
30encrypt_mode = cfg.get('ndncert.smtp', 'encrypt_mode')
31username = cfg.get('ndncert.smtp', 'smtp_user', fallback=None)
32password = cfg.get('ndncert.smtp', 'smtp_password', fallback=None)
Zhiyi Zhang576aad12017-10-03 15:41:53 -070033
34# read email settings
Davide Pesavento74f837d2025-01-05 15:34:44 -050035from_addr = cfg.get('ndncert.email', 'from', vars=vars)
36subject = cfg.get('ndncert.email', 'subject', vars=vars)
37text = cfg.get('ndncert.email', 'text_template', vars=vars)
38html = cfg.get('ndncert.email', 'html_template', vars=vars)
Zhiyi Zhang576aad12017-10-03 15:41:53 -070039
Davide Pesaventoffe487b2025-01-04 00:46:10 -050040# create email message
41msg = EmailMessage()
42msg['From'] = from_addr
Davide Pesavento397faa92025-01-04 20:56:56 -050043msg['To'] = args.recipient
Zhiyi Zhang576aad12017-10-03 15:41:53 -070044msg['Subject'] = subject
Davide Pesaventoffe487b2025-01-04 00:46:10 -050045msg.set_content(text)
46msg.add_alternative(html, subtype='html')
Zhiyi Zhang576aad12017-10-03 15:41:53 -070047
Davide Pesaventoffe487b2025-01-04 00:46:10 -050048# connect to SMTP server
Zhiyi Zhang576aad12017-10-03 15:41:53 -070049if encrypt_mode == 'ssl':
Davide Pesaventoffe487b2025-01-04 00:46:10 -050050 context = smtplib.SMTP_SSL(server, port, timeout=10)
Davide Pesaventocf216ea2025-01-04 01:02:23 -050051elif encrypt_mode == 'starttls':
Davide Pesaventoffe487b2025-01-04 00:46:10 -050052 context = smtplib.SMTP(server, port, timeout=10)
53 context.starttls()
54elif encrypt_mode == 'none':
55 context = smtplib.SMTP(server, port, timeout=10)
56else:
57 raise ValueError(f'Invalid encrypt_mode: {encrypt_mode}')
Zhiyi Zhang576aad12017-10-03 15:41:53 -070058
Davide Pesaventoffe487b2025-01-04 00:46:10 -050059with context as smtp:
60 if username and password:
61 smtp.login(username, password)
62 # send email
63 smtp.send_message(msg)