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 import getLogger LOGGER = getLogger('E-MailController') class EmailController(): def __init__(self, smtpServer, user, passwd, crypt, port=587, email=""): self.smtpServer = smtpServer self.port = port self.user = user self.passwd = passwd self.crypt = crypt if email: self.email = email else: self.email = user LOGGER.debug('Init EmailController with smtpServer={}, port={}, user={}, crypt={}, email={}'.format(smtpServer, port, user, crypt, self.email)) def __connect__(self): 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) 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 if type == 'credit': subject, text = self.credit(user) elif type == 'jobtransact': subject, text = self.jobTransact(user, jobtransact) else: raise Exception("Fail to send Email. No type is set. user={}, type={} , jobtransact={}".format(user, type, jobtransact)) msg['Subject'] = subject msg.attach(text) 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}}