from email import encoders from email.mime.base import MIMEBase import os import sib_api_v3_sdk from sib_api_v3_sdk.rest import ApiException from dotenv import load_dotenv load_dotenv() mail_api = os.getenv("MAIL_API") def mail_body(generation_details): body = f""" Hello, 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. https://projectgatekeeper.vercel.app/ """ return body def create_attachment(content, filename): attachment = MIMEBase('application', 'octet-stream') attachment.set_payload(content) encoders.encode_base64(attachment) attachment.add_header('Content-Disposition', f'attachment; filename="{filename}"') return attachment def send_email(email, private_key, csr, cert, generation_details): configuration = sib_api_v3_sdk.Configuration() configuration.api_key['api-key'] = mail_api api_instance = sib_api_v3_sdk.TransactionalEmailsApi(sib_api_v3_sdk.ApiClient(configuration)) data = mail_body(generation_details) p_attachment = create_attachment(private_key.encode('utf-8'), "private_key.txt") c_attachment = create_attachment(csr.encode('utf-8'), "domain_csr.txt") s_attachment = create_attachment(cert.encode('utf-8'), "ssl_certificate_chain.txt") subject = "Project Gatekeeper - Your SSL Certificate is ready!" sender = {"name": "Project Gatekeeper", "email": "projectgatekeeper@silerudaagartha.eu.org"} reply_to = {"name": "Project Gatekeeper", "email": "gatekeeper@raannakasturi.eu.org"} text_content = data attachments = [ {"content": p_attachment.get_payload(), "name": p_attachment.get_filename()}, {"content": c_attachment.get_payload(), "name": c_attachment.get_filename()}, {"content": s_attachment.get_payload(), "name": s_attachment.get_filename()}, ] to = [{"email": email}] send_smtp_email = sib_api_v3_sdk.SendSmtpEmail(to=to, reply_to=reply_to, attachment=attachments, text_content=text_content, sender=sender, subject=subject) try: api_response = api_instance.send_transac_email(send_smtp_email) print("Email Sent") return True except ApiException as e: print("Can't send email") print("Exception when calling SMTPApi->send_transac_email: %s\n" % e) return False