diff --git a/uffd/selfservice/views.py b/uffd/selfservice/views.py index dc237f7fa74a647008d9481dd8c6590af78120d0..82d745a4487f265b4430167ff056f86a1b05db98 100644 --- a/uffd/selfservice/views.py +++ b/uffd/selfservice/views.py @@ -1,9 +1,5 @@ import datetime -import smtplib -from email.message import EmailMessage -import email.utils - from flask import Blueprint, render_template, request, url_for, redirect, flash, current_app, session from flask_babel import gettext as _, lazy_gettext @@ -12,6 +8,7 @@ from uffd.csrf import csrf_protect from uffd.user.models import User from uffd.session import login_required from uffd.selfservice.models import PasswordToken, MailToken +from uffd.sendmail import sendmail from uffd.role.models import Role from uffd.database import db from uffd.ldap import ldap @@ -160,10 +157,8 @@ def send_mail_verification(loginname, newmail): user = User.query.filter_by(loginname=loginname).one() - msg = EmailMessage() - msg.set_content(render_template('selfservice/mailverification.mail.txt', user=user, token=token.token)) - msg['Subject'] = 'Mail verification' - send_mail(newmail, msg) + if not sendmail(newmail, 'Mail verification', 'selfservice/mailverification.mail.txt', user=user, token=token.token): + flash(_('Mail to "%(mail_address)s" could not be sent!', mail_address=newmail)) def send_passwordreset(user, new=False): expired_tokens = PasswordToken.query.filter(PasswordToken.created < (datetime.datetime.now() - datetime.timedelta(days=2))).all() @@ -175,38 +170,12 @@ def send_passwordreset(user, new=False): db.session.add(token) db.session.commit() - msg = EmailMessage() if new: - msg.set_content(render_template('selfservice/newuser.mail.txt', user=user, token=token.token)) - msg['Subject'] = 'Welcome to the %s infrastructure'%current_app.config.get('ORGANISATION_NAME', '') + template = 'selfservice/newuser.mail.txt' + subject = 'Welcome to the %s infrastructure'%current_app.config.get('ORGANISATION_NAME', '') else: - msg.set_content(render_template('selfservice/passwordreset.mail.txt', user=user, token=token.token)) - msg['Subject'] = 'Password reset' - send_mail(user.mail, msg) - -def send_mail(to_address, msg): - msg['From'] = current_app.config['MAIL_FROM_ADDRESS'] - msg['To'] = to_address - msg['Date'] = email.utils.formatdate(localtime=1) - msg['Message-ID'] = email.utils.make_msgid() - try: - if current_app.debug: - current_app.last_mail = None - current_app.logger.debug('Trying to send email to %s:\n'%(to_address)+str(msg)) - if current_app.debug and current_app.config.get('MAIL_SKIP_SEND', False): - if current_app.config['MAIL_SKIP_SEND'] == 'fail': - raise smtplib.SMTPException() - current_app.last_mail = msg - return True - server = smtplib.SMTP(host=current_app.config['MAIL_SERVER'], port=current_app.config['MAIL_PORT']) - if current_app.config['MAIL_USE_STARTTLS']: - server.starttls() - server.login(current_app.config['MAIL_USERNAME'], current_app.config['MAIL_PASSWORD']) - server.send_message(msg) - server.quit() - if current_app.debug: - current_app.last_mail = msg - return True - except smtplib.SMTPException: - flash(_('Mail to "%(mail_address)s" could not be sent!', mail_address=to_address)) - return False + template = 'selfservice/passwordreset.mail.txt' + subject = 'Password reset' + + if not sendmail(user.mail, subject, template, user=user, token=token.token): + flash(_('Mail to "%(mail_address)s" could not be sent!', mail_address=user.mail))