import os import sys from omegaconf import OmegaConf from PyQt6 import QtCore, QtGui, QtWidgets from src.ui.dialogs.Ui_mail_preview import Ui_eMailPreview as Ui_Dialog config = OmegaConf.load("config.yaml") class Mail_Dialog(QtWidgets.QDialog, Ui_Dialog): def __init__( self, app_id, app_name, app_subject, prof_name, prof_mail, parent=None, default_mail="Information zum Semesterapparat {AppNr} - {AppName}.eml", ): super().__init__(parent) self.setupUi( self, # app_id, # app_name, # app_subject, # prof_name, ) self.appid = app_id self.appname = app_name self.subject = app_subject self.profname = prof_name self.mail_data = "" self.prof_mail = prof_mail self.comboBox.currentIndexChanged.connect(self.set_mail) self.prof_name.setText(prof_name) self.mail_name.setText(self.prof_mail) self.load_mail_templates() # if none of the radio buttons is checked, disable the accept button of the dialog if ( self.gender_female.isChecked() or self.gender_male.isChecked() or self.gender_male.isChecked() ): self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(True) else: self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(False) if default_mail is not None: # get the nearest match to the default mail for i in range(self.comboBox.count()): if default_mail in self.comboBox.itemText(i): default_mail = self.comboBox.itemText(i) break self.comboBox.setCurrentText(default_mail) self.gender_female.clicked.connect(self.set_mail) self.gender_male.clicked.connect(self.set_mail) self.gender_non.clicked.connect(self.set_mail) self.buttonBox.accepted.connect(self.createAndSendMail) # self.send_button.clicked.connect(self.save_mail) # def set_data(self, data: dict): # print(data) # self.prof_name.setText(data["prof_name"]) # self.mail_name.setText(data["mail_name"]) # # assign data["general"] to self.data # self.data = data["general"] def load_mail_templates(self): print("loading mail templates") mail_templates = os.listdir("mail_vorlagen") for template in mail_templates: self.comboBox.addItem(template) def get_greeting(self): prof = self.profname if self.gender_male.isChecked(): return f"Sehr geehrter Herr {prof.split(' ')[-1]}," elif self.gender_female.isChecked(): return f"Sehr geehrte Frau {prof.split(' ')[-1]}," elif self.gender_non.isChecked(): return f"Guten Tag {prof}," def set_mail(self): email_template = self.comboBox.currentText() if email_template == "": return with open(f"mail_vorlagen/{email_template}", "r", encoding="utf-8") as f: mail_template = f.read() email_header = email_template.split(".eml")[0] if "{AppNr}" in email_template: email_header = email_template.split(".eml")[0] email_header = email_header.format(AppNr=self.appid, AppName=self.appname) self.mail_header.setText(email_header) self.mail_data = mail_template.split("")[0] mail_html = mail_template.split("")[1] mail_html = "" + mail_html Appname = self.appname mail_html = mail_html.format( Profname=self.prof_name.text().split(" ")[-1], Appname=Appname, AppNr=self.appid, AppSubject=self.subject, greeting=self.get_greeting(), ) self.mail_body.setHtml(mail_html) self.buttonBox.button(QtWidgets.QDialogButtonBox.Ok).setEnabled(True) def createAndSendMail(self): import smtplib import ssl from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText smtp_server = config["mail"]["smtp_server"] port: int = config["mail"]["port"] sender_email = config["mail"]["sender"] password = config["mail"]["password"] message = MIMEMultipart() message["From"] = sender_email message["To"] = self.prof_mail message["Subject"] = self.mail_header.text() mail_body = self.mail_body.toHtml() message.attach(MIMEText(mail_body, "html")) mail = message.as_string() server = smtplib.SMTP_SSL(smtp_server, port) # server.starttls() # server.auth(mechanism="PLAIN") if config["mail"]["use_user_name"] == 1: print(config["mail"]["user_name"]) server.login(config["mail"]["user_name"], password) else: server.login(sender_email, password) server.sendmail(sender_email, self.prof_mail, mail) print("Mail sent") # end active process server.quit() # self.accept() # # create a temporary file # mail_header = self.mail_header.text() # mail_body = self.mail_body.toHtml() # mail = self.mail_data + mail_body # mail = mail.replace("Subject:", f"Subject: {mail_header}") # directory = config["database"]["tempdir"] # directory = directory.replace("~", str(os.path.expanduser("~"))) # with tempfile.NamedTemporaryFile( # mode="w", delete=False, suffix=".eml", encoding="utf-8", dir=directory # ) as f: # f.write(mail) # self.mail_path = f.name # print(self.mail_path) # # open the file using thunderbird # subprocess.Popen([f"{self.mail_path}"]) # # delete the file # # os.remove(self.mail_path) def launch_gui(app_id="", app_name="", app_subject="", prof_name="", prof_mail=""): app = QtWidgets.QApplication(sys.argv) dialog = Mail_Dialog( app_id=app_id, app_name=app_name, app_subject=app_subject, prof_name=prof_name, prof_mail=prof_mail, default_mail="Information bezüglich der Auflösung des Semesterapparates", ) dialog.show() sys.exit(app.exec()) if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) Dialog = QtWidgets.QDialog() ui = Mail_Dialog() ui.setupUi(Dialog) Dialog.show() sys.exit(app.exec())