fix mail not showning, gitignore

This commit is contained in:
WorldTeacher
2024-05-07 14:19:00 +02:00
parent 9aae45c2a2
commit 2eb1e74b97
3 changed files with 310 additions and 51 deletions

View File

@@ -1,24 +1,56 @@
import subprocess
import tempfile
import os
import sys
from omegaconf import OmegaConf
from PySide6 import QtCore, QtGui, QtWidgets
from src.ui.dialogs.Ui_mail_preview import Ui_eMailPreview as Ui_Dialog
from omegaconf import OmegaConf
config = OmegaConf.load("config.yaml")
class Mail_Dialog(QtWidgets.QDialog, Ui_Dialog):
def __init__(self, parent=None, app_id="", app_name="", app_subject="", prof_name="", data = None):
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)
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.data = data
self.buttonBox.accepted.connect(self.save_mail)
self.comboBox.selec
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 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)
@@ -27,6 +59,12 @@ class Mail_Dialog(QtWidgets.QDialog, Ui_Dialog):
# # 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):
if self.gender_male.isChecked():
return "Sehr geehrter Herr"
@@ -34,44 +72,95 @@ class Mail_Dialog(QtWidgets.QDialog, Ui_Dialog):
return "Sehr geehrte Frau"
elif self.gender_non.isChecked():
return "Guten Tag"
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("<html>")[0]
mail_html = mail_template.split("<html>")[1]
mail_html = "<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()
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)
def save_mail(self):
# create a temporary file
mail_header = self.mail_header.text()
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()
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)
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__":
@@ -83,3 +172,7 @@ if __name__ == "__main__":
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec())