Spaces:
Running
Running
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() | |