From 0bd185482d6c02f00654f589619a6b7eb4595eb5 Mon Sep 17 00:00:00 2001 From: Ulrich Knechtelsdorfer Date: Wed, 6 Apr 2016 22:38:56 +0200 Subject: [PATCH] - add sending of emails (works except dept) --- app/send_email.py | 60 ++++++++++++++++++++++++++++ app/templates/billing.html | 2 +- app/templates/billing_mass_mail.html | 23 ++++++++--- app/templates/billing_personal.html | 15 +++++-- app/views.py | 40 ++++++++++++++++--- 5 files changed, 123 insertions(+), 17 deletions(-) create mode 100644 app/send_email.py diff --git a/app/send_email.py b/app/send_email.py new file mode 100644 index 0000000..777b380 --- /dev/null +++ b/app/send_email.py @@ -0,0 +1,60 @@ +import smtplib +# import email +# from email.mime.text import MIMEText +# from email.MIMEText import MIMEText +import user + +def send_email(recipient, subject, body): + gmail_user = 'bier1baroness' + gmail_pwd = 'test11test11' + FROM = 'bier1baroness@gmail.com' + SUBJECT = subject + TEXT = body + + # Prepare actual message + message = u"Content-Type: text/plain; charset=utf-8\nFrom: Baroness <%s>\nTo: %s\nSubject: %s\n\n%s" % (FROM, recipient, SUBJECT, TEXT) + message = message.encode('utf-8') + + # message = msg.as_string() + print message + try: + print '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\ntry_to_send' + server = smtplib.SMTP("smtp.gmail.com:587") + #server.set_debuglevel(1) + server.starttls() + server.login(gmail_user, gmail_pwd) + server.sendmail(FROM, recipient, message) + print 'sendmail' + server.quit() + print 'Mail send to %s' % recipient + + except: + print "Failed to send mail to %s" %recipient + +def send_emails(body, subject, users): + FROM = 'bier1baroness@gmail.com' + + for user in users: + dept = 3 ###################################################### change this!!!!! + subject_parsed = parse_email(subject, user, dept) + body_parsed = parse_email(body, user, dept) + send_email(user.email, subject_parsed, body_parsed) + + + + +def parse_email(text, u, dept): + + text = text.replace('%%longname%%', u.longname) + text = text.replace('%%dept%%', str(dept)) + + if text.find('%%if_is_black%%', 0, text.__len__()): + start = text.find('%%if_is_black%%', 0, text.__len__()) + end = text.find('%%end_if_is_black%%') + + if not u.isblack: + text = text.replace(text[start:end], '') + text = text.replace('%%if_is_black%%', '') + text = text.replace('%%end_if_is_black%%', '') + + return text diff --git a/app/templates/billing.html b/app/templates/billing.html index 879b3e4..27ae5cf 100644 --- a/app/templates/billing.html +++ b/app/templates/billing.html @@ -9,6 +9,7 @@

{{ success }}

{% endif %}

Abrechnung

+

An alle User Rechnungen versenden.

@@ -30,5 +31,4 @@
-

An alle User Rechnungen versenden.

{% endblock %} \ No newline at end of file diff --git a/app/templates/billing_mass_mail.html b/app/templates/billing_mass_mail.html index 8605953..99dc2ed 100644 --- a/app/templates/billing_mass_mail.html +++ b/app/templates/billing_mass_mail.html @@ -1,23 +1,34 @@ {% extends "base.html"%} -{% set title = "An alle User Rechnung versenden" %} +{% set title = "An alle User Rechnungen versenden" %} {% block content %}

TODO:

{% if success %}

{{ success }}

{% endif %}

Rechnung an alle verschicken

- +du hast %%dept%%€ Schulden. +Bitte überweise diesen Betrag an das Konto: +%%if_is_black%%Weil du zu hohe Schulden hast, bist du geschwärzt%%end_if_is_black%% +
+

Warnung: Das versenden vieler emails dauert ein weilchen.

+ +

Kommandos

+

Der text den du eingibst wird von der Baroness noch personalisiert. Folgende Komandos kennt die Baroness.

+ {% endblock %} \ No newline at end of file diff --git a/app/templates/billing_personal.html b/app/templates/billing_personal.html index da741d7..efaaf95 100644 --- a/app/templates/billing_personal.html +++ b/app/templates/billing_personal.html @@ -11,13 +11,20 @@ {% endif %}

Rechnung an {{user_to_bill.longname}} verschicken

- +du hast zurzeit n€ Schulden. +{% if user_to_bill.isblack %}Weil du zu hohe Schulden hast, bist du geschwärzt.{% endif %} +Bitte überweise den Betrag an das Konto: + Peter Schleter; + IBAN; BIC; +dein Baron, +{{user.longname}} +

An alle User Rechnungen versenden.

+ {% endblock %} \ No newline at end of file diff --git a/app/views.py b/app/views.py index 0cf7b31..d9d435e 100644 --- a/app/views.py +++ b/app/views.py @@ -5,6 +5,7 @@ from database import * from plot import * from user import User from product import Product +from send_email import send_email, send_emails from consumption import Consumption import bcrypt import os @@ -262,27 +263,54 @@ def personal(): def billing(): users = get_users() if request.method == 'POST': - return render_template('billing.html', users=users, success="Not Implemented", dept=0, user=get_user_by_name(session.get('name'))) + for user in users: + formname = "%s_payed" % user.name + if formname in request.form: + # add payment here + payment = float(request.form[formname]) + print "%s payed %d" % (user.name, payment) + + + return render_template('billing.html', users=users, success="Writing to database is not implemented", dept=0, user=get_user_by_name(session.get('name'))) if request.method == 'GET': return render_template('billing.html', users=users, dept=0, user=get_user_by_name(session.get('name'))) -@app.route('/billing/send_personal_bill/', methods=['GET','POST']) +@app.route('/billing/send_personal_bill/', methods=['GET', 'POST']) @requires_baron def send_personal_bill(name=None): if request.method == 'POST': - return "To be implemented" - #return redirect('/billing') + users = get_users() + u = get_user_by_name(name) + message = request.form['message'] + subject = request.form['subject'] + send_email(u.email, subject, message) + + success = "Die Rechnung wurde an %s versendet." %u.longname + return render_template('billing.html', users=users, success=success, dept=0, user=get_user_by_name(session.get('name'))) if request.method == 'GET': return render_template('billing_personal.html', user_to_bill=get_user_by_name(name) ,user=get_user_by_name(session.get('name'))) -@app.route('/billing/send_all_bills', methods=['GET','POST']) +@app.route('/billing/send_all_bills', methods=['GET', 'POST']) @requires_baron def send_mass_mail(name=None): if request.method == 'POST': - return "To be implemented" + users = get_users() + u = get_user_by_name(name) + message = request.form['message'] + subject = request.form['subject'] + + send_emails(message, subject, users) + #for user in users: + # message_parsed = parse_email(message, user, 3) # change ammount of depts here + # subject_parsed = parse_email(subject, user, 3) # change ammount of depts here! + # send_email(user.email, subject_parsed, message_parsed) + + success = "An alle user werden Rechnungen versendet." + return render_template('billing.html', users=users, success=success, dept=0, user=get_user_by_name(session.get('name'))) + if request.method == 'GET': return render_template('billing_mass_mail.html', user=get_user_by_name(session.get('name')))