- add sending of emails (works except dept)

This commit is contained in:
Ulrich Knechtelsdorfer
2016-04-06 22:38:56 +02:00
parent 2ee9089583
commit 0bd185482d
5 changed files with 123 additions and 17 deletions

60
app/send_email.py Normal file
View File

@@ -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

View File

@@ -9,6 +9,7 @@
<p>{{ success }}</p>
{% endif %}
<h1>Abrechnung</h1>
<p>An alle User Rechnungen <a href="/billing/send_all_bills"> versenden</a>.</p>
<form name="billing" method="post" action="/billing">
<table>
<tr>
@@ -30,5 +31,4 @@
</table>
<input type="submit" value="Änderungen übernehmen">
</form>
<p>An alle User Rechnungen <a href="/billing/send_all_bills"> versenden</a>.</p>
{% endblock %}

View File

@@ -1,23 +1,34 @@
{% extends "base.html"%}
{% set title = "An alle User Rechnung versenden" %}
{% set title = "An alle User Rechnungen versenden" %}
{% block content %}
<h3>TODO: </h3>
<ul>
<li>actual send emails</li>
<li>save default text somewhere and make it configureable</li>
<li>parse wildcards</li>
<li>insert the right ammount of dept</li>
</ul>
{% if success %}
<p>{{ success }}</p>
{% endif %}
<h1>Rechnung an alle verschicken</h1>
<form name="billing" method="post" action="/billing/send_all_bills">
<textarea cols="80" rows="20">
Betreff:<input type="text" name="subject" value="Bierrechnung von der Baroness"/> <br />
<textarea cols="80" rows="20" name="message">
Hallo %%longname%%
du hast zurzeit viele Schulden.
%%if_is_black%%Weil du zu hohe Schulden hast, bist du geschwärzt%%endif%%
</textarea>
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%%
</textarea><br />
<p> Warnung: Das versenden vieler emails dauert ein weilchen.</p>
<input type="submit" value="Email versenden">
</form>
<h1>Kommandos</h1>
<p>Der text den du eingibst wird von der Baroness noch personalisiert. Folgende Komandos kennt die Baroness.</p>
<ul>
<li> <b>%%longname%%</b> fügt den vollen namen des Benutzers ein.</li>
<li> <b>%%dept%%</b> fügt die Höhe der Schulden des Benutzers ein. </li>
<li> <b>%%if_is_black%% TEXT %%end_if_is_black%%</b> fügt den TEXT ein, falls der user geschwärzt ist.</li>
</ul>
{% endblock %}

View File

@@ -11,13 +11,20 @@
{% endif %}
<h1>Rechnung an {{user_to_bill.longname}} verschicken</h1>
<form name="billing" method="post" action="/billing/send_personal_bill/{{user_to_bill.name}}">
<textarea cols="80" rows="20">
Betreff:<input type="text" name="subject" value="Bierrechnung von der Baroness"/> <br />
<textarea cols="80" rows="20" name="message">
Hallo {{user_to_bill.longname}}
du hast zurzeit viele Schulden.
{% if user_to_bill.isblack %}Weil du zu hohe Schulden hast, bist du geschwärzt{% endif %}
</textarea>
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}}
</textarea><br />
<input type="submit" value="Email versenden">
</form>
<p>An alle User Rechnungen <a href="/billing/send_all_bills"> versenden</a>.</p>
{% endblock %}

View File

@@ -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/<name>', methods=['GET','POST'])
@app.route('/billing/send_personal_bill/<name>', 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')))