flaschengeist/geruecht/controller/emailController.py

88 lines
3.9 KiB
Python
Raw Normal View History

import smtplib
from datetime import datetime
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header
from geruecht.logger import getDebugLogger
2020-02-26 21:13:44 +00:00
LOGGER = getDebugLogger()
class EmailController():
2020-02-26 21:13:44 +00:00
def __init__(self, smtpServer, user, passwd, crypt, port=587, email=""):
self.smtpServer = smtpServer
self.port = port
self.user = user
self.passwd = passwd
2020-02-26 21:13:44 +00:00
self.crypt = crypt
if email:
self.email = email
else:
self.email = user
2020-02-27 14:01:41 +00:00
LOGGER.debug('Init EmailController with smtpServer={}, port={}, user={}, crypt={}, email={}'.format(smtpServer, port, user, crypt, self.email))
def __connect__(self):
2020-02-26 21:13:44 +00:00
LOGGER.info('Connect to E-Mail-Server')
if self.crypt == 'SSL':
self.smtp = smtplib.SMTP_SSL(self.smtpServer, self.port)
log = self.smtp.ehlo()
LOGGER.debug(log)
if self.crypt == 'STARTTLS':
self.smtp = smtplib.SMTP(self.smtpServer, self.port)
log = self.smtp.ehlo()
LOGGER.debug(log)
log = self.smtp.starttls()
LOGGER.debug(log)
log = self.smtp.login(self.user, self.passwd)
LOGGER.debug(log)
2020-02-27 14:01:41 +00:00
def jobTransact(self, user, jobtransact):
date = '{}.{}.{}'.format(jobtransact['date'].day, jobtransact['date'].month, jobtransact['date'].year)
from_user = '{} {}'.format(jobtransact['from_user'].firstname, jobtransact['from_user'].lastname)
subject = 'Bardienstanfrage am {}'.format(date)
text = MIMEText(
"Hallo {} {},\n"
"{} fragt, ob du am {} zum Bardienst teilnehmen willst. Beantworte die Anfrage im Userportal von Flaschengeist.".format(user.firstname, user.lastname, from_user, date), 'utf-8')
return (subject, text)
def credit(self, user):
subject = Header('Gerücht, bezahle deine Schulden!', 'utf-8')
sum = user.getGeruecht(datetime.now().year).getSchulden()
if sum < 0:
type = 'Schulden'
add = 'Bezahle diese umgehend an den Finanzer.'
else:
type = 'Guthaben'
add = ''
text = MIMEText(
"Hallo {} {},\nDu hast {} im Wert von {:.2f} €. {}\n\nDiese Nachricht wurde automatisch erstellt.".format(
user.firstname, user.lastname, type, abs(sum) / 100, add), 'plain', 'utf-8')
return (subject, text)
def sendMail(self, user, type='credit', jobtransact=None):
try:
if user.mail == 'None' or not user.mail:
LOGGER.debug("cant send email to {}. Has no email-address. {}".format(user.uid, {'error': True, 'user': {'userId': user.uid, 'firstname': user.firstname, 'lastname': user.lastname}}))
raise Exception("no valid Email")
msg = MIMEMultipart()
msg['From'] = self.email
msg['To'] = user.mail
2020-02-27 14:01:41 +00:00
if type == 'credit':
subject, text = self.credit(user)
elif type == 'jobtransact':
subject, text = self.jobTransact(user, jobtransact)
else:
2020-02-27 14:01:41 +00:00
raise Exception("Fail to send Email. No type is set. user={}, type={} , jobtransact={}".format(user, type, jobtransact))
msg['Subject'] = subject
msg.attach(text)
2020-02-27 14:01:41 +00:00
LOGGER.debug("Send email to {}: '{}'".format(user.uid, msg.as_string()))
self.__connect__()
self.smtp.sendmail(self.email, user.mail, msg.as_string())
LOGGER.debug("Sended email to {}. {}".format(user.uid, {'error': False, 'user': {'userId': user.uid, 'firstname': user.firstname, 'lastname': user.lastname}}))
return {'error': False, 'user': {'userId': user.uid, 'firstname': user.firstname, 'lastname': user.lastname}}
except Exception:
return {'error': True, 'user': {'userId': user.uid, 'firstname': user.firstname, 'lastname': user.lastname}}