import os import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email.mime.base import MIMEBase from email import encoders from dotenv import load_dotenv load_dotenv() smtp_port = os.getenv("PORT") smtp_server = os.getenv("SERVER") smtp_login = os.getenv("LOGIN") smtp_passwd = os.getenv("PASSWD") def mail_body(email, generation_details): body = f""" Hello {email}, Thankyou for using Project Gatekeeper to generate your SSL certificate. Your SSL certificate has been generated and is attached to this email. Please find the attached file for your SSL certificate. {generation_details} Regards, Nayan Kasturi (Raanna), Developer & Maintainer, Project Gatekeeper. """ return body def make_attachment(private_key, csr, cert): pvt = perpare_pvt(private_key) csr = perpare_csr(csr) ssl = perpare_ssl(cert) return pvt, csr, ssl def perpare_pvt(pvt): filename = "private_key.key" pvt= pvt.encode('utf-8') pvtkey = MIMEBase('application', 'octet-stream') pvtkey.set_payload(pvt) encoders.encode_base64(pvtkey) pvtkey.add_header('Content-Disposition', "attachment; filename= " + filename) return pvtkey def perpare_csr(csr): filename = "domain.csr" csr= csr.encode('utf-8') domaincsr = MIMEBase('application', 'octet-stream') domaincsr.set_payload(csr) encoders.encode_base64(domaincsr) domaincsr.add_header('Content-Disposition', "attachment; filename= " + filename) return domaincsr def perpare_ssl(ssl): filename = "ssl_certificate.crt" ssl= ssl.encode('utf-8') sslcrt = MIMEBase('application', 'octet-stream') sslcrt.set_payload(ssl) encoders.encode_base64(sslcrt) sslcrt.add_header('Content-Disposition', "attachment; filename= " + filename) return sslcrt def prepare_email(email, private_key, csr, cert, generation_details): body = mail_body(email, generation_details) msg = MIMEMultipart() msg['From'] = "Project Gatekeeper <{}>".format(smtp_login) msg['To'] = email msg['Subject'] = "Project Gatekeeper - Your SSL Certificate is ready!" msg.attach(MIMEText(body, 'plain')) p, c, s = make_attachment(private_key, csr, cert) for attachment_package in [p, c, s]: msg.attach(attachment_package) text = msg.as_string() return text def send_email(email, private_key, csr, cert, generation_details): data = prepare_email(email, private_key, csr, cert, generation_details) TIE_server = smtplib.SMTP(smtp_server, smtp_port) TIE_server.starttls() TIE_server.login(smtp_login, smtp_passwd) TIE_server.sendmail(from_addr=smtp_login, to_addrs=email, msg=data) TIE_server.quit()