From 3fd1b016b0dbeb91de14e333efa7db97eb74960d Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Mon, 31 Jan 2022 03:49:50 +0000 Subject: [PATCH] Send new members a welcome email --- apiserver/apiserver/api/emails/welcome.html | 40 ++++++++++++++++++ apiserver/apiserver/api/emails/welcome.txt | 30 ++++++++++++++ apiserver/apiserver/api/utils.py | 10 ++++- apiserver/apiserver/api/utils_email.py | 46 +++++++++++++++++++++ 4 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 apiserver/apiserver/api/emails/welcome.html create mode 100644 apiserver/apiserver/api/emails/welcome.txt create mode 100644 apiserver/apiserver/api/utils_email.py diff --git a/apiserver/apiserver/api/emails/welcome.html b/apiserver/apiserver/api/emails/welcome.html new file mode 100644 index 0000000..a3a5df0 --- /dev/null +++ b/apiserver/apiserver/api/emails/welcome.html @@ -0,0 +1,40 @@ + + + + + + + +
Hi [name],
+

+
You just signed up to Spaceport with the username: [username]
+

+
To manage your Protospace membership go to:
+
https://my.protospace.ca
+

+
You have automatically been added to our forum Spacebar at:
+
https://forum.protospace.ca
+

+
Please introduce yourself here:
+
https://forum.protospace.ca/c/chattymcchatface/new-user-introductions/31
+

+
If you have any questions, you will get the fastest response there.
+

+
Your next goal is to become vetted after:
+
- paying your member dues
+
- being a member for four weeks
+
- attending a New Member Orientation
+
- finding two members to sponsor (vouch for) you
+

+
You can meet members Tuesday evenings during our open house.
+

+
Mark [date] on your calendar as the day you can get vetted.
+

+
Sign up for a New Member Orientation here:
+
https://my.protospace.ca/classes
+

+
Good luck,
+
Spaceport
+

+ + diff --git a/apiserver/apiserver/api/emails/welcome.txt b/apiserver/apiserver/api/emails/welcome.txt new file mode 100644 index 0000000..265a6ae --- /dev/null +++ b/apiserver/apiserver/api/emails/welcome.txt @@ -0,0 +1,30 @@ +Hi [name], + +You just signed up to Spaceport with the username: [username] + +To manage your Protospace membership go to: +https://my.protospace.ca + +You have automatically been added to our forum Spacebar at: +https://forum.protospace.ca + +Please introduce yourself here: +https://forum.protospace.ca/c/chattymcchatface/new-user-introductions/31 + +If you have any questions, you will get the fastest response there. + +Your next goal is to become vetted after: +- paying your member dues +- being a member for four weeks +- attending a New Member Orientation +- finding two members to sponsor (vouch for) you + +You can meet members Tuesday evenings during our open house. + +Mark [date] on your calendar as the day you can get vetted. + +Sign up for a New Member Orientation here: +https://my.protospace.ca/classes + +Good luck, +Spaceport diff --git a/apiserver/apiserver/api/utils.py b/apiserver/apiserver/api/utils.py index 5285519..90700b2 100644 --- a/apiserver/apiserver/api/utils.py +++ b/apiserver/apiserver/api/utils.py @@ -21,7 +21,7 @@ from django.db.models import Sum from django.core.cache import cache from django.utils.timezone import now, pytz -from . import models, serializers, utils_ldap, utils_stats, utils_auth, utils +from . import models, serializers, utils_ldap, utils_stats, utils_auth, utils, utils_email from .. import settings STATIC_FOLDER = 'data/static/' @@ -374,6 +374,14 @@ def register_user(data, user): utils.alert_tanner(msg) logger.info(msg) + if data['request_id']: utils_stats.set_progress(data['request_id'], 'Sending welcome email...') + try: + utils_email.send_welcome_email(user.member) + except BaseException as e: # TODO: remove, just for testing + msg = 'Problem sending welcome email: ' + str(e) + logger.exception(msg) + alert_tanner(msg) + if data['request_id']: utils_stats.set_progress(data['request_id'], 'Done!') time.sleep(1) diff --git a/apiserver/apiserver/api/utils_email.py b/apiserver/apiserver/api/utils_email.py new file mode 100644 index 0000000..7a16d96 --- /dev/null +++ b/apiserver/apiserver/api/utils_email.py @@ -0,0 +1,46 @@ +import logging +logger = logging.getLogger(__name__) + +import os +import smtplib +from datetime import datetime, timedelta + +from django.core.mail import send_mail + +from . import utils +from .. import settings + +EMAIL_DIR = os.path.join(settings.BASE_DIR, 'apiserver/api/emails/') + +def send_welcome_email(member): + vetting_date = member.application_date + timedelta(days=28) + + def replace_fields(text): + return text.replace( + '[name]', member.first_name, + ).replace( + '[username]', member.user.username, + ).replace( + '[date]', vetting_date.strftime('%A, %B %d'), + ) + + with open(EMAIL_DIR + 'welcome.txt', 'r') as f: + email_text = replace_fields(f.read()) + + with open(EMAIL_DIR + 'welcome.html', 'r') as f: + email_html = replace_fields(f.read()) + + try: + send_mail( + subject='Welcome to Protospace!', + message=email_text, + from_email=None, # defaults to DEFAULT_FROM_EMAIL + recipient_list=[member.user.email, 'portal@tannercollin.com'], + html_message=email_html, + ) + + logger.info('Sent welcome email:\n' + email_text) + except smtplib.SMTPException as e: + msg = 'Problem sending welcome email to ' + member.user.email + ': ' + str(e) + utils.alert_tanner(msg) + logger.exception(msg)