From 4850860f822d4140829bf5172cfdb456fa8fe103 Mon Sep 17 00:00:00 2001 From: Thomas L Date: Thu, 29 Mar 2018 00:57:17 +0200 Subject: [PATCH] use local mail daemon for confirmation links --- frontend.py | 23 ++++++++++------------- sendmail.py | 18 +++++++++++++++--- 2 files changed, 25 insertions(+), 16 deletions(-) diff --git a/frontend.py b/frontend.py index ae706a3..6d1fae5 100755 --- a/frontend.py +++ b/frontend.py @@ -5,9 +5,8 @@ from config import config from db import db import logging import tweepy -import sendmail +from sendmail import sendmail from session import SessionPlugin -import smtplib from mastodon import Mastodon @@ -28,20 +27,18 @@ def register_post(): if db.by_email(email): return dict(error='Email address already in use.') # send confirmation mail - confirm_link = request.url + "/../confirm/" + db.user_token(email, password) - send_confirmation_mail(confirm_link, email) + sendmail( + email, + "[Ticketfrei] Confirm your account", + "Complete your registration here: %s://%s/confirm/%s" % ( + request.urlparts.scheme, + request.urlparts.netloc, + db.user_token(email, password) + ) + ) return dict(info='Confirmation mail sent.') -def send_confirmation_mail(confirm_link, email): - m = sendmail.Mailer() - try: - m.send("Complete your registration here: " + confirm_link, email, - "[Ticketfrei] Confirm your account") - except smtplib.SMTPRecipientsRefused: - return "Please enter a valid E-Mail address." - - @get('/confirm/') @view('template/propaganda.tpl') def confirm(token): diff --git a/sendmail.py b/sendmail.py index 93028d9..f2e754c 100755 --- a/sendmail.py +++ b/sendmail.py @@ -1,11 +1,12 @@ #!/usr/bin/env python3 - -import smtplib -import ssl from config import config from email.mime.text import MIMEText from email.mime.application import MIMEApplication from email.mime.multipart import MIMEMultipart +from getpass import getuser +import smtplib +from socket import getfqdn +import ssl class Mailer(object): @@ -63,6 +64,17 @@ class Mailer(object): return "Sent mail to " + recipient + ": " + subject +def sendmail(to, subject, body): + msg = MIMEMultipart() + msg['From'] = '%s@%s' % (getuser(), getfqdn()) + msg['To'] = to + msg['Subject'] = subject + msg.attach(MIMEText(body)) + + with smtplib.SMTP('localhost') as smtp: + smtp.send_message(msg) + + # For testing: if __name__ == '__main__': m = Mailer()