diff --git a/emails/cancelled b/emails/cancelled index 168ecab..b0e5eed 100644 --- a/emails/cancelled +++ b/emails/cancelled @@ -1,4 +1,3 @@ -Hi {{your_name}}! +Hi $your_name! -Unfortunately, {{user.email}} has chosen to cancel their monthly donation of -{{amount}}. +Unfortunately, $email has chosen to cancel their monthly donation of $amount. diff --git a/emails/declined b/emails/declined index 777baec..6e44526 100644 --- a/emails/declined +++ b/emails/declined @@ -1,12 +1,12 @@ An attempt was just made to charge your card for your monthly donation to -{{your_name}} for {{amount}}. Unfortunately, your card was declined. +$your_name for $amount. Unfortunately, your card was declined. The donation has been disabled. If you would like to, you may create a new recurring donation here: -{{root}} +$root Thanks! -- -{{your_name}} +$your_name diff --git a/emails/new_donation b/emails/new_donation index 00d2f8c..caf77ec 100644 --- a/emails/new_donation +++ b/emails/new_donation @@ -1,5 +1,5 @@ -Hi {{your_name}}! +Hi $your_name! -Good news: {{user.email}} just donated {{amount}}{{frequency}}! +Good news: $email just donated $amount$frequency! -{{comment}} +$comment diff --git a/emails/reset-password b/emails/reset-password index 9d1d760..e78468b 100644 --- a/emails/reset-password +++ b/emails/reset-password @@ -2,12 +2,12 @@ Someone, probably you, wants to reset your donor password. To proceed, click this link: -{{root}}/password-reset/{{user.password_reset}} +$root/password-reset/$password_reset This link expires in 24 hours. If you don't want to change your password or you weren't expecting this email, just ignore it. -If you have questions, send an email to {{your_email}}. +If you have questions, send an email to $your_email. -- -{{your_name}} +$your_name diff --git a/emails/thank-you b/emails/thank-you index 7e1e8a9..e8125b0 100644 --- a/emails/thank-you +++ b/emails/thank-you @@ -2,18 +2,13 @@ Thank you for donating! Receipt: -{{#monthly}} -Monthly donation {{amount}} -{{/monthly}} -{{^monthly}} -One-time donation {{amount}} -{{/monthly}} +$summary $amount You can view and manage your donations online here: -{{root}}/panel +$root/panel -Thanks again! If you have questions, contact {{your_email}}. +Thanks again! If you have questions, contact $your_email. -- -{{your_name}} +$your_name diff --git a/fosspay/email.py b/fosspay/email.py index b05ac11..01e6a4a 100644 --- a/fosspay/email.py +++ b/fosspay/email.py @@ -1,11 +1,11 @@ import smtplib -import pystache import os import html.parser from email.mime.text import MIMEText from email.utils import localtime, format_datetime from werkzeug.utils import secure_filename from flask import url_for +from string import Template from fosspay.database import db from fosspay.objects import User, DonationType @@ -20,15 +20,14 @@ def send_thank_you(user, amount, monthly): smtp.starttls() smtp.login(_cfg("smtp-user"), _cfg("smtp-password")) with open("emails/thank-you") as f: - message = MIMEText(html.parser.HTMLParser().unescape(\ - pystache.render(f.read(), { - "user": user, - "root": _cfg("protocol") + "://" + _cfg("domain"), - "your_name": _cfg("your-name"), - "amount": currency.amount("{:.2f}".format(amount / 100)), - "monthly": monthly, - "your_email": _cfg("your-email") - }))) + tmpl = Template(f.read()) + message = MIMEText(tmpl.substitute(**{ + "root": _cfg("protocol") + "://" + _cfg("domain"), + "your_name": _cfg("your-name"), + "summary": ("Monthly donation" if monthly else "One-time donation"), + "amount": currency.amount("{:.2f}".format(amount / 100)), + "your_email": _cfg("your-email") + })) message['Subject'] = "Thank you for your donation!" message['From'] = _cfg("smtp-from") message['To'] = user.email @@ -44,13 +43,13 @@ def send_password_reset(user): smtp.starttls() smtp.login(_cfg("smtp-user"), _cfg("smtp-password")) with open("emails/reset-password") as f: - message = MIMEText(html.parser.HTMLParser().unescape(\ - pystache.render(f.read(), { - "user": user, - "root": _cfg("protocol") + "://" + _cfg("domain"), - "your_name": _cfg("your-name"), - "your_email": _cfg("your-email") - }))) + tmpl = Template(f.read()) + message = MIMEText(tmpl.substitute(**{ + "password_reset": user.password_reset, + "root": _cfg("protocol") + "://" + _cfg("domain"), + "your_name": _cfg("your-name"), + "your_email": _cfg("your-email") + })) message['Subject'] = "Reset your donor password" message['From'] = _cfg("smtp-from") message['To'] = user.email @@ -66,13 +65,12 @@ def send_declined(user, amount): smtp.starttls() smtp.login(_cfg("smtp-user"), _cfg("smtp-password")) with open("emails/declined") as f: - message = MIMEText(html.parser.HTMLParser().unescape(\ - pystache.render(f.read(), { - "user": user, - "root": _cfg("protocol") + "://" + _cfg("domain"), - "your_name": _cfg("your-name"), - "amount": currency.amount("{:.2f}".format(amount / 100)) - }))) + tmpl = Template(f.read()) + message = MIMEText(tmpl.substitute(**{ + "root": _cfg("protocol") + "://" + _cfg("domain"), + "your_name": _cfg("your-name"), + "amount": currency.amount("{:.2f}".format(amount / 100)) + })) message['Subject'] = "Your monthly donation was declined." message['From'] = _cfg("smtp-from") message['To'] = user.email @@ -88,17 +86,16 @@ def send_new_donation(user, donation): smtp.starttls() smtp.login(_cfg("smtp-user"), _cfg("smtp-password")) with open("emails/new_donation") as f: - message = MIMEText(html.parser.HTMLParser().unescape(\ - pystache.render(f.read(), { - "user": user, - "root": _cfg("protocol") + "://" + _cfg("domain"), - "your_name": _cfg("your-name"), - "amount": currency.amount("{:.2f}".format( - donation.amount / 100)), - "frequency": (" per month" - if donation.type == DonationType.monthly else ""), - "comment": donation.comment or "", - }))) + tmpl = Template(f.read()) + message = MIMEText(tmpl.substitute(**{ + "email": user.email, + "your_name": _cfg("your-name"), + "amount": currency.amount("{:.2f}".format( + donation.amount / 100)), + "frequency": (" per month" + if donation.type == DonationType.monthly else ""), + "comment": donation.comment or "", + })) message['Subject'] = "New donation on fosspay!" message['From'] = _cfg("smtp-from") message['To'] = f"{_cfg('your-name')} <{_cfg('your-email')}>" @@ -114,14 +111,14 @@ def send_cancellation_notice(user, donation): smtp.starttls() smtp.login(_cfg("smtp-user"), _cfg("smtp-password")) with open("emails/cancelled") as f: - message = MIMEText(html.parser.HTMLParser().unescape(\ - pystache.render(f.read(), { - "user": user, - "root": _cfg("protocol") + "://" + _cfg("domain"), - "your_name": _cfg("your-name"), - "amount": currency.amount("{:.2f}".format( - donation.amount / 100)), - }))) + tmpl = Template(f.read()) + message = MIMEText(tmpl.substitute(**{ + "email": user.email, + "root": _cfg("protocol") + "://" + _cfg("domain"), + "your_name": _cfg("your-name"), + "amount": currency.amount("{:.2f}".format( + donation.amount / 100)), + })) message['Subject'] = "A monthly donation on fosspay has been cancelled" message['From'] = _cfg("smtp-from") message['To'] = f"{_cfg('your-name')} <{_cfg('your-email')}>" diff --git a/requirements.txt b/requirements.txt index d703c30..9182f14 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,3 @@ psycopg2 bcrypt gunicorn sqlalchemy-utils -pystache